通俗易懂的 Dubbo 教程(一):什么是 Dubbo?

以下大部分内容来自 Dubbo 官方文档,文档地址为 用户文档

1 什么是 Dubbo?

工欲善其事必先利其器,那么到底什么是 Dubbo 呢,我们需要给它下一个定义。

Dubbo 是一个开源分布式服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。

Dubbo是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2 我们为什么需要 Dubbo?

随着互联网的发展,网站应用的规模可能在不断扩大,以前只需要一个服务器就能完成全部功能的好日子已经一去不复返,分布式服务架构势在必行,我们急需一个治理系统确保架构有条不紊的演进。

在大规模服务化之前,应用可能只是通过简单的暴露和引用远程服务,通过配置服务的 URL 地址进行调用,通过 F5 等硬件进行负载均衡。

随着流量的增长,业务的迭代,应用与应用的关系逐渐变得复杂,可能会出现以下问题:

  1. 当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大
  2. 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系
  3. 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

那么又应该如何解决呢?上述三个问题亦是 Dubbo 最基本的几个需求,三个问题的解决方法分别如下:

  1. 需要一个服务注册中心,动态地注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本
  2. 需要自动画出应用间的依赖关系图,以帮助架构师理清关系
  3. 将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标;可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量

在这里插入图片描述
Dubbo 的主要目的就是解决上面三个问题,从 Dubbo 的服务治理图中我们可以发现,Duboo 较好解决了由于架构演变带来的一系列问题。

3 Dubbo 的架构

在这里插入图片描述
对于节点角色的说明如下:

  1. Provider:暴露服务的服务提供方
  2. Consumer:调用远程服务的服务消费方
  3. Registry:服务注册与发现的注册中心
  4. Monitor:统计服务的调用次数和调用时间的监控中心
  5. Container:服务运行容器

其中调用关系如下:

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

猜你喜欢

转载自blog.csdn.net/Geffin/article/details/105543478