Ribbon&Nginx

一、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,会自动使用负载均衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值