SOA与服务治理

SOA(面向服务的体系结构)概念由来已久,在10多年前便开始进入到我们广大软件开发者的视线中。SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、Web Service技术之后的自然延伸。

服务治理,也称为SOA治理,是指用来管理SOA的采用和实现的过程。以下是在2006年时IBM对于服务治理要点的总结:

  • 服务定义(服务的范围、接口和边界)
  • 服务部署生命周期(各个生命周期阶段)
  • 服务版本治理(包括兼容性)
  • 服务迁移(启用和退役)
  • 服务注册中心(依赖关系)
  • 服务消息模型(规范数据模型)
  • 服务监视(进行问题确定)
  • 服务所有权(企业组织)
  • 服务测试(重复测试)
  • 服务安全(包括可接受的保护范围)

限于当时的技术发展水平,广大软件设计与开发人员对于SOA和服务治理的技术认知还主要停留在Web Service和ESB总线等技术和规范上,并没有真正在软件开发中得以充分落地。

Dubbo开源

直到2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。

Dubbo作为阿里巴巴内部的SOA服务化治理方案的核心框架,在2012年时已经每天为2000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用,其中既有当当网、网易考拉等互联网公司,也有中国人寿、青岛海尔等传统企业。

Dubbo简介

Dubbo是一个高性能服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,使得应用可通过高性能RPC实现服务的输出和输入功能,和Spring框架可以无缝集成。

作为一个分布式服务框架,以及SOA治理方案,Dubbo其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与服务降级等。Dubbo最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

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

下图来自Dubbo官网,描述了服务注册中心、服务提供方、服务消费方、服务监控中心之间的调用关系,具体如下图所示:

节点角色说明:

调用关系说明:

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

Dubbo总体架构

Dubbo框架设计共划分了10层,最上面的Service层是留给实际使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。

各层说明:

  • Config配置层:对外配置接口,以ServiceConfig、ReferenceConfig为中心,可以直接初始化配置类,也可以通过Spring解析配置生成配置类。
  • Proxy服务代理层:服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
  • Registry注册中心层:封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry、RegistryService。
  • Cluster路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router、LoadBalance。
  • Monitor监控层:RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor、MonitorService。
  • Protocol远程调用层:封将RPC调用,以Invocation、Result为中心,扩展接口为Protocol、Invoker、Exporter。
  • Exchange信息交换层:封装请求响应模式,同步转异步,以Request、Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient、ExchangeServer。
  • Transport网络传输层:抽象MINA和Netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server、Codec。
  • Serialize数据序列化层:可复用的一些工具,扩展接口为Serialization、ObjectInput、ObjectOutput、ThreadPool。

模块分包

各模块说明:

  • dubbo-common公共逻辑模块:包括Util类和通用模型。
  • dubbo-remoting远程通讯模块:相当于Dubbo协议的实现,如果RPC用 RMI协议则不需要使用此包。
  • dubbo-rpc远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。
  • dubbo-cluster集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡、容错、路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
  • dubbo-registry注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。
  • dubbo-monitor监控模块:统计服务调用次数、调用时间的、调用链跟踪的服务。
  • dubbo-config配置模块:是Dubbo对外的API,用户通过Config使用Dubbo,隐藏Dubbo所有细节。
  • dubbo-container容器模块:是一个Standlone的容器,以简单的Main加载Spring启动,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务。

协议支持

  • Dubbo协议(默认协议)
  • Hessian协议
  • HTTP协议
  • RMI协议
  • WebService协议
  • Thrift协议
  • Memcached协议
  • Redis协议

注册中心

(1)Multicast注册中心:

Multicast注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现。组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段:224.0.0.0 - 239.255.255.255。

(2)ZooKeeper注册中心(推荐):

ZooKeeper是Apacahe子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,可用于生产环境。

对上图流程说明如下:

  1. 服务提供者(Provider)启动时,向/dubbo/com.foo.BarService/providers目录下写入URL。
  2. 服务消费者(Consumer)启动时,订阅/dubbo/com.foo.BarService/providers目录下的URL,向/dubbo/com.foo.BarService/consumers目录下写入自己的URL。
  3. 监控中心(Monitor)启动时,订阅/dubbo/com.foo.BarService目录下的所有提供者和消费者URL。

(3)Redis注册中心:

阿里内部并没有采用Redis做为注册中心,而是使用自己实现的基于数据库的注册中心,即:Redis注册中心并没有在阿里内部长时间运行的可靠性保障,此Redis桥接实现只为开源版本提供,其可靠性依赖于Redis本身的可靠性。

