文章目录
  1. 1.服务架构的演进
    1. 1.1 单应用架构
    2. 1.2 Nginx 架构
    3. 1.3 微服务架构
      1. 1.3.1 Dubbo 概要
      2. 1.3.2 Dubbo 与 HSF 比较
      3. 1.3.3 微服务架构的优劣
        1. 1.3.3.1 微服务的优势
        2. 1.3.3.2 微服务的劣势
        3. 1.3.3.3 选用微服务的依据
      4. 1.3.4 Dubbo 版本历史
      5. 1.3.5 Dubbo 参考资料
  2. 2.部署服务注册中心(Zookeeper)
  3. 3.部署服务提供者和消费者
  4. 4.Dubbo 管理控制台
    1. 4.1 下载源码
    2. 4.2 编译源码
    3. 4.3 修改配置
    4. 4.4 Dubbo 运维管理

微服务架构在企业开发中应用越来越广泛,而 Alibaba Dubbo 代表国内微服务框架的最高成就,在国内有广泛的应用。本文讲述了 Dubbo 要解决的问题、现状和架构原理,注册中心/提供者/消费者的实现方法,以及服务治理控制台的部署与使用。

作者:王克锋
出处:https://kefeng.wang/2017/12/10/dubbo-deploy/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1.服务架构的演进

1.1 单应用架构

一站式单应用架构。

1.2 Nginx 架构

用户浏览器(相当于 Consumer) <==> Nginx <==> 服务后端(相当于 Provider)

  • 用户浏览器: 以 HTTP 形式向 Nginx 发出请求;
  • Nginx: 以域名方式提供给用户浏览器,把进来的 HTTP 请求,负载均衡地转发给服务后端,再把服务后端的响应回传给用户浏览器;
  • 服务后端: 提供 HTTP 接口,并实现内部功能。

这种服务分散在各系统中,缺陷体现在:

  • 不便观察各 provider/consumer 信息、状态、调用统计;
  • 不便灵活地对 provider 进入管理、维护和扩展。

1.3 微服务架构

  将单一应用程序拆分为多个功能独立的服务,各个服务以独立进程运行,服务之间互相调用(以RPC、REST API等方式),最终实现整个业务功能。各个微服务之间是松耦合,可独立选型和开发,可独立部署,可独立扩展。

  • 服务注册中心: 替换了 Nginx 转发者的地位,用来登记了各个服务提供者的地址;
  • 服务提供者: 提供服务调用接口,并向注册中心登记服务地址;
  • 服务消费者: 向注册中心订阅服务,能实时获得最新的服务地址列表,再直接调用服务提供者;
  • 监控系统: 查看各服务的提供者和消费者的信息和统计。

相关名词解释:
服务的路由:consumer 通过 serviceName,查找要调用的服务的地址的过程;
服务的负载均衡:从服务的地址列表中,按照一定的算法和规则,选取一个地址来用来调用;
服务配置中心:统一管理服务名称和对应地址列表信息的服务,提供的功能包括注册和查询;

1.3.1 Dubbo 概要

  官网: http://dubbo.io/
  Dubbo[ˈdʌbəʊ] 读音近似于 Double[‘dʌbl],是阿里巴巴基于Java的高性能RPC框架。
  Dubbo 采用 Apache License 2.0 开源协议,它是一个商业友好的协议,可以免费用于非开源的商业软件中。也可以对它进行改造和二次发布,只要求保留阿里的著作权,并在再发布时保留原始许可声明。
  微服务框架使用情况:国内公司大多使用 Dubbo,阿里内部除淘系以外的其它阿里子公司,都在使用Dubbo,包括中文主站、国际主站、AliExpress、阿里云、阿里金融、阿里学院、良无限、来往等,而外部公司有京东、当当、携程、去哪儿、搜狐、南方航空、中软国际、软通动力、吉利汽车、方正证劵、海尔、焦点科技、中润四方、华新水泥、海康威视、各大电信运营商、网易考拉等; 阿里淘系使用 HSF;国外更多是使用 Spring Could。
  Dubbo 提供三个关键功能,包括基于接口的远程调用,容错和负载均衡,以及自动服务注册和发现。Dubbo 只实现了服务治理,只提供 RPC 调用,而Dubbox(当当基于Dubbo扩展,也停止维护)实现更高效的 RPC 和 REST API。该框架推荐以 ZooKeeper 作为注册中心。

Dubbo 流程图:

1.3.2 Dubbo 与 HSF 比较

  两者都是阿里巴巴的 RPC 框架,Dubbo 是第一代,由B2B团队开发,是开源的(荣获 2016 年度中国开源软件 Top10);而 HSF(High Speed Framework,好舒服) 是新一代,由淘宝团队开发,没有开源,由于与阿里巴巴内部框架耦合较多,外部公司并不适用。

Dubbo 优势 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也支持更多协议,更多注册中心的集成,以适应更多的网站架构。 -

1.3.3 微服务架构的优劣

1.3.3.1 微服务的优势
  • 独立开发:组件之间的开发互不依赖;
  • 独立部署: 组件部署互不依赖,而且发布风险小;
  • 可伸缩性: 可根据各个组件负荷,有灵活地为个别组件增加实例数或硬件资源;
  • 可重用性: 组件功能独立,可供更多业务使用。
1.3.3.2 微服务的劣势
  • 开发的复杂性增加: 所开发组件或业务,依赖于其他组件,需要连接其他服务器,业务逻辑比单机应用复杂;
  • 运维的复杂性增加: 相比管理单应用,管理成千上百的服务,出问题的风险更大;
    理论上服务可以单独部署,但服务之间的相互依赖关系,必须部署一系列微服务作为一个组服务,需要管理协同工作的各版本组件
  • 通信失败重试逻辑复杂: 异步模式使系统状态更复杂;
  • 版本控制可能很难: 特定版本的组件才能协作成功,一个组件的版本升级可能影响其他组件;
  • 分布式事务: 跨组件的事务复杂。
