微服务架构在企业开发中应用越来越广泛,而 Alibaba Dubbo 代表国内微服务框架的最高成就,在国内有广泛的应用。本文讲述了 Dubbo 要解决的问题、现状和架构原理,注册中心/提供者/消费者的实现方法,以及服务治理控制台的部署与使用。
**作者:**王克锋
出处:https://kefeng.wang/2017/12/10/dubbo-deploy/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
一站式单应用架构。
用户浏览器(相当于 Consumer) <> Nginx <> 服务后端(相当于 Provider)
这种服务分散在各系统中,缺陷体现在:
将单一应用程序拆分为多个功能独立的服务,各个服务以独立进程运行,服务之间互相调用(以RPC、REST API等方式),最终实现整个业务功能。各个微服务之间是松耦合,可独立选型和开发,可独立部署,可独立扩展。
相关名词解释:
服务的路由:consumer 通过 serviceName,查找要调用的服务的地址的过程;
服务的负载均衡:从服务的地址列表中,按照一定的算法和规则,选取一个地址来用来调用;
服务配置中心:统一管理服务名称和对应地址列表信息的服务,提供的功能包括注册和查询;
官网: dubbo.apache.org,用户文档
Dubbo[db] 读音近似于 Double[dbl],是阿里巴巴基于Java的高性能RPC框架。
Dubbo 采用 Apache License 2.0 开源协议,它是一个商业友好的协议,可以免费用于非开源的商业软件中。也可以对它进行改造和二次发布,只要求保留阿里的著作权,并在再发布时保留原始许可声明。
微服务框架使用情况:国内公司大多使用 Dubbo,阿里内部除淘系以外的其它阿里子公司,都在使用Dubbo,包括中文主站、国际主站、AliExpress、阿里云、阿里金融、阿里学院、良无限、来往等,而外部公司有京东、当当、携程、去哪儿、搜狐、南方航空、中软国际、软通动力、吉利汽车、方正证劵、海尔、焦点科技、中润四方、华新水泥、海康威视、各大电信运营商、网易考拉等; 阿里淘系使用 HSF;国外更多是使用 Spring Could。
Dubbo 提供三个关键功能,包括基于接口的远程调用,容错和负载均衡,以及自动服务注册和发现。Dubbo 只实现了服务治理,只提供 RPC 调用,而Dubbox(当当基于Dubbo扩展,也停止维护)实现更高效的 RPC 和 REST API。该框架推荐以 ZooKeeper 作为注册中心。
Dubbo 流程图:

两者都是阿里巴巴的 RPC 框架,Dubbo 是第一代,由B2B团队开发,是开源的(荣获 2016 年度中国开源软件 Top10);而 HSF(High Speed Framework,好舒服) 是新一代,由淘宝团队开发,没有开源,由于与阿里巴巴内部框架耦合较多,外部公司并不适用。
对比点
Dubbo 优点
HSF 缺点
Dubbo部署方式更轻量
Dubbo没有任何要求,可运行在任何Java环境中
HSF要求使用指定的JBoss等容器,还需要在JBoss等容器中加入sar包扩展,对用户运行环境的侵入性大。如果你要运行在Weblogic或Websphere等其它容器上,需要自行扩展容器以兼容HSF的ClassLoader加载
Dubbo扩展性更好
Dubbo 很方便二次开发,一个框架不可能覆盖所有需求,Dubbo始终保持平等对待第三方理念,即所有功能,都可以在不修改Dubbo原生代码的情况下,在外围扩展,包括Dubbo自己内置的功能,也和第三方一样,是通过扩展的方式实现的
HSF如果你要加功能或替换某部分实现是很困难的,比如支付宝和淘宝用的就是不同的HSF分支,因为加功能时改了核心代码,不得不拷一个分支单独发展,HSF现阶段就算开源出来,也很难复用,除非对架构重写
HSF依赖较多内部系统
Dubbo为每个系统的集成都留出了扩展点,并已梳理干清所有依赖,同时为开源社区提供了替代方案,用户可以直接使用
HSF依赖较多内部系统,比如配置中心,通知中心,监控中心,单点登录等等,如果要开源还需要做很多剥离工作
Dubbo功能更多
除了ClassLoader隔离,Dubbo基本上是HSF的超集,Dubbo也支持更多协议,更多注册中心的集成,以适应更多的网站架构。
-

参考: https://mvnrepository.com/artifact/com.alibaba/dubbo
开源首页: Github 上 Dubbo 开源首页;
官方示例: Dubbo 官方提供的示例;
用户手册: 适用人群为借助 Dubbo 开发业务工程的开发者;
源码手册: 适用人群为 Dubbo 自身源码研究者或开发者;
管理手册: 适用人群为借助 Dubbo 开发业务工程的管理员;
用户总结: 国外用户对 Dubbo 的总结。
详见文章 ZooKeeper 原理与集群部署
在配置文件 conf/zoo.cfg 中设置监控端口号(参数 clientPort)
启动服务:zookeeper-3.4.9inzkServer{1,2,3}.cmd
服务启动后,监听地址为 localhost:{2181,2182,2183}
详见文章 Dubbo 提供者与消费者的实现
实现之后,同一服务提供者、同一服务消费者,都可以部署为多个节点。
参考 http://dubbo.apache.org/#!/docs/admin/ops/dubbo-ops.md?lang=zh-cn
由于所用注册中心为 ZooKeeper,没有界面,不便看到当前各个服务和它们的提供者、消费者,无法对它们进行管理,dubbo-admin 正是要解决这些问题。
不要使用网上别人编译出来的 war 文件(因为打包所用JDK版本很可能与你的环境JDK不兼容,导致无法启动),建议自己下载 Dubbo 源码编译(而且这并不复杂)。
wget https://github.com/alibaba/dubbo/archive/dubbo-2.6.0.zip
unzip -q dubbo-2.6.0.zip
编译前,文件 ./dubbo-admin/pom.xml 中要明确指定 maven-war-plugin/2.6
否则会默认使用版本 maven-war-plugin/2.2 而报错:ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver
org.apache.maven.plugins
maven-war-plugin
2.6
编译源码,并解压 war 包至 Tomcat 目录下:
cd dubbo-dubbo-2.6.0/dubbo-admin
mvn clean package -Dmaven.test.skip=true
unzip -q target/dubbo-admin-*.war -d $CATALINA_BASE/webapps/dubbo-admin/
## "C:Program FilesWinRARWinRAR.exe" x targetdubbo-admin-*.war %CATALINA_HOME%webappsdubbo-admin
Linux环境: $CATALINA_BASE/webapps/dubbo-admin/WEB-INF/dubbo.properties
Windows环境: %CATALINA_HOME%webappsdubbo-adminWEB-INFdubbo.properties
指定注册中心地址(ZooKeeper),指定用户及其密码为:root/root123 或 guest/guest123
dubbo.registry.address=zookeeper://localhost:2181?backup=localhost:2182,localhost:2183
dubbo.admin.root.password=root123
dubbo.admin.guest.password=guest123
参考 http://dubbo.apache.org/#!/docs/admin/ops/dubbo-ops.md?lang=zh-cn
重启 Tomcat,并打开 http://localhost:8080/dubbo-admin/
页面顶部可以修改界面语言为“简体中文”(默认为 English),功能包括:
$CATALINA_HOME/bin/dubbo-governance.log`