乐趣区

关于go:golang-微服务的负载均衡

上次咱们说了一下 微服务的容错解决,是用的 断路器

这一次咱们来一起看看 微服务的负载平衡 是如何做的

负载平衡

负载平衡是什么呢?

他可能将大量的申请,依据负载平衡算法 ,将不同的申请散发到多台服务器上进行解决,使得所有的服务器负载 都维持在一个高效稳固的状态 ,进而能够进步零碎的吞吐量,和 保证系统的可用性

例如咱们的拜访服务器是这样的

用户 – 网络 – 服务器 – 数据库

那么,如果这一个服务器的申请数很高,超过了服务器能能解决的极限,本身无奈及时响应的时候,则会出现异常,甚至无奈连贯,用户就无奈失去及时的冀望后果

那么咱们至多能够冀望服务器部署是这个样子的

就是在服务器的后面加一个 负载均衡器,这样内部申请的压力就能够又 多个服务器来分担,并且申请给到任何一个服务器,失去的响应都是一样的

那么咱们一起来看看负载平衡的类型都有哪些

负载平衡的类型

负载平衡的类型有 2 类:

  • 软件负载平衡

个别是独立的负载平衡软件来实现内部申请的散发,个别这样的软件配置简略,应用老本很低,并且可能满足根本的负载平衡要求,例如 haproxy

那么这就要对重点关注在 软件的品质 和该软件部署在所属 服务器的性能 下面,若软件品质不行,或者部署的服务器性能不行,都会成为零碎吞吐量的瓶颈

  • 硬件负载平衡

硬件的负载平衡,必然是依赖非凡负载平衡设施来做的,部署老本绝对较高,可是对于软件的负载平衡,硬件的做法可能满足更多种场景的应用

例如常见的例子,DNS 负载平衡 和 反向代理负载平衡

DNS 负载平衡

例如在 DNS 服务器中,咱们会给一个同一个名称配置多个 IP,那么不同的 DNS 申请就会解析到不同的 IP 地址,进而这就能够达到 不同申请去拜访不同的服务器的目标,这就是咱们的 DNS 负载平衡

反向代理负载平衡

咱们平时我的项目中应用到的 服务网关就是反向代理负载平衡

作为客户端,你是不晓得你拜访的这个地址是不是真正的服务器的地址,你拜访了网关地址之后,网关会依据路由将你的申请发送给对应服务器去解决,最终返回后果,例如这样

负载平衡算法

如何保障可能让每一个服务器的都可能处于高效稳固的运行呢,这就须要优良的负载平衡算法出马了

负载平衡算法定义了如何将内部申请扩散到各个服务器实例中,它可能无效的进步吞吐量

个别会有这几种算法:

  • 随机法

随机从服务器集群中任选一台。这种办法的确 很简略,保障了申请的分散性 ,可是这种办法 无奈做到以后的申请调配是否正当 以及不同服务器本身的负载能力

  • 轮询或者加权轮询法

就是轮流的将申请调配给集群中每一个服务器,加权的话,就是依照比例轮询的形式将申请调配给集群中的每一个服务器,如:

轮询 3 个服务器

加权轮询 3 个服务器,若 A 占比 20%,B 占比 50 %,C 占比 30%

  • Hash 法或者一致性 Hash 的形式

就是应用 hash 算法将申请扩散到集群中每一个服务器下面

一致性 hash 指的是,在将申请扩散到每个服务器时,若其中一个服务器挂掉了,这个算法可能将申请平摊到剩下的服务器下面,这样能够防止申请激烈的变动

  • 最小连接数办法

就是将申请调配到连接数起码的服务器下面,然而负载均衡器须要如何晓得呢?

因而应用这种算法,就须要负载均衡器与服务器之前产生数据交互,这样它在能够理解集群中服务器的连接数状况

明天就到这里,学习所得,若有偏差,还请斧正

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是 阿兵云原生,欢送点赞关注珍藏,下次见~

退出移动版