美文网首页实践人生散文想法
golang 微服务的负载均衡

golang 微服务的负载均衡

作者: 阿兵云原生 | 来源:发表于2023-05-13 16:54 被阅读0次

上次我们说了一下 微服务的容错处理,是用的 断路器

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

负载均衡

负载均衡是什么呢?

他能够将大量的请求,根据负载均衡算法,将不同的请求分发到多台服务器上进行处理,使得所有的服务器负载都维持在一个高效稳定的状态,进而可以提高系统的吞吐量,和保证系统的可用性

例如我们的访问服务器是这样的

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

[图片上传失败...(image-bed97f-1684054462929)]

那么,如果这一个服务器的请求数很高,超过了服务器能能处理的极限,自身无法及时响应的时候,则会出现异常,甚至无法连接,用户就无法得到及时的期望结果

那么我们至少可以期望服务器部署是这个样子的

[图片上传失败...(image-614483-1684054462930)]

就是在服务器的前面加一个负载均衡器,这样外部请求的压力就可以又 多个服务器来分担,并且请求给到任何一个服务器,得到的响应都是一样的

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

负载均衡的类型

负载均衡的类型有 2 类:

  • 软件负载均衡

一般是独立的负载均衡软件来实现外部请求的分发,一般这样的软件配置简单,使用成本很低,并且能够满足基本的负载均衡要求,例如 haproxy

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

  • 硬件负载均衡

硬件的负载均衡,必然是依赖特殊负载均衡设备来做的,部署成本相对较高,可是对于软件的负载均衡,硬件的做法能够满足更多种场景的使用

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

DNS 负载均衡

例如在 DNS服务器中,我们会给一个同一个名称配置多个 IP,那么不同的 DNS 请求就会解析到不同的 IP 地址,进而这就可以达到 不同请求去访问不同的服务器的目的,这就是咱们的 DNS 负载均衡

反向代理负载均衡

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

作为客户端,你是不知道你访问的这个地址是不是真正的服务器的地址,你访问了网关地址之后,网关会根据路由将你的请求发送给对应服务器去处理,最终返回结果,例如这样

[图片上传失败...(image-4db92d-1684054462930)]

负载均衡算法

如何保证能够让每一个服务器的都能够处于高效稳定的运行呢,这就需要优秀的负载均衡算法出马了

负载均衡算法定义了如何将外部请求分散到各个服务器实例中,它能够有效的提高吞吐量

一般会有这几种算法:

  • 随机法

随机从服务器集群中任选一台。这种方法确实很简单,保证了请求的分散性,可是这种方法无法做到当前的请求分配是否合理以及不同服务器自身的负载能力

  • 轮询或者加权轮询法

就是轮流的将请求分配给集群中每一个服务器,加权的话,就是按照比例轮询的方式将请求分配给集群中的每一个服务器,如:

轮询 3 个服务器

[图片上传失败...(image-b6b107-1684054462930)]

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

[图片上传失败...(image-bfb618-1684054462930)]

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

就是使用 hash 算法将请求分散到集群中每一个服务器上面

一致性 hash 指的是,在将请求分散到每个服务器时,若其中一个服务器挂掉了,这个算法能够将请求平摊到剩下的服务器上面,这样可以避免请求剧烈的变动

  • 最小连接数方法

就是将请求分配到连接数最少的服务器上面,但是负载均衡器需要如何知道呢?

因此使用这种算法,就需要负载均衡器与服务器之前产生数据交互,这样它在可以了解集群中服务器的连接数情况

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

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

[图片上传失败...(image-382cac-1684054462930)]

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

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

相关文章

  • 第11章 基本云架构

    11.1 负载分布架构 服务的负载均衡架构 负载均衡的虚拟服务器架构 负载均衡的虚拟交换机架构除了基本负载均衡机制...

  • 负载均衡

    负载均衡图例负载均衡.png 负载均衡策略 轮询 ip_hash 均衡参数 down 表示当前的服务不参与负载均衡...

  • Linux学习笔记-Nginx配置参数详细中文说明

    Nginx多台服务器实现负载均衡: 1.Nginx负载均衡服务器: Nginx负载均衡服务器的nginx.conf...

  • Ribbon-负载均衡

    我们的服务都需要部署多实例的,然后实现负载均衡 负载均衡的两种方式 服务器端的负载均衡 客户端侧负载均衡 服务器端...

  • odoo服务器性能调优以及负载均衡

    1 Odoo负载均衡 1.1 Odoo服务器负载均衡 Nginx, odoo服务器做负载均衡,空间换时间 odoo...

  • 负载均衡

    负载均衡可以分为服务端负载均衡和客户端负载均衡,服务端负载均衡完全由服务端负责,客户端不需要做任何事情。客户端负载...

  • 【深入浅出SpringCloud】I'm Ribbon

    【微服务>>>负载均衡】 一、简介 Ribbon是一个负载均衡组件,具有丰富的负载均衡策略...

  • Spring Cloud之RestTemplate 详解

    什么是客户端负载均衡 我们一般讲的负载均衡都是服务端的负载均衡,比如硬件负载均衡F5,软件负载均衡 Nginx. ...

  • loadBalance 的负载均衡解释

    负载均衡解释?客户端通过负载均衡算法,从服务列表中选择服务地址,进行连接的过程,负载均衡算法有, 轮询、随机、加权...

  • 【Ribbon+Nginx】两者之间有什么区别

    Nginx属于服务端负载均衡,而Ribbon属于本地负载均衡。

网友评论

    本文标题:golang 微服务的负载均衡

    本文链接:https://www.haomeiwen.com/subject/lmqusdtx.html