侧边栏

Ocelot中文文档-负载均衡(转)

原文地址:https://www.cnblogs.com/snaildev/articles/9151759.html

Ocelot能通过可用的下游服务对每个Route进行负载平衡。 这意味着您可以扩展您的下游服务,并且Ocelot可以有效地使用它们。

可用的负载均衡器的类型是:

LeastConnection - 最少连接,跟踪哪些服务正在处理请求,并把新请求发送到现有请求最少的服务上。该算法状态不在整个Ocelot集群中分布。

RoundRobin - 轮询可用的服务并发送请求。 该算法状态不在整个Ocelot集群中分布。

NoLoadBalancer - 不负载均衡,从配置或服务发现提供程序中取第一个可用的下游服务。

CookieStickySessions - 使用cookie关联所有相关的请求到制定的服务。下面有更多信息。

你必须在你的配置中选择使用哪种负载均衡方式。

配置

下面展示了如何使用ocelot.json给一个ReRoute设置多个下游服务,并选择LeadConnection负载均衡器。这是设置负载均衡最简单的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
    "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负载均衡器。

1
2
3
4
5
6
7
8
9
10
11
{
    "DownstreamPathTemplate""/api/posts/{postId}",
    "DownstreamScheme""https",
    "UpstreamPathTemplate""/posts/{postId}",
    "UpstreamHttpMethod": [ "Put" ],
    "ServiceName""product",
    "LoadBalancerOptions": {
        "Type""LeastConnection"
    },
    "UseServiceDiscovery"true
}

设置此操作时,Ocelot将从服务发现提供程序查找下游主机和端口,并通过所有可用服务来负载均衡请求。 如果您向服务发现提供程序(consul)添加和删除服务,那么Ocelot将遵循这一点,停止调用已被删除的服务并开始调用已添加的服务。

CookieStickySessions

我已经实现了一个非常基本的粘性会话类型的负载平衡器。 它意味着支持的场景是你有一堆不共享会话状态的下游服务器,如果你为其中一台服务器获得多个请求,那么它应该每次都去同一个盒子,否则给用户的会话状态可能不正确。 这个特性在问题#322中有被提出,尽管用户想要的比只是粘性会话更加复杂 : ),无论如何,我认为这是个不错的功能!

为了设置CookieStickySessions负载均衡器,你需要做如下事情。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    "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将使用循环选择下一个服务器。 目前是硬编码,但可以改变。

如需转载,请在显眼处标明本文链接,谢谢。
posted @   我有我的骄傲  阅读(92)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示