(4)Simple注册中心:

Simple注册中心本身就是一个普通的Dubbo服务,可以减少第三方依赖,使整体通讯方式一致。只是简单实现,不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境。

远程通信与信息交换

远程通信需要指定通信双方所约定的协议,在保证通信双方理解协议语义的基础上,还要保证高效、稳定的消息传输。Dubbo继承了当前主流的网络通信框架,主要包括如下几个:

  • Mina
  • Netty(默认)
  • Grizzly

停止维护

从2012年10月23日Dubbo2.5.3发布后,在Dubbo开源将满一周年之际,阿里基本停止了对Dubbo的主要升级。只在之后的2013年和2014年更新过2次对Dubbo2.4的维护版本,然后停止了所有维护工作。Dubbo对Srping的支持也停留在了Spring 2.5.6版本上。

分支出现

在阿里停止维护和升级Dubbo期间,当当网开始维护自己的Dubbo分支版本Dubbox,支持了新版本的Spring,并对外开源了Dubbox。同时,网易考拉也维护了自己的独立分支Dubbok,可惜并未对外开源。

重获新生

经过多年漫长的等待,随着微服务的火热兴起,在国内外开发者对阿里不再升级维护Dubbo的吐槽声中,阿里终于开始重新对Dubbo的升级和维护工作。在2017年9月7日,阿里发布了Dubbo的2.5.4版本,距离上一个版本2.5.3发布已经接近快5年时间了。在随后的几个月中,阿里Dubbo开发团队以差不多每月一版本的速度开始快速升级迭代,修补了Dubbo老版本多年来存在的诸多bug,并对Spring等组件的支持进行了全面升级。

分支合并

在2018年1月8日,Dubbo 2.6.0版本发布,新版本将之前当当网开源的Dubbo分支Dubbox进行了合并,实现了Dubbo版本的统一整合。

Dubbo与Spring Cloud

阿里巴巴负责主导了 Dubbo 重启维护的研发工程师刘军在接受采访时表示:当前由于 RPC协议、注册中心元数据不匹配等问题,在面临微服务基础框架选型时Dubbo与Spring Cloud是只能二选一,这也是为什么大家总是拿Dubbo和SpringCloud做对比的原因之一。Dubbo之后会积极寻求适配到Spring Cloud生态,比如作为Spring
Cloud的二进制通信方案来发挥Dubbo的性能优势,或者Dubbo通过模块化以及对http的支持适配到Spring Cloud。

未来展望

2018年1月8日,Dubbo创始人之一梁飞在Dubbo交流群里透露了Dubbo 3.0正在动工的消息。Dubbo 3.0内核与Dubbo2.0完全不同,但兼容Dubbo 2.0。Dubbo 3.0将以Streaming为内核,不再是Dubbo时代的RPC,但是RPC会在Dubbo3.0中变成远程Streaming对接的一种可选形态。Dubbo 3.0将支持可选Service Mesh,多加一层IPC,这主要是为了兼容老系统,而内部则会优先尝试内嵌模式。代理模式Ops可独立升级框架,减少业务侵入,而内嵌模式可以带业务测试、部署节点少、稳定性检测方便。同时,可以将Dubbo3.0启动为独立进程,由dubbo-mesh进行IPC,路由、负载均衡和熔断机制将由独立进程控制。

总结

从 Dubbo 新版本的路线规划上可以看出,新版本的Dubbo在原有服务治理的功能基础上,将全面拥抱微服务和Service Mesh。同时,考虑到在阿里云已经有了Dubbo的商业版本,在未来一段时间内,Dubbo的更新与维护应该不会再长时间中断。在我们进行服务治理以及微服务架构设计时,新版本Dubbo对我们广大开发者来说都将会是一个不错的选择。

参考链接

  • http://dubbo.io
  • https://github.com/alibaba/dubbo
  • http://shiyanjun.cn/archives/325.html
  • http://mp.weixin.qq.com/s/eVYx-tUIMYtAk5wP-qkdkw

原文链接:http://dockone.io/article/3294

