微服务技术系列教程(31) - Dubbo-原理及负载均衡分析

简介: 微服务技术系列教程(31) - Dubbo-原理及负载均衡分析

Dubbo原理分析

角色区分:

  • Provider: 暴露服务的服务提供方(生产者)。
  • Consumer: 调用远程服务的服务消费方(消费者)。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次数和调用时间的监控中心。

调用流程:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

通俗易懂的话总结:

  • 提供者把自己的完整类路径注册到Zookeeper注册中心。
  • Zookeeper会推送变更信息给消费者,消费者会更新内容提供者服务列表到JVM。
  • 消费者远程调用提供者,使用Dubbo协议(其实就是Netty的封装),注意SpringCloud的RPC调用提供者使用的是HTTP协议

Zookeeper注册中心上,创建一个持久节点为service,在service持久节点下面创建多个不同的临时节点存放服务列表信息,临时节点内容存放服务调用地址。客 户 端从Zookeeper节点上获取最新service持久节点下面服务节点信息,让后在本地使用负载均衡算法,随机分配调用远程服务。客户端采用事件监听service持久节下面节点是否发生变化,如果发生变化Zookeeper服务器端会及时的将最新的数据推送给Zookeeper客户端。

RPC框架中负载均衡设计

在RPC远程调用框架中负载均衡大多数都采用本地负载均衡器,比SpringCloud中Ribbon组件直接从注册中心上获取服务列表信息,让后在本地实现RPC远程调用,同样的到底Dubbo框架中的负载均衡也是采用本地负载均衡器。

也许会有疑问,为什么不引入Nginx作为SpringCloud和Dubbo负载均衡中间件呢?

  • 如果引入Nginx,是否考虑过Nginx要出所有的请求,压力是否会很大?为什么不平分到每个消费者?
  • Dubbo消费者使用过Dubbo协议去通信的,Nginx是不支持Dubbo协议的。
  • 。。。。。。

其实结论很明确了:如果使用RPC框架,一般是不会使用Nginx实现负载均衡的,而是使用RPC框架的本地负载均衡,如SpringCloud使用Ribbon。

说到负载均衡,会提到软负载和硬负载:

软负载:

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

硬负载:

  • F5负载均衡是硬件负载均衡的一种。硬件负载均衡,顾名思义,在服务器节点之间安装专门的硬件进行负载均衡的工作。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
10月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
597 1
|
10月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
842 0
|
12月前
|
缓存 负载均衡 NoSQL
基于微服务架构的唯品会商品详情接口技术解析
本文介绍了唯品会电商平台商品详情接口的微服务化实现方案,涵盖架构设计、代码示例与性能优化策略。采用FastAPI构建服务,结合Redis缓存、异步处理、Nginx负载均衡等技术,实现高并发、低延迟的接口性能。
|
12月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1585 0
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
428 21
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
438 2
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
1023 3
|
负载均衡 应用服务中间件 nginx
解决nginx配置负载均衡时invalid host in upstream报错
在Windows环境下,配置Nginx 1.11.5进行负载均衡时遇到问题,服务无法启动。错误日志显示“invalid host in upstream”。检查发现上游服务器列表中,192.168.29.128的主机地址无效。负载均衡配置中,两个服务器地址前误加了"http://"。修正方法是删除上游服务器列表和proxy_pass中的"http://"。问题解决后,Nginx服务应能正常启动。
1285 4
解决nginx配置负载均衡时invalid host in upstream报错
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
500 1