Net分散式系統之六:微服務之API網關

来源:http://www.cnblogs.com/Andon_liu/archive/2017/05/21/6886486.html
-Advertisement-
Play Games

本人建立了個人技術、工作經驗的分享微信號,計劃後續公眾號同步更新分享,比在此更多具體。歡迎有興趣的同學一起加入相互學習。基於上篇微服務架構分享,今天分享其中一個重要的基礎組件“API網關”。 一、引言 隨著互聯網的快速發展,當前以步入移動互聯、物聯網時代。用戶訪問系統入口也變得多種方式,由原來單一的 ...


  本人建立了個人技術、工作經驗的分享微信號,計劃後續公眾號同步更新分享,比在此更多具體。歡迎有興趣的同學一起加入相互學習。基於上篇微服務架構分享,今天分享其中一個重要的基礎組件“API網關”。

一、引言

  隨著互聯網的快速發展,當前以步入移動互聯、物聯網時代。用戶訪問系統入口也變得多種方式,由原來單一的PC客戶端,變化到PC客戶端、各種瀏覽器、手機移動端及智能終端等。同時系統之間大部分都不是單獨運行,經常會涉及與其他系統對接、共用數據的需求。所以系統需要升級框架滿足日新月異需求變化,支持業務發展,並將框架升級為微服務架構。“API網關”核心組件是架構用於滿足此些需求。

  很多互聯網平臺已基於網關的設計思路,構建自身平臺的API網關,國內主要有京東、攜程、唯品會等,國外主要有Netflix、Amazon等。


  

二、業界相關網關框架

  業界為了滿足這些需求,已有相關的網關框架。

  1、基於nginx平臺實現的網關有:KONG、API Umbrella

  2、自研發的網關有:apigee、Zuul


 

 

三、API網關設計

  API網關是微服務架構(Microservices Architecture)標準化服務的模式。API網關定位為應用系統服務介面的網關,區別於網路技術的網關,但是原理則是一樣。API網關統一服務入口,可方便實現對平臺眾多服務介面進行管控,對訪問服務的身份認證、防報文重放與防數據篡改、功能調用的業務鑒權、響應數據的脫敏、流量與併發控制,甚至基於API調用的計量或者計費等等。組件設計如下:

    

                                                                                圖1- API網關功能結構示意圖

  多種客戶端程式,例如:移動APP、PC端和智能終端設備等。客戶端程式通過互聯網或者專網訪問API網關,由API網關統一接收請求後,通過一系列模塊定位具體處理的微服務機,並將其轉發至目標服務處理,網關與微服務之間通信是內部區域網。API網關統一規範平臺對外的服務,同時充當了平臺的PaaS層。如上圖所示,API網關功能結構基於管道模型和支持可插拔式的設計開發,提供統一基於http協議的WebAPI訪問介面,內部每個模塊各自實現功能,包括:黑白名單、日誌、協議適配、身份認證、計流限流及路由。並且依賴“訪問認證中心、服務發佈管理中心”分別實現API網關訪問許可權控制和定位目標微服務。各模塊功能說明如下:

  1、黑白名單:實現通過IP地址控制禁止訪問網關功能,此功能是應用層面控制實現,再往前也可以通過網路傳輸方面進行控制訪問。

  2、日誌:實現訪問日誌的記錄,可用於分析訪問、處理性能指標,同時將分析結果支持其他模塊功能應用。

  3、協議適配:實現通信協議校驗、適配轉換的功能。

  4、身份認證:負責網關訪問身份認證驗證,此模塊與“訪問認證中心”通信,實際認證業務邏輯交移“訪問認證中心”處理。

  5、計流限流:實現微服務訪問流量計算,基於流量計算分析進行限流,可以定義多種限流規則。

  6、路由:路由是API網關很核心的模塊功能,此模塊實現根據請求,鎖定目標微服務並將請求進行轉發。此模塊需要與“服務發佈管理中心”通信。“服務發佈管理中心”實現微服務發佈註冊管理功能,與其通信獲得目標微服務信息。


 

 

