Ribbon-负载均衡原理及部分源码

黑马程序员-Ribbon负载均衡源码

前提:服务提供者有多个服务集群,不然要是只有一个服务,还负载均衡个锤子!
Ribbon负载均衡基本原理:
1、Ribbon会拦截Eureka Client客户端发出的http请求,获得服务名(userservice)
2、从Eureka中拉取动态服务列表(8081、8082。。。。。)
3、从里面选一个服务(如8081)出来(轮询、随机等算法)
4、去调用这个服务
在这里插入图片描述
详细步骤:
在这里插入图片描述
1、客户端发起http请求,比如使用RestTemplate发起;
2、LoadBalancerInterceptor负载均衡拦截器,会拦截所有这个客户端发起的http请求,进行解析,获取服务ID(实例名例如:userservice);
在这里插入图片描述
3、通过这个实例名,从Eureka中拉取动态服务列表;
4、Eureka返回服务列表,此时LoadBalancerInterceptor负载均衡拦截器拿到了所有的该服务实例;
在这里插入图片描述
5、使用IRule接口进行负载均衡,IRule规则接口包括:客户端自定义规则、轮询、随机、重试等负载均衡算法:在这里插入图片描述
6、使用客户端规定好的,或者默认的负载均衡算法,从服务列表中进行选择一个,返回给RibbonLoadBanlancerClient(Ribbon负载均衡器客户端)

7、RibbonLoadBanlancerClient(Ribbon负载均衡器客户端)使用真实的ip和端口(http://127.0.0.1:8080/user/1)替换原来的“服务名+路径”(http://userservice/user/1),并发起请求
8、最终,请求到经过负载均衡之后选择的对应的服务器

当使用@LoadBalanced注解时,会自动调用spring-cloud中的Ribbon组件进行负载均衡,我们只需配置Ribbon的算法即可按我们心意进行使用

猜你喜欢

转载自blog.csdn.net/dayuiicghaid/article/details/125984753