本文参考Dubbo官方文档:http://dubbo.apache.org/#!/docs/user/quick-start.md?lang=zh-cn
当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。
此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。
当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。
接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。
节点角色说明
节点 |
角色说明 |
|
暴露服务的服务提供方 |
|
调用远程服务的服务消费方 |
|
服务注册与发现的注册中心 |
|
统计服务的调用次数和调用时间的监控中心 |
|
服务运行容器 |
用 Spring 配置声明暴露服务
provider.xml:
通过 Spring 配置引用远程服务
consumer.xml:
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"
。
可以通过 check="false"
关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false"
,总是会返回引用,当服务恢复时,能自动连上。
关闭某个服务的启动时检查 (没有提供者时报错):
关闭所有服务的启动时检查 (没有提供者时报错):
关闭注册中心启动时检查 (注册订阅失败时报错):
在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试
Dubbo提供了6种容错机制,分别如下
1. failsafe 失败安全,可以认为是把错误吞掉(记录日志)
2. failover(默认) 重试其他服务器; retries(2)
3. failfast 快速失败, 失败以后立马报错
4. failback 失败后自动恢复。
5. forking forks. 设置并行数
6. broadcast 广播,任意一台报错,则执行的方法报错
配置方式如下,通过cluster方式,配置指定的容错方案
或
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。
服务端服务级别
客户端服务级别
服务端方法级别
客户端方法级别
Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。
不同服务不同协议
不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议
以timeout为例,显示了配置的查找顺序,其它retries, loadbalance等类似。
1. 方法级优先,接口级次之,全局配置再次之。
2. 如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,通过URL经由注册中心传递给消费方。
建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。