负载均衡的选择

147 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


负载均衡分类。

负载均衡,咋们这里说的是一种部署在实际业务中的技术方案,而不是说一个概念,原理。所以我这里按照实际使用中如何选择一个适合自己业务的技术方案来讨论的,而不是讲原理,将思想。

首先我们按照 负载均衡 用在哪个层面来说。

按照:用处

  1. http。 这个就不用说了,一般就是网站之类的,提供富媒体的服务会使用http,对传输时延要求不高的服务。
  2. rpc。如果你的服务基于tcp或者udp实现的RPC的话,那么一般都是高并发的服务了。当然,也有可能是长连接,需要实现某些长链接下的操作,比如某种websocket的东西。
  3. tcp。这里一般来说,就是如何对tcp连接进行负载,而不是说自己实现的tcp。
  4. 传输层之下。这里就比较低层了,链路层的话一般会配合硬件来实现,搞基础设施的团队会弄这个。

这里我主要面向的是RPC级别的负载均衡,因为我们目前想开发一个高并发的微服务。

对于RPC级别的负载均衡来说,即service mesh,比如:lstio,linkerd中都有loadbalancing组件。

按照:算法

  1. RR。最基础的组建,理论上来说,这是最优解,但是实际情况里面由于业务层的异构系统,异构服务的存在,所以一般会在底层,比如tcp层面来使用。
  2. WRR。就是加了个权重,这时候就涉及到业务,或者机器性能指标之类的了。
  3. P2C (按照负载来judge)。
  4. EWMA (exponentially-weighted moving average)。简单理解就是滑动平均。
  5. HASH。粗暴。
  6. Least Load Queue。粗暴。
  7. EDF。

头疼,想找个能够WRR又能够按照load来计算的动态WRR算法,真难。。。

下回再聊吧。。。

reference:

  1. linkerd.io/1/features/…
  2. link.springer.com/chapter/10.…
  3. www.voidcn.com/article/p-r…