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将使用循环选择下一个服务器。 目前是硬编码,但可以改变。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器