微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

服务治理的核心: 管理服务于服务之间的依赖关系 能够实现远程调用、负载均衡、容错、注册与发现等。

1 Dubbo架构原理分析

微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

服务基本信息以持久节点进行存储, 服务信息一般是不会发生改变,采用持久节点进行存储
服务接口地址以临时节点进行存储, 因为地址是动态的, 所以采用临时节点存储

微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

2 Dubbo负载均衡效果演示

https://blog.csdn.net/zbx931197485/article/details/104762584
上一章节中
→ 修改xml中服务提供者端口号 20880 20881 启动两个服务提供者
→ 再启动服务消费者 → 再次启动服务者
→ 结果两次分别调用的提供者为20880和20881端口地址 由此可见 内部以轮询方式实现本地负载均衡.

3 RPC框架中负载均衡是如何设计的

在RPC远程调用框架中负载均衡大多数都采用本地负载均衡器,比如SpringCloud中Ribbon组件直接从
注册中心上获取 服务列表信息,然后在本地实现RPC远程调用,同样的 Dubbo框架中的负载均衡也是采用本地负载均衡器。
微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

  1. 在微服务rpc 远程调用框架中,服务的负载均衡是如何设计的?
    微服务的负载均衡不建议使用Nginx或者LVS做负载均衡
  2. 在为服务rpc远程调用框架中,服务的负载均衡都是采用本地负载均衡器
    SpringCloud里面负载均衡使用Ribbon(本地负载均衡器)
  3. 为什么在rpc远程调用框架中都是采用本地负载均衡 而不是Nginx?
    Nginx: 如果采用Nginx实现负载均衡的话,那么所有的请求都需要先交给Nginx,再由Nginx进行转发实现负载均衡
    本地负载均衡: 本地服务从注册中心上获取服务信息列表(缓存在JVM中), 然后在本地使用RPC远程调用技术(比如: HttpClient或者Netty), 本地负载均衡更容易实现刷新最新的数据
    由此可见: 本地负载均衡效率比Nginx实现负载均衡效率更高

4 软负载与硬负载均衡区别

软负载: 软件负载均衡通过服务器端上安装负载均衡软件或者使用本地负载均衡算法实现负载均衡功能(例如LVS、Nginx Haproxy、Ribbon)

硬负载: F5负载均衡是硬件负载均衡的一种, 硬件负载均衡, 顾名思义, 在服务器节点之间安装专门的硬件进行负载均衡的工作

5 搭建Sokcet服务器端环境

基于Zookeeper实现Dubbo动态负载均衡

服务器端:

  • 启动服务的时候注册到 Zookeeper注册中心上, 创建一个持久节点为Service, 在Service持久节点下面创建多个不同的临时节点存放服务列表信息, 临时节点内容存放服务调用地址。
  • 微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

客户端:

  • 从Zookeeper节点上获取最新的Service, 持久节点下面服务节点信息, 然后在本地使用负载均衡算法, 随机分配调用远程服务

如何实现动态负载均衡?

  • 客户端采用事件监听Service持久节点下面的节点是否发生变化, 如果发生变化Zookeeper服务器会及时的将最新的数据推送给Zookeeper客户端

6 服务端注册到Zookeeper

微服务技术→Dubbo分布式服务治理框架-负载均衡原理分析(二)

7 客户端获取Zookeeper注册信息

8 基于事件通知实现动态负载均衡