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 概要

官网: 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 流程图:

1.3.2 Dubbo 与 HSF 比较

两者都是阿里巴巴的 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也支持更多协议,更多注册中心的集成,以适应更多的网站架构。

-

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.9inzkServer{1,2,3}.cmd
服务启动后,监听地址为 localhost:{2181,2182,2183}

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

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

4.Dubbo 管理控制台

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

4.1 下载源码

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

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
        </plugin>
    </plugins>
</build>

编译源码,并解压 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

4.3 修改配置

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

4.4 Dubbo 运维管理

参考 http://dubbo.apache.org/#!/docs/admin/ops/dubbo-ops.md?lang=zh-cn
重启 Tomcat,并打开 http://localhost:8080/dubbo-admin/
页面顶部可以修改界面语言为“简体中文”(默认为 English),功能包括:

  • 搜索:根据服务名称/应用名称/机器IP
  • 提供者:新增/复制、删除、编辑、启用/禁用、倍权/半权
  • 消费者:编辑、允许/禁止(客户端将收到禁止访问的异常)、屏蔽(客户端直接返回空对象)、容错(客户端远程调用失败时返回空对象)
  • 应用:包括提供者和消费者(可修改为屏蔽、容错)
  • 路由规则:新增/复制(对于指定的服务和方法,当消费方满足指定过滤条件时,提供者的IP才会推送给消费方,以便接下来的远程调用)、删除、编辑、启用/禁用
  • 动态配置:对于特定服务和消费者应用名称,只推送给指定的消费者地址;
  • 访问控制:对于特定服务,允许或禁止某些地址的消费者使用;
  • 权重调节:对于特定服务和提供者,指定其权重;
  • 负载均衡:对于特定服务和方法,指定负载均衡策略(随机、轮询、最少并发);
  • 负责人:对于特定服务,指定其负责人(dubbo-admin登录用户)。
  • 查看系统环境:CPU、内存、操作系统、语言、JDK版本、注册中心(ZooKeeper)地址和版本
  • 查看系统日志:dubbo-admin 的日志,对应于日志文件 $CATALINA_HOME/bin/dubbo-governance.log

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值