1:什么是dubbo?
Apache Dubbo™ (incubating)是一款高性能Java RPC框架。
官网: http://dubbo.apache.org
2框架说明
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架
构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查
工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此
时,用于加速前端页面开发的Web框架是关键
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中
心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关
键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管
理集群容量
在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的
URL地址进行调用,通过 F5 等硬件进行负载均衡。
当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个
服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负
载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。
当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的
描述应用的架构关系。 这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。
接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器? 为
了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其
次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响
应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量。
3、架构
调用关系说明
1. 服务容器负责启动,加载,运行服务提供者。
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另
一台调用。
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。
更多介绍参见:http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html
3.2.3、注册中心
dubbo支持多种注册中心,推荐使用ZooKeeper。http://dubbo.apache.org/zh-cn/docs/user/references/registr
y/introduction.html
Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注
册中心,工业强度较高,可用于生产环境,并推荐使用。
流程说明:
服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向
/dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。
支持以下功能:
当提供者出现断电等异常停机时,注册中心能自动删除提供者信息
当注册中心重启时,能自动恢复注册数据,以及订阅请求
当会话过期时,能自动恢复注册数据,以及订阅请求
当设置 <dubbo:registry check="false" /> 时,记录失败注册和订阅请求,后台定时重试
可通过 <dubbo:registry username="admin" password="1234" /> 设置 zookeeper 登录信息
可通过 <dubbo:registry group="dubbo" /> 设置 zookeeper 的根节点,不设置将使用无根树
支持 * 号通配符 <dubbo:reference group="*" version="*" /> ,可订阅服务的所有分组和所有版本
的提供者
使用docker部署ZooKeeper
在本套课程中,使用docker容器化技术进行部署和开发,如果对docker不熟悉的同学可以采用传统的部署方式,
效果是一样的。
之所以采用docker部署的形式,是考虑到微服务节点的部署,以及后续的集群扩展的便捷性。
环境:ubuntu-16.04.3 + docker 17.03.2-ce
参考资料中的《VMware Workstation 中安装 Ubuntu16.04 虚拟机.docx》文档进行安装,统一环境。
=============
#拉取zk镜像
docker pull zookeeper:3.5
#创建容器
docker create --name zk -p 2181:2181 zookeeper:3.5
#启动容器
docker start zk
===========================
使用 ZooInspector 连接 刚启动的zookeeper
==============
3.2.6、dubbo Admin
Dubbo提供了可视化的界面管理工具,方便我们对服务进行管理,它就是dubbo admin,代码地址:
https://github.com/apache/incubator-dubbo-ops
部署安装:
第一步,下载并且解压:
git clone https://github.com/apache/incubator-dubbo-ops.git
#或者使用资料中提供的incubator-dubbo-ops.tar.gz
第二步,修改配置文件:
在 dubbo-admin-backend/src/main/resources/application.properties 中指定注册中心地址。
第三步,使用maven进行构建项目:
如未安装maven请先安装maven
1. 上传解压apache-maven-3.6.0-bin.tar.gz
2. 配置环境变量:
构建命令: mvn clearn package
第四步,通过mavn插件启动程序:
mvn --projects dubbo-admin-backend spring-boot:run
第五步,访问系统
打开浏览器,进行访问:http://172.16.55.185:8080/#/
3.2.7、服务的负载均衡
在集群负载均衡时,Dubbo 提供了多种均衡策略,
roundrobin 和random
缺省为 random 随机调用。
具体参看:http://dubbo.apache.
org/zh-cn/docs/user/demos/loadbalance.html
3.2.8、dubbo:// 协议
dubbo提供的协议:
Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远
大于服务提供者机器数的情况。
反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
Transporter (传输): mina, netty, grizzy
Serialization(序列化): dubbo, hessian2, java, json
Dispatcher(分发调度): all, direct, message, execution, connection
ThreadPool(线程池): fifixed, cached
缺省协议,使用基于 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 交互。
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO 异步传输
序列化:Hessian 二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供
者,尽量不要用 dubbo 协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用
网友评论