负载均衡
在阅读本文之前,建议先阅读 02-01 .net core 3.1 使用 Ocelot搭建api网关
1、修改configuration.json,当下游有多个节点时,可以使用DownstreamHostAndPorts
配置
{
//全局baseUrl,即网关的baseUrl
"GlobalConfiguration": {
"BaseUrl": "http://localhost:5000/"
},
"ReRoutes": [
{
"UpstreamPathTemplate": "/api/{controller}/{action}", //上游Api请求格式
"DownstreamPathTemplate": "/{controller}/{action}", //网关转发到下游格式
"UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ], //上下游支持请求方法
"DownstreamScheme": "http", //下游服务配置
"DownstreamHostAndPorts": [
{
"Host": "localhost", //下游地址
"Port": 5001 //下游端口号
},
{
"Host": "localhost",
"Port": 5002
}
],
/**配置负载
LeastConnection: 最少连接,跟踪哪些服务正在处理请求,并把新请求发送到现有请求最少的服务上。该算法状态不在整个Ocelot集群中分布。
RoundRobin: 轮询可用的服务并发送请求。 该算法状态不在整个Ocelot集群中分布。
NoLoadBalancer: 不负载均衡,从配置或服务发现提供程序中取第一个可用的下游服务。
最新版本Ocelot配置轮询方式如下:
**/
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
//老版本Ocelot配置轮询方式如下:
//"LoadBalancer": "RoundRobin"
}
]
}
LoadBalancer
是来决定负载的算法
LeastConnection
:最少连接,跟踪哪些服务正在处理请求,并把新请求发送到现有请求最少(最空闲)的服务上。该算法状态不在整个Ocelot集群中分布。配置方式:"LoadBalancer":"LeastConnection"
RoundRobin
:轮询可用的服务并发送请求,即轮询网关的节点下的服务器,直到请求到目标api。 该算法状态不在整个Ocelot集群中分布。需要注意的是老版本的"LoadBalancer": "RoundRobin"
在最新版本中无效,应该为"LoadBalancerOptions": { "Type":"RoundRobin"}
,其他两种配置还是继续沿用的老版本配置方式。NoLoadBalance
:不负载均衡,从配置或服务发现提供程序中取第一个可用的下游服务。配置方式:"LoadBalancer":"NoLoadBalance"
2、请求api看效果
(1)请求http://localhost:5000/api/secondapi/getmessage,第一次没有请求到
再请求一次就请求到了
轮询过程
(2)请求http://localhost:5000/api/firstapi/getmessage也是同理,第一次能请求到,第二次就请求不到了
参考文章
.Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换
Asp.Net Core + Ocelot 网关搭建:负载均衡的配置