Dubbo的服务治理

负载均衡

Dubbo 里面默认就集成了负载均衡的算法和实现,默认提供了 4 中负载均衡实现:

  1. 权重随机:roundrobin
  2. 最小活跃度:leastactive
  3. 权重轮询:roundrobin
  4. 一致性hash:leastactive
Dubbo中负载均衡的应用方式:
1.配置文件
<dubbo:reference interface="..." loadbalance="roundrobin" />
2.注解
@Reference(loadbalance = "random")
LoginService loginService;

算法思路

RandomLoadBalance

假设有一组服务[A,B,C],他们对应的权重为 weights=[5,3,2],权重总和为10。接下来通过 随机数生成器生成一个范围在 [0,10) 之间的随机数,然后计算这个随机数会落到哪个 区间上。比如数字 3 会落到服务器 A 对应的区间上,此时返回服务器 A 即可。

LeastActiveLoadBalance

最少活跃调用数算法,活跃调用数越小,表明该服务提供者效率越高,单位时间内可处理更多的请求这个是比较科学的负载均衡算法。
每个服务提供者对应一个活跃数 active。初始情况下,所有服务提供者活跃数均为 0。 每收到一个请求,活跃数加 1,完成请求后则将活跃数减 1。在服务运行一段时间后, 性能好的服务提供者处理请求的速度更快,因此活跃数下降的也越快,此时这样的服 务提供者能够优先获取到新的服务请求。

ConsistentHashLoadBalance

hash 一致性算法,相同参数的请求总是发到同一提供者。

RoundRobinLoadBalance

我们对轮询过程进行加权,以调控每台服务器的负载。经过加权后,每台服务器能够得到的请求数比例,接近或等于他们的权重比。

容错机制

<dubbo:reference interface="..." cluster ="" />
集群方式,可选:
failover:失败自动切换,当出现失败,重试其它服务器。(缺省)
failfast:快速失败,只发起一次调用,失败立即报错。
failsafe:失败安全,出现异常时,直接忽略。
failback:失败自动恢复,后台记录失败请求,定时重发。
forking:并行调用多个服务器,只要一个成功即返回。可通过 forks="2" 来设置最大并行数。
<dubbo:reference interface="..." retries =""/>
远程服务调用重试次数,不包括第一次调用,不需要重试请设为0

服务降级

当某个非关键服务出现错误时,可以通过降级功能来临时屏蔽这个服务。降级可以有几个层面的分类: 自动降级和人工降级; 按照功能可以分为:读服务降级和写服务降级:

  1. 对一些非核心服务进行人工降级,在大促之前通过降级开关关闭哪些推荐内容、评价等对主流程没有影响的功能。
  2. 故障降级,比如调用的远程服务挂了,网络故障、或者 RPC 服务返回异常。 那么 可以直接降级,降级的方案比如设置默认值、采用兜底数据(系统推荐的行为广告挂了,可以提前准备静态页面做返回)等等。
  3. 限流降级,在秒杀这种流量比较集中并且流量特别大的情况下,因为突发访问量特别大可能会导致系统支撑不了。这个时候可以采用限流来限制访问量。当达到阀值 时,后续的请求被降级,比如进入排队页面,比如跳转到错误页(活动太火爆,稍后重试等)。
Dubbo 实现服务降级

在客户端实现一个Mock类,当出现服务降级时,会被调用

public class MockSayHelloService implements HelloService {
    @Override
    public String sayHello() {
        return "Sorry, 服务端发生异常,被降级啦!";
    }
}

修改客户端的注解,增加 mock 配置,以及修改 timeout=1, 表示本次调用的超时时 间是 1 毫秒,这样可以模拟出失败的场景。
需要配置 cluster=failfast,否则因为默认是 failover 导致客户端会发起 3 次重试,等待的时间比较长

<dubbo:reference interface="com.springboot.test.dubboClient.MockSayHelloService" check="false" id="userApiService" timeout="1" registry="zkreg"  version="1.0.0" mock="com.springboot.test.dubboConsumer.MockSayHelloService"  loadbalance = "random"  cluster = "failfast" />
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容