.net core自定義高性能的Web API服務網關

網關對於服務起到一個統一控制處理的做用,也便於客戶端更好的調用;經過網關能夠靈活地控制服務應用接口負載,故障遷移,安全控制,監控跟蹤和日誌處理等。因爲網關在性能和可靠性上都要求很是嚴格,因此針對業務需求來制定一個服務網關須要花費比較大的成本。如下介紹一下Bumblebee基礎Web API網關組件,經過它能夠靈活擴展更適合業務需求的應用接口網關服務。git

簡介

Bumblebee是基於BeetleX開發的HTTP網關服務組件,提供了高效的處理性能和基礎的網關代理功能;因爲Bumblebee是一個基礎組件因此它並不像Nginx這些服務直接運行,使用者必須引用Bumblebee經過代碼的方式來制定符合本身需求的網關應用。雖然須要編寫代碼來制定網關,但組件提供簡單的方法和事件可讓網關的制定變得很是簡單。接下來介紹一下如何經過Bumblebee來實現一個簡單的Web API負載網關。github

構建控制檯程序

引用Bumblebee

能夠經過Nuget的方式進行引用組件,搜索Beetlex選擇BeetleX.Bumblebee便可以,也能夠經過Git下載項目代碼進行項目引用 https://github.com/IKende/Bumblebee瀏覽器

網關實現

class Program { private static Gateway g; static void Main(string[] args) { g = new Gateway(); g.HttpOptions(h => h.LogToConsole = true); g.AddServer("http://192.168.2.25:9090").AddUrl("*", 0); g.AddServer("http://192.168.2.26:9090").AddUrl("*", 0); g.Open(); Console.Read(); } }

以上代碼實現由http://192.168.2.25:9090http://192.168.2.26:9090兩個服務負載的網關服務,這樣一個網關服務就構建完成,運行程序能夠看到相關日誌狀況:安全

程序運行後組件默認是監聽8080端口,能夠經過瀏覽器訪問網關服務器

這時候你會看到請求返回的服務信息頭是Server: Bumblebee(BeetleX),經過輸出日誌能夠查看請求的狀況性能

 

日誌顯示,請求被路由到不一樣的服務器上測試

HTTP配置

組件默認提供了一些HTTP服務配置信息,在默認的狀況不做任何配置便可提供網關服務,若是想須要更換端口或啓用HTTPS服務能夠經過HttpOptions方法進行設置,具體配置以下:url

g.HttpOptions(h => { h.Port = 80; h.SSL = true; h.CertificateFile = "ikende.com.pfx"; h.CertificatePassword = "******"; h.LogToConsole = true; h.LogLevel = BeetleX.EventArgs.LogType.Info; });

以上配置服務端口爲80,而且開啓SSL來支持HTTPS訪問(開啓HTTPS須要指定證書和密碼)。spa

重權分配

上面的示例是全部請求負載到這兩個服務中;因爲二者的權重都是0因此會進行平均負載。若是想192.168.2.26:9090的負載比重大些能夠調整相關僅重值如:代理

g.AddServer("http://192.168.2.25:9090").AddUrl("*", 5); g.AddServer("http://192.168.2.26:9090").AddUrl("*", 10);

以上配置是描述192.168.2.26:9090192.168.2.25:9090多負載一倍的請求量;權重配置的最大值是10最小值是0,權重值爲0的服務是默認不參與負載處理工做,當其餘服務不可用的狀況下0權重的服務纔會生效。

Url配置

通常狀況下使用*來匹配請求負載,但能夠針對某些Url正則匹配的方式來制定負載策略,組件是優先匹配長正則,在沒有匹配的狀況下才會使用*的負載策略.

g.AddServer("http://192.168.2.25:9090").AddUrl("*", 0); g.AddServer("http://192.168.2.26:9090").AddUrl("*", 0); g.AddServer("http://192.168.2.27:9090").AddUrl("/order.*", 0); g.AddServer("http://192.168.2.28:9090").AddUrl("/order.*", 0);

以上配置/order.*請求的路由負載到192.168.2.27:9090192.168.2.28:9090上,其實則負載到192.168.2.25:9090192.168.2.26:9090

基礎事件

組件提供了一些基礎事件用於記錄和控制一些請求處理

Requesting事件

網關接受請求的時候觸發這個事件,用戶能夠經過這個事件取消轉發並返回自定義內容

g.Requesting += (o, e) => { e.Cancel = true; e.Response.Result(new NotFoundResult("url not found")); };

Requested事件

網關接受請求並完成響應後觸發這個事件,經過這個事件能夠記錄網關轉發完成的狀態狀況。

g.Requested += (o, e) => { var code = e.Code; };

ResponseError事件

網關接受請求,但處理錯誤觸發這個事件,經過這個事件能夠自定義錯誤響應的內容

g.ResponseError += (o, e) => { e.Result = new BadGateway("order not found"); };

基礎性能指標

做爲一個網關組件,必須有着可靠和高效的性能。如下針對Bumblebee組件的一個簡單測試,測試方式是開啓200個用戶進行1億次請求測試,在一臺E3-1230V2的服務器上測出的結果是7萬多RPS代理轉發處理,代理上下行帶寬達到7Gb

測試內容

 

測試結果

 

Bumblebee項目地址

https://github.com/IKende/Bumblebee

相關文章
相關標籤/搜索