閘道器對於服務起到一個統一控制處理的作用,也便於客戶端更好的呼叫;透過閘道器可以靈活地控制服務應用介面負載,故障遷移,安全控制,監控跟蹤和日誌處理等。由於閘道器在效能和可靠性上都要求非常嚴格,所以針對業務需求來制定一個服務閘道器需要花費比較大的成本。以下介紹一下Bumblebee
基礎Web API閘道器元件,透過它可以靈活擴充套件更適合業務需求的應用介面閘道器服務。
簡介
Bumblebee
是基於BeetleX
開發的HTTP閘道器服務元件,提供了高效的處理效能和基礎的閘道器代理功能;由於Bumblebee
是一個基礎元件所以它並不像Nginx這些服務直接執行,使用者必須取用Bumblebee
透過程式碼的方式來制定符合自己需求的閘道器應用。雖然需要編寫程式碼來制定閘道器,但元件提供簡單的方法和事件可以讓閘道器的制定變得非常簡單。接下來介紹一下如何透過Bumblebee
來實現一個簡單的Web API負載閘道器。
構建控制檯程式
取用Bumblebee
可以透過Nuget
的方式進行取用元件,搜尋Beetlex
選擇BeetleX.Bumblebee
即可以,也可以透過Git下載專案程式碼進行專案取用 https://github.com/IKende/Bumblebee
閘道器實現
以上程式碼實現由http://192.168.2.25:9090
和http://192.168.2.26:9090
兩個伺服器負載的閘道器服務,這樣一個閘道器服務就構建完成,執行程式可以看到相關日誌情況:
程式執行後元件預設是監聽8080埠,這個時候可以透過瀏覽器訪問閘道器
你會看到請求傳回的服務資訊頭是Server: Bumblebee(BeetleX)
,透過輸出日誌可以檢視請求的情況
日誌顯示請求被路由到不同的伺服器上
HTTP配置
元件預設提供了一些HTTP服務配置資訊,在預設的情況不作任何配置即可提供閘道器服務,如果想需要更換埠或啟用HTTPS服務可以透過HttpOptions
方法進行設定,具體配置如下:
以上配置服務埠為80,並且開啟SSL來支援HTTPS訪問(開啟HTTPS需要指定證書和密碼)。
重權分配
以上示例是所有請求負載到這兩個服務中;由於兩者的權重都是0所以會進行平均負載。如果想192.168.2.26:9090
的負載比重大些可以調整相關僅重值如:
以上配置是描述192.168.2.26:9090
比192.168.2.25:9090
多負載一倍的請求量;權重配置的最大值是10最小值是0,權重值為0的服務預設是不參與負載處理工作,當其他服務不可用的情況下0權重的服務才會生效。
Url配置
一般情況下使用*
來匹配請求負載,但可以針對某些Url正則匹配的方式來制定負載策略,元件是優先匹配長正則,在沒有匹配的情況下才會使用*
的負載策略.
以上配置/order.*
請求的路由負載到192.168.2.27:9090
和192.168.2.28:9090
上,其他則路由到192.168.2.25:9090
和192.168.2.26:9090
上
基礎事件
元件提供了一些基礎事件用於記錄和控制一些請求處理
Requesting事件
閘道器接受請求的時候觸發這個事件,使用者可以透過這個事件取消轉發並傳回自定義內容
Requested事件
閘道器接受請求並完成響應後觸發這個事件,透過這個事件可以記錄閘道器轉發完成的狀態情況。
ResponseError事件
閘道器接受請求,但處理錯誤觸發這個事件,透過這個事件可以自定義錯誤響應的內容
基礎效能指標
作為一個閘道器元件,必須有著可靠和高效的效能。以下針對Bumblebee
元件的一個簡單測試,測試方式是開啟200個使用者進行1億次請求測試,在一臺E3-1230V2的伺服器上測出的結果是7萬多RPS代理轉發處理,代理上下行頻寬達到7Gb
測試內容
試結果
Bumblebee專案地址
https://github.com/IKende/Bumblebee
原文地址:https://www.cnblogs.com/smark/p/10382650.html
.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com