1. 程式人生 > >Ocelot中文文件-負載均衡

Ocelot中文文件-負載均衡

原文: 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將使用迴圈選擇下一個伺服器。 目前是硬編碼,但可以改變。