Ocelot中文文件-負載均衡
Ocelot能通過可用的下游服務對每個ReRoute進行負載平衡。 這意味著您可以擴充套件您的下游服務,並且Ocelot可以有效地使用它們。
可用的負載均衡器的型別是:
LeastConnection - 最少連線,跟蹤哪些服務正在處理請求,並把新請求傳送到現有請求最少的服務上。該演算法狀態不在整個Ocelot叢集中分佈。
RoundRobin - 輪詢可用的服務併發送請求。 該演算法狀態不在整個Ocelot叢集中分佈。
NoLoadBalancer - 不負載均衡,從配置或服務發現提供程式中取第一個可用的下游服務。
CookieStickySessions - 使用cookie關聯所有相關的請求到制定的服務。下面有更多資訊。
你必須在你的配置中選擇使用哪種負載均衡方式。
配置
下面展示瞭如何使用ocelot.json給一個ReRoute設定多個下游服務,並選擇LeadConnection負載均衡器。這是設定負載均衡最簡單的方法。
{ "DownstreamPathTemplate": "/api/posts/{postId}", "DownstreamScheme": "https", "DownstreamHostAndPorts": [ { "Host": "10.0.1.10", "Port": 5000, }, { "Host": "10.0.1.11", "Port": 5000, } ], "UpstreamPathTemplate": "/posts/{postId}", "LoadBalancerOptions": { "Type": "LeastConnection" }, "UpstreamHttpMethod": [ "Put", "Delete" ] }
服務發現
下面展示瞭如何使用服務發現設定一個ReRoute,並選擇LeadConnection負載均衡器。
{ "DownstreamPathTemplate": "/api/posts/{postId}", "DownstreamScheme": "https", "UpstreamPathTemplate": "/posts/{postId}", "UpstreamHttpMethod": [ "Put" ], "ServiceName": "product", "LoadBalancerOptions": { "Type": "LeastConnection" }, "UseServiceDiscovery": true }
設定此操作時,Ocelot將從服務發現提供程式查詢下游主機和埠,並通過所有可用服務來負載均衡請求。 如果您向服務發現提供程式(consul)新增和刪除服務,那麼Ocelot將遵循這一點,停止呼叫已被刪除的服務並開始呼叫已新增的服務。
CookieStickySessions
我已經實現了一個非常基本的粘性會話型別的負載平衡器。 它意味著支援的場景是你有一堆不共享會話狀態的下游伺服器,如果你為其中一臺伺服器獲得多個請求,那麼它應該每次都去同一個盒子,否則給使用者的會話狀態可能不正確。 這個特性在問題#322中有被提出,儘管使用者想要的比只是粘性會話更加複雜 : ),無論如何,我認為這是個不錯的功能!
為了設定CookieStickySessions負載均衡器,你需要做如下事情。
{
"DownstreamPathTemplate": "/api/posts/{postId}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "10.0.1.10",
"Port": 5000,
},
{
"Host": "10.0.1.11",
"Port": 5000,
}
],
"UpstreamPathTemplate": "/posts/{postId}",
"LoadBalancerOptions": {
"Type": "CookieStickySessions",
"Key": "ASP.NET_SessionId",
"Expiry": 1800000
},
"UpstreamHttpMethod": [ "Put", "Delete" ]
}
LoadBalancerOptions的Type需要是CookieStickySessions,Key是您希望用於粘性會話的cookie的名稱,Expiry是您希望會話被粘合的時間,以毫秒為單位。 請記住,每次請求都會重新整理,這意味著會模仿會話的工作方式(滑動過期--譯者注)。
如果您有多個具有相同LoadBalancerOptions的ReRoutes,那麼所有這些ReRoutes將為隨後的請求使用相同的負載均衡器。 這意味著會話將會跨ReRoute進行粘合。
請注意,如果您提供多個DownstreamHostAndPort或者您正在使用Consul等服務發現提供程式,並且返回多個服務,則CookieStickySessions將使用迴圈選擇下一個伺服器。 目前是硬編碼,但可以改變。