dubbo 学习笔记

来源:互联网 发布:中邮证券软件 编辑:程序博客网 时间:2024/05/17 08:13
<dubbo:service/>服务接口
<dubbo:reference/>消费接口
<dubbo:consumer/>消费者
<dubbo:provider/>提供者




----------集群容错模式-------------


属性:cluster 缺省 failover
作用:性能调优
可选:failover/failfast/failsafe/failback/forking
1\failover 失败自动切换,出现失败,重试其他服务器, 通常用于读操作,可通过retries="2" 
来设置重试次数(不含第一次)
<dubbo:service cluster="failover" retries="2" />
或<dubbo:reference cluster="failover"/>


<!-- 可以指定到某个方法 -->
<dubbo:reference>
<dubbo:method retries="2" />
</dubbo:reference>


2\failfast 快速失败,只发起一次调用,通常用于非幂等的写操作
<dubbo:service cluster="failfast" />
或<dubbo:reference cluster="failfast"/>


3\failsafe 失败安全 出现异常时,直接忽略,通常用于写入审计日志等操作
<dubbo:service cluster="failsafe" />
或<dubbo:reference cluster="failsafe"/>


4\failback 失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作
<dubbo:service cluster="failback"/>
或<dubbo:reference cluster="failback"/>


5\forking 并行调用多个服务,只要一个成功即可返回,通常用于实时性要求较高的读操作,
但需要浪费更多的服务器资源,可以通过forks="2"来设置最大并行数
<dubbo:service cluster="forking"/>
或<dubbo:reference cluster="forking"/>






-------------- 负载均衡策略 --------------
可自行扩展负载均衡策略
<dubbo:reference loadbalance="roundrobin" />
<dubbo:service loadbalance="ramdom" />


<dubbo:service>
<dubbo:method loadbalance="ramdom" />
</dubbo:service>


1\Random LoadBalance
随机,按权重设置随机概率
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重
2\RoundRobin LoadBalance
轮询,按公约后的权重设置轮询比率
存在慢的提供者累计请求的问题,比如:第二胎机器很慢,但没挂,当请求调到第二台时就卡在那里,久而久之,所有请求都卡在第二台
3\LeastActive LoadBalance
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差
使慢的提供者收到更少的请求,因为越慢的提供者的调用前后计数差越大
4\ConsistentHash LoadBalance
一致性Hash,相同参数的请求总是发到同一提供者
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈波动
缺省只对第一个参数Hash,如果要修改,请配置<dubbo:parameter key="hash.arguments" value="0.1" />
缺省用160份虚拟节点,如果要修改,请配置<dubbo:parameter key="hash.nodes" value="320" />


-------------- dubbo线程模型 ----------------
Dispatcher 
all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等
direct 所有消息都不派发到线程池,全部在io线程上直接执行
message 只有请求响应消息派发到线程池,其他连接断开事件,心跳等消息,直接在io线程上执行
execution 只请求消息派发到线程池,不含响应,响应和其他连接断开事件,心跳等消息,直接在io线程上执行
connection 在IO线程上,将连接断开事件放入队列,有序逐个执行,其他消息派发到线程池

ThreadPool
fixed 固定大小线程池 启动时建立线程,不关闭,一直持有(缺省)
cached 缓存线程池,空闲一分钟自动删除,需要时重建
limited 可伸缩线程池,但池中的线程数只会增长不会收缩(为避免收缩时突然来了大流量引起的性能问题)

配置如下
<dubbo:protocal name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
<dubbo:provider name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />






-------------- linux 线程模型 性能优化 -------------
linux 默认普通用户 1024个线程
vi /etc/security/limits.d/90-nproc.conf
unlimited 不限制
尽量不要用root用户来部署应用程序,避免资源耗尽后无法登陆操作系统
普通用户的线程数限制值要看可用物理内存容量来配置
计算方式
限制值 = 物理内存量 / 128k
查看物理内存
cat /proc/meminfo |grep MemTotal




------------  直连提供者 开发/测试环境 ----------------------
1\如果是线上需求需要点对点,可以在<dubbo:reference>中配置url指向提供者,将绕过注册中心,多个地址逗号隔开,配置如下
<dubbo:reference id="xxxserivce" interface="xx.xx.xxxserivce" url="" />
2\在JVM启动参数中加入-D参数映射服务地址,如:
java -Dcom.alibaba.xxx.xxService=dubbo://localhost:20890
3\如果服务较多,也可以用文件映射 (2.0)以上版本自动加载${user.home}/dubbo-resolve.properties文件,不需要配置
java -Ddubbo-resolve.file=xxx.properties
映射文件内容 key为服务名 url为服务提供者url
com.xx.xxxserivce=dubbo://localhost:20880


---------------- 只订阅 ----------------
可以让服务提供者开发方,只订阅服务(开发的服务可能依赖其他服务) 而不注册正在开发的服务,通过直连测试正在开发的服务


禁用注册配置:
<dubbo:registry address="10.20.135.10:9090" register="false" />
或者
<dubbo:registry address="10.20.135.10:9090?register=false" />


--------------- 只注册 --------------
可以让服务提供方,只注册服务到另一个注册中心,而不从另一注册中心订阅服务


禁用订阅配置:
<dubbo:registry id="aregistry" address="10.20.153.10:28080" />
<dubbo:registry id="bregistry" address="10.20.153.10:28080" subscribe="false" />
或者
<dubbo:registry id="aregistry" address="10.20.153.10:28080" />
<dubbo:registry id="bregistry" address="10.20.153.10:28080?subscribe=false" />