1.3.3.3 选用微服务的依据

1.3.4 Dubbo 版本历史

参考: https://mvnrepository.com/artifact/com.alibaba/dubbo

  • 2011年12月: 2.0.10(开源,开始频繁更新)
  • 2012年10月: 2.5.3(之后五年未更新)
  • 2017年 9月: 2.5.4(重新频繁更新)
  • 2018年 1月: 2.6.0(当前最新版本)

1.3.5 Dubbo 参考资料

开源首页: Github 上 Dubbo 开源首页;
官方示例: Dubbo 官方提供的示例;
用户手册: 适用人群为借助 Dubbo 开发业务工程的开发者;
源码手册: 适用人群为 Dubbo 自身源码研究者或开发者;
管理手册: 适用人群为借助 Dubbo 开发业务工程的管理员;
用户总结: 国外用户对 Dubbo 的总结。

2.部署服务注册中心(Zookeeper)

详见文章 ZooKeeper 原理与集群部署

在配置文件 conf/zoo.cfg 中设置监控端口号(参数 clientPort)
启动服务:zookeeper-3.4.9\bin\zkServer{1,2,3}.cmd
服务启动后,监听地址为 localhost:{2181,2182,2183}

3.部署服务提供者和消费者

详见文章 Dubbo 提供者与消费者的实现
实现之后,同一服务提供者、同一服务消费都,都可以部署为多个节点。

4.Dubbo 管理控制台

  参考 http://dubbo.io/books/dubbo-admin-book/install/admin-console.html
  由于所用注册中心为 ZooKeeper,没有界面,不便看到当前各个服务和它们的提供者、消费者,无法对它们进行管理,dubbo-admin 正是要解决这些问题。
  不要使用网上别人编译出来的 war 文件(因为打包所用JDK版本很可能与你的环境JDK不兼容,导致无法启动),建议自己下载 Dubbo 源码编译(而且这并不复杂)。

4.1 下载源码

1
2
wget https://github.com/alibaba/dubbo/archive/dubbo-2.6.0.zip
unzip -q dubbo-2.6.0.zip

4.2 编译源码

编译前,文件 ./dubbo-admin/pom.xml 中要明确指定 maven-war-plugin/2.6
否则会默认使用版本 maven-war-plugin/2.2 而报错:ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver

1
2
3
4
5
6
7
8
9
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>

编译源码,并解压 war 包至 Tomcat 目录下:

1
2
3
4
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 Files\WinRAR\WinRAR.exe" x target\dubbo-admin-*.war %CATALINA_HOME%\webapps\dubbo-admin\

4.3 修改配置

Linux环境: $CATALINA_BASE/webapps/dubbo-admin/WEB-INF/dubbo.properties
Windows环境: %CATALINA_HOME%\webapps\dubbo-admin\WEB-INF\dubbo.properties
指定注册中心地址(ZooKeeper),指定用户及其密码为:root/root123 或 guest/guest123

1
2
3
dubbo.registry.address=zookeeper://localhost:2181?backup=localhost:2182,localhost:2183
dubbo.admin.root.password=root123
dubbo.admin.guest.password=guest123

4.4 Dubbo 运维管理

参考 http://dubbo.io/books/dubbo-admin-book/ops/dubbo-ops.html
重启 Tomcat,并打开 http://localhost:8080/dubbo-admin/
页面顶部可以修改界面语言为“简体中文”(默认为 English),功能包括:

  • 搜索:根据服务名称/应用名称/机器IP
  • 提供者:新增/复制、删除、编辑、启用/禁用、倍权/半权
  • 消费者:编辑、允许/禁止(客户端将收到禁止访问的异常)、屏蔽(客户端直接返回空对象)、容错(客户端远程调用失败时返回空对象)
  • 应用:包括提供者和消费者(可修改为屏蔽、容错)
  • 路由规则:新增/复制(对于指定的服务和方法,当消费方满足指定过滤条件时,提供者的IP才会推送给消费方,以便接下来的远程调用)、删除、编辑、启用/禁用
  • 动态配置:对于特定服务和消费者应用名称,只推送给指定的消费者地址;
  • 访问控制:对于特定服务,允许或禁止某些地址的消费者使用;
  • 权重调节:对于特定服务和提供者,指定其权重;
  • 负载均衡:对于特定服务和方法,指定负载均衡策略(随机、轮询、最少并发);
  • 负责人:对于特定服务,指定其负责人(dubbo-admin登录用户)。
  • 查看系统环境:CPU、内存、操作系统、语言、JDK版本、注册中心(ZooKeeper)地址和版本
  • 查看系统日志:dubbo-admin 的日志,对应于日志文件 $CATALINA_HOME/bin/dubbo-governance.log
文章目录
  1. 1.服务架构的演进
    1. 1.1 单应用架构
    2. 1.2 Nginx 架构
    3. 1.3 微服务架构
      1. 1.3.1 Dubbo 概要
      2. 1.3.2 Dubbo 与 HSF 比较
      3. 1.3.3 微服务架构的优劣
        1. 1.3.3.1 微服务的优势
        2. 1.3.3.2 微服务的劣势
        3. 1.3.3.3 选用微服务的依据
      4. 1.3.4 Dubbo 版本历史
      5. 1.3.5 Dubbo 参考资料
  2. 2.部署服务注册中心(Zookeeper)
  3. 3.部署服务提供者和消费者
  4. 4.Dubbo 管理控制台
    1. 4.1 下载源码
    2. 4.2 编译源码
    3. 4.3 修改配置
    4. 4.4 Dubbo 运维管理