Ocelot中文文檔-負載均衡(轉)


原文地址:https://www.cnblogs.com/loogn/p/9007866.html

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將使用循環選擇下一個服務器。 目前是硬編碼,但可以改變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM