一、Ribbon
1.工作机制
(1)服务发现:常会用Eureka这样的服务注册中心,所有的服务实例都会注册到Eureka上。Ribbon会定期从Eureka获取服务列表
(2)服务选择:获取服务列表后,Ribbon就要根据自己的策略,从这些服务实例中选一个来发送请求。
(3)负载均衡:这一步是Ribbon的核心,负载均衡策略决定了请求会发送到哪个具体的实例。
2.核心组件
IClientConfig:它负责存储客户端的配置信息,比如连接超时、读取超时
IRule:决定了发送请求到哪个服务实例
IPing:扫描注册的服务,看那些是可用的
ServerList: 负责提供服务实例的列表
ServerListFilter:对服务列表进行过滤
3.、负载均衡策略
轮询:每个请求都按顺序分配给下一个服务实例,确保了所有服务实例都有均等的机会被调用。
随机:,每次请求都是随机选择一个服务实例。这种方式虽然简单,但在服务实例数量较多时,能保证较为平均的负载分布。
响应时间加权:这个策略更加高级一些,它会考虑到每个服务实例的响应时间,响应越快的实例被选中的概率就越高。这样能够优先使用性能较好的实例,提高整体的服务质量。
区域轮询感知:在微服务架构中,服务实例可能分布在不同的区域。区域感知轮询策略会优先调用同一区域内的服务实例,减少跨区域调用带来的延迟和成本。
4.重试机制
工作原理:当一个服务调用失败时,Ribbon可以配置为自动进行重试。但这不是盲目的重试,Ribbon会根据预设的策略决定是否重试,以及重试多少次。这个策略可以基于多种因素,比如重试间隔、最大重试次数、重试条件等。
5.配置
超时设置:包括连接超时和读取超时,这两个参数对于控制服务调用的时延非常重要。如果设置得太短,可能会导致正常的服务调用被误判为失败;设置得太长,则会导致系统响应变慢。
并发请求量:这个参数用来控制对单个服务实例的最大并发请求量。如果某个实例因为负载过高而响应变慢,Ribbon可以通过限制对该实例的并发请求来防止其过载。
重试相关参数:如前所述,Ribbon支持在服务调用失败时进行重试。通过配置重试次数和重试间隔,咱们可以在提高调用成功率的同时,避免因过多重试而给系统带来额外的压力。
6.调优实践
监控和日志:合理地配置监控和日志对于诊断问题和优化性能非常关键。通过监控Ribbon的行为,咱们可以了解服务调用的模式,比如哪些服务调用最频繁、响应时间如何等,从而对Ribbon进行针对性的调优。
负载均衡策略的选择:不同的负载均衡策略适用于不同的场景。咱们需要根据实际的业务需求和服务特点来选择最合适的策略。
环境因素:在不同的运行环境中,相同的配置可能会有不同的表现。因此,咱们在进行调优时,也需要考虑到运行环境的具体情况,比如网络状况、服务实例的分布等。
二、Nginx时间负载均衡
nginx的配置文件nginx.conf,该配置在nginx/conf/nginx.conf目录下,然后修改该配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
upstream producer {
server localhost:8888;
server localhost:8889;
}
server {
listen 80;
server_name producer;
location /produce {
proxy_pass http://producer;
}
}
# www..wncinema.com : 后台管理系统的界面
server {
listen 80;
server_name www.wncinema.com;
location / {
proxy_pass http://127.0.0.1:6999;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
# admin.wncinema.com : 后台管理系统的界面
server {
listen 80;
server_name admin.wncinema.com;
location / {
proxy_pass http://127.0.0.1:7000;
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
}
三、Ribbon和Nginx负载均衡的区别
Nginx 是客户端所有请求统一交给 Nginx,由 Nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。它是一种集中式的负载均衡器。即请求由 Nginx 服务器端进行转发。
Ribbon 是从 Eurkea 注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮询负载均衡策略。即客户端负载均衡。
Nginx 适合于服务器端实现负载均衡 比如 Tomcat。
在 SpringCloud 中 Feign 中集成了 Ribbon,会自动使用负载均衡。