Dubbo(概念篇):Dubbo 详解,架构演变及优缺点

架构演变

单一应用框架(ORM)

当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本
缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护。

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第1张图片

垂直应用框架(MVC)

垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率
缺点:但是在垂直架构中相同逻辑代码需要不断的复制,不能复用

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第2张图片

分布式应用架构(RPC)

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心。

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第3张图片

流动计算架构(SOA)

随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。

总结

  • 单一应用架构
    当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
    此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
  • 垂直应用架构
    当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
    此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
  • 分布式服务架构
    当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
    此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
  • 流动计算架构
    当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
    此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

Dubbo

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第4张图片

简介

Dubbo是一个分布式服务框架,拥有高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。

Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过高性能 RPC 实现服务的输出、输入功能和 Spring 框架无缝集成。Dubbo 包含远程通讯集群容错自动发现三个核心部分。

它提供透明化的远程方法调用,实现像调用本地方法一样调用远程方法,只需简单配置,没有任何 API 侵入。同时它具备软负载均衡及容错机制,可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。它可以实现服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的 IP 地址,并且能够平滑添加或删除服务提供者。

2011 年末,阿里巴巴在 GitHub 上开源了基于 Java 的分布式服务治理框架 Dubbo,之后它成为了国内该类开源项目的佼佼者,许多开发者对其表示青睐。同时,先后有不少公司在实践中基于 Dubbo 进行分布式系统架构。目前在 GitHub 上,它的 fork、star 数均已破万。

核心功能

  • 远程通讯,提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

  • 集群容错,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

  • 自动发现,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器

五大组件关系

高性能Java RPC框架

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

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第5张图片

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

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第6张图片

  1. 服务提供者 - 启动时在指定端口上暴露服务,并将服务地址和端口注册到注册中心上

  2. 服务消费者 - 启动时向注册中心订阅自己感兴趣的服务,以便获得服务提供方的地址列表

  3. 注册中心 - 负责服务的注册和发现,负责保存服务提供方上报的地址信息,并向服务消费方推送

  4. 监控中心 - 负责收集服务提供方和消费方的运行状态,比如服务调用次数、延迟等,用于监控

  5. 运行容器 - 负责服务提供方的初始化、加载以及运行的生命周期管理

部署阶段

  • 服务提供者在指定端口暴露服务,并向注册中心注册服务信息。

  • 服务消费者向注册中心发起服务地址列表的订阅。

运行阶段

  • 注册中心向服务消费者推送地址列表信息。

  • 服务消费者收到地址列表后,从其中选取一个向目标服务发起调用。

  • 调用过程服务消费者和服务提供者的运行状态上报给监控中心。

调用流程

  • 服务提供方在启动时候会注册自己提供的服务到服务注册中心。

  • 服务消费方在启动时候会去服务注册中心订阅自己需要的服务,然后服务注册中心异步把消费方需要的服务接口的提供者的地址列表返回给服务消费方,服务消费方根据路由规则和设置的负载均衡算法选择一个服务提供者 ip 进行调用。

  • 监控平台主要用来统计服务的调用次数和调用耗时,服务消费者和提供者,在内存中累计调用次数和调用耗时,并定时每分钟发送一次统计数据到监控中心,监控中心则使用数据绘制图表来显示,监控平台不是分布式系统必须的,但是这些数据有助于系统运维和调优。服务提供者和消费者可以直接配置监控平台的地址,也可以通过服务注册中心来获取。

  • 管理控制台主要提供路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。管理控制台直接与服务注册中心打交道,从服务注册中心获取所有注册的服务和消费方法;并且可以通过管理台界面设置服务消费端的路由规则,动态配置等信息并注册到服务管理台,这些信息会被通知到服务消费端。管理控制台也不是分布式系统必备的组件,但是有了他我们可以对服务进行很好的治理和监控。

服务注册中心

对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。

Dubbo提供的注册中心有如下几种类型可供选择:

  • Redis注册中心。
  • Dubbo简易注册中心。
  • Multicast注册中心, 广播受到网络结构的影响,一般本地不想搭注册中心的话使用这种调用。
  • Zookeeper注册中心, 推荐集群中部署奇数个节点,由于zookeeper挂掉一半的机器集群就不可用,所以部署4台和3台的集群都是在挂掉2台后集群不可用。

Dubbo 特点

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第7张图片

Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

连通性

  • 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

  • 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示

  • 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销

  • 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销

  • 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外

  • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者

  • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

  • 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

健壮性

  • 监控中心宕掉不影响使用,只是丢失部分采样数据

  • 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务

  • 注册中心对等集群,任意一台宕掉后,将自动切换到另一台

  • 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

  • 服务提供者无状态,任意一台宕掉后,不影响使用

  • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

伸缩性

  • 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心

  • 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者

升级性

当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。

下图是未来可能的一种架构:

Dubbo(概念篇):Dubbo 详解,架构演变及优缺点_第8张图片

节点角色说明

Deployer

自动部署服务的本地代理

Repository

仓库用于存储服务应用发布包

Scheduler

调度中心基于访问压力自动增减服务提供者

Admin

统一管理控制台

Registry

服务注册与发现的注册中心

Monitor

统计服务的调用次数和调用时间的监控中心

Dubbo 优缺点

优点

  • 透明化的远程方法调用
  • 像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制
    可在内网替代nginx lvs等硬件负载均衡器。
  • 服务注册中心自动注册 & 配置管理
    不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。
    使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。
  • 服务接口监控与治理
    Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理。

缺点

  • 目前只支持JAVA语言

你可能感兴趣的:(Dubbo)