bettyF
2018-09-12 09:07
采纳率: 100%
浏览 1.2k

有关分布式系统的负载均衡问题

目前做微服务接触到spring cloud,使用ribbon做了负载均衡;
而dubbo本身也实现了负载均衡;
但是在实际生产环境中依然使用了nginx;
它们有什么区别呢?既然dubbo和spring cloud实现了负载均衡,为什么生产系统还要使用nginx呢?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 寸辰 2018-09-12 09:26
    已采纳

    负载均衡是用于平衡每台服务的请求量,防止产生热点。

    dubbo提供的是RPC的服务调用,这种服务一般用于内部接口,例如公司内部跨业务的操作,A 业务需要通过dubbo访问B 业务的服务。
    此时dubbo的负载均衡相当于对于B业务的服务做负载均衡。

    ribbon是提供http请求的负载均衡,这种一般用于对外的API接口,例如基于restful的接口。
    例如A业务有100个节点,其中30个节点是对外的Api接口,这种情况下就可以使用这种方式进行均在均衡。

    nginx是在网关层面的负载均衡,这种负载均衡不需要代码入侵,可以实现动态配置。并且无关协议,可以对于多种协议实现负载均衡,包括http, rpc等。

    总结来看,dubbo的负载均衡只面向dubbo服务,是rpc服务的负载均衡。ribbon的负载均衡面向http请求。这两种都是细粒度化的负载均衡。
    nginx是网关层面的负载均衡。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 玄尺 2018-09-12 10:21

    负载均衡分类可以按照协议层分类,也可以按照集中式负载均衡和分布式负载均衡。我们常见的LVS、haproxy、nginx都是集中式负载均衡,这种模式压力会在负载均衡器。向当前rpc都是分布式负载均衡(或者叫做客户端模式下负载均衡),这种方式属于客户端主动去注册中心拉取需要消费组的信息,然后本地采用策略分摊压力。
    这两种方式本质上是有区别的,当前的使用场景:
    1、流量入口(比如网关层),必须使用nginx等集中式的负载均衡
    2、提供正常的http/TCP服务,没有使用dubbo、spring cloud等框架但是必须提供负载均衡能力,只能选用nginx负载均衡
    3、框架提供客户端负载均衡模式才能使用该方式

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题