Dubbo的前世今生相关推荐

  1. 分布式服务治理框架Dubbo的前世今生及应用实战

    Dubbo的出现背景# Dubbo从开源到现在,已经出现了接近10年时间,在国内各大企业被广泛应用. 它到底有什么魔力值得大家去追捧呢?本篇文章给大家做一个详细的说明. 大规模服务化对于服务治理的要求 ...

  2. 知道Dubbo性能为什么这么强?看完你就懂了!

    前言 为什么Dubbo说自己性能高? 高性能要从底层的原理说起,既然是一个RPC框架,主要干的就是远程过程(方法)调用, 那么提升性能就要从最关键.最耗时的两个方面入手:序列化和网络通信. 序列化:我 ...

  3. 【SpringBoot】入门级学习dubbo

    文章目录 前言 1.Dubbo的前世今生 2.Dubbo的快速入门 2.0 介绍 2.1.Dubbo的基本架构 2.2.Nacos 2.3.管理后台 2.4.入门案例 2.4.0 准备 2.4.1.服 ...

  4. Service Mesh:调度千军万马微服务,2.0妥妥的

    冠望 发自 凹非寺 量子位 报道 | 公众号 QbitAI 过去一年,继Kubernetes风靡,Service Mesh已成功上位变成当之无愧的技术网红. TA不但可以极大简化用户使用体验,还将大中 ...

  5. Dubbo 云原生之路:ASF 毕业一周年、3.0 可期

    作者 | 刘军 **导读:**今年是 Dubbo 从 Apache 基金会毕业的一周年,同时也是推进 Dubbo 3.0,即全面拥抱云原生的重要一年.Dubbo 社区策划了[Dubbo 云原生之路]系 ...

  6. 都已经十岁的 Apache Dubbo,还能再乘风破浪吗?

    纵观中国开源历史,你真的没法找到第二个像 Dubbo 一样自带争议和讨论热度的开源项目. 一方面,2011 年,它的开源填补了当时生产环境使用的 RPC 框架的空白,一发布就被广泛采用:另一方面,它经 ...

  7. 十岁的 Apache Dubbo 还能再乘风破浪吗?

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 纵观中国开源历史,你真的没法找到第二个像 Dubbo 一样自带争议和讨论热度的开源项目. 一方面, ...

  8. 车金融|GPS审核系统的前世今生

    GPS审核系统历经前后几次自主创新重构以及在需求迭代中小规模重构优化,系统最终能持续半年需求不再迭代,这背后多少有重构带来的变化和影响.GPS审核系统并非最初就有,它仅仅只是原先一个庞大既臃肿系统中的 ...

  9. SpringBoot (七) :SpringBoot 整合dubbo

    Dubbo是什么 Dubbo是alibaba的一款开源软件,它是基于java的RPC调用框架. Dubbo主要提供了三种功能: 提供了基于接口的远程调用接口 容错性和负载均衡 服务自动注册及发现 安装 ...

最新文章

  1. Elasticsearch 6.3.1、Head插件 安装及配置
  2. 使用 Spring Boot 快速构建 Spring 框架应用
  3. 【转】使用Navicat for Oracle新建表空间、用户及权限赋予
  4. 基于深度学习的文本分类3
  5. Python精通-Python元组操作
  6. c中获取python控制台输出_linux c程序中获取shell脚本输出的实现方法
  7. SpringAop+Mybatis 实现动态切换数据库操作
  8. 目标检测(Object Detection)—— M2Det
  9. python爬虫——爬起点中文网小说
  10. 基于whisper模型的在线添加视频字幕网站(持续更新)
  11. ElasticSearch、ki、head、kibana安装与基本使用
  12. 中国区块链行业人才缺口将达75万以上
  13. http服务(nginx、apache)停用不安全的SSL协议、TLS1.0和TLS1.1协议/启用TLS1.3
  14. IAR使用ST-Link下载仿真
  15. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据
  16. 致:同年代的童真童鞋们
  17. filterConfig
  18. 基于c语言防盗系统,基于STC89C51的无线智能防盗报警系统.doc
  19. linux文件强制保存,Vim 强制保存只读文件的方法
  20. 新款武侠游戏 请名人献声

热门文章

  1. 如何签约支付宝单笔转账接口!
  2. 计算机软件职称论文,计算机软件技术中级职称论文(2)
  3. linux页表机制pmd,Linux:页表中PGD、PUD、PMD等概念介绍
  4. SIM卡文件介绍及加载
  5. 通过软件的方式,控制芯片引脚的高低电平
  6. Unity 使用柏林噪声(Perlin Noise)生成网格地图
  7. 安卓桌面小部件使用一段时间后无响应变为空白
  8. 数据库新建数据库关系图
  9. 在NP下用OD调试游戏的方法
  10. python期末复习——python知识要点