四、API網關部署

  API網關是一個公共基礎組件,無狀態,可支持多套分散式部署。如下圖所示:

           

                                                                      圖2- API網關部署示意圖


 

五、API網關實現技術

  1、技術:框架整體基於.NET平臺構建,所以API網關也暫定基於.NET4.6平臺和ASP.NET WebAPI2.0框架實現。具體軟體架構就用上一篇所介紹的。

  2、性能:部署於IIS7.0,1000個併發查詢請求,平均響應90ms。

  可能在IIS7.0和.Net4.6平臺,在大併發性能處理上會更不上,後續將考慮基於.net core進行升級開發,並部署於Linux平臺。

  API網關主要原理是相通,不同平臺結合本身平臺整體框架設計,可選用不同的技術實現,目前有些基於Spring MVC、node.js、Erlang技術進行研發。


 

六、結語

  以上是對API網關概要進行設計,還有其他方面的內容此篇文章未討論,例如:安全性、高併發、擴展性等特性設計,同時作為平臺其中一個組件,也涉及與其他組件一併協同運行。此塊內容會後續分享。

 

 

作者:劉蔡濤
出處:http://www.cnblogs.com/Andon_liu 
關於作者:專註於微軟平臺項目架構、管理。熟悉設計模式、領域驅動、架構設計、敏捷開發和項目管理。現主要從事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的項目開發、架構、管理工作。 如有問題或建議,請一起學習討論! 
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。 
如有問題,可以郵件:[email protected] 聯繫我,謝謝。


微信號: 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 初始化git 配置git 使用Git的第一件事就是設置你的名字和email,這些就是你在提交commit時的簽名,每次提交記錄里都會包含這些信息。使用git config命令進行配置 執行了上面的命令後,會在家目錄( )下建立一個叫 的文件(該文件為隱藏文件,需要使用 查看到). 內容一般像下麵這樣 ...
  • How to set up host-only virtual machines that host can access it... 問題 因為工作和學習,我經常需要移動裝有Linux系統的筆記本電腦,有時在家裡用,有時在公司里用,這兩個地方的網路都是不同的,或者有時要開會或到外面,不能連接任何的 ...
  • 問題如題,df -h 出來的容量與du -sh 查看的容量信息不一樣,是那裡出了問題了嗎? 下麵分別是du -sh *與df -h出來的結果 以上是相關查詢命令的輸出,下麵是硬碟fdisk -l的輸出信息 之前也使用 badblocks 進行掃描了下,壞的塊為0。 實在是找不出來相關的原因了,遂發出 ...
  • 目錄結構: /bin:存放系統常用的命令程式 /boot:系統啟動或引導所需要的一些文件 /dev:可用的設備文件 /etc:系統配置相關的東西 /home:所有用戶的主目錄 /lib,lib64:存放系統的庫文件 /media:即插即用設備文件 /mnt:存儲設備掛載目錄 /opt:可選軟體包安裝 ...
  • ———————————————————————————————————————————— 分類: 按結構原理分: 觸點式開關按鍵 無觸點開關按鍵 接入方式 獨立式按鍵 矩陣式鍵盤 按結構原理分: 觸點式開關按鍵 無觸點開關按鍵 接入方式 獨立式按鍵 矩陣式鍵盤 ——————————————————— ...
  • 提高逼格,給自己的網站加入智能聊天功能 引言 現在突然發現有很多 QQ 群都開啟了群機器人的功能,其中有兩個角色,他們分別是:Baby Q 和 QQ 小冰。在 Q 群中,你可以對他們進行任意程度的調戲,不過,遺憾的是魚和熊掌不可得兼,一個群只能進行二選一。據說 Baby Q 來自圖靈公司,而小冰卻是 ...
  • 背水一戰 Windows 10 之 控制項(集合類 - ItemsControl): 基礎知識, 數據綁定, 項模板選擇器 ...
  • ZKEACMS Core 是基於 .net core 開發的,可以在 windows, linux, mac 上跨平臺運行,接下來我們來看看如何在 CentOS 上使用Jexus托管運行 ZKEACMS,通常我們在Linux部署ASP.NET Core應用,按照微軟的官方文檔,我們通常需要Nginx... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...