golang 微服务的负载均衡

简介: golang 微服务的负载均衡

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

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

负载均衡

负载均衡是什么呢?

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

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

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

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

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

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

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

负载均衡的类型

负载均衡的类型有 2 类:

  • 软件负载均衡

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

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

  • 硬件负载均衡

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

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

DNS 负载均衡

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

反向代理负载均衡

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

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

负载均衡算法

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

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

一般会有这几种算法:

  • 随机法

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

  • 轮询或者加权轮询法

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

轮询 3 个服务器

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

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

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

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

  • 最小连接数方法

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

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

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

欢迎点赞,关注,收藏

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

好了,本次就到这里

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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
919 7
|
存储 设计模式 前端开发
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
缓存 负载均衡 算法
微服务之客户端负载均衡
微服务中的客户端负载均衡是指将负载(即工作任务或访问请求)在客户端进行分配,以决定由哪个服务实例来处理这些请求。这种负载均衡方式与服务端负载均衡相对,后者是在服务端(如服务器或负载均衡器)进行请求的分发。
492 5
|
缓存 负载均衡 监控
探索分布式系统演进之路:从负载均衡到微服务架构
小米分享了分布式系统的发展,从早期的负载均衡(入口级、网关和客户端)到微服务架构的演进。微服务实现服务解耦,增强系统弹性,但带来了新的挑战。为优化数据库性能,实施了主备读写分离、全文搜索引擎、缓存集群等措施。通过微服务治理,如服务注册、动态配置、灰度发布等,提升了系统稳定性和可靠性。未来将继续优化分布式系统,提供更好的服务体验。关注公众号“软件求生”了解更多。
369 6
|
负载均衡 算法 应用服务中间件
【微服务系列笔记】负载均衡
本文介绍了负载均衡的概念和重要性,指出随着流量增长,通过垂直扩展和水平扩展来提升系统性能,其中水平扩展引入了负载均衡的需求。负载均衡的目标是将流量分布到多台服务器以提高响应速度和可用性,常见的硬件和软件负载均衡器包括F5、A10、Nginx、HAProxy和LVS等。 文章接着提到了Ribbon,这是一个客户端实现的负载均衡器,用于Spring Cloud中。Ribbon在发起REST请求时进行拦截,根据预设的负载均衡算法(如随机算法)选择服务器,并重构请求URI。文中还介绍了如何通过代码和配置文件两种方式自定义Ribbon的负载均衡策略。
1081 3
|
负载均衡 应用服务中间件 nginx
服务器架构、分布式系统、负载均衡、微服务、高可用性
**分布式系统取代单体架构,以微服务实现高扩展性和灵活性。通过负载均衡技术增强性能,防止单点故障,结合冗余备份与故障切换保障高可用性,这种架构是支撑大规模在线业务的关键。**
488 3
|
消息中间件 Go API
Golang深入浅出之-Go语言中的微服务架构设计与实践
【5月更文挑战第4天】本文探讨了Go语言在微服务架构中的应用,强调了单一职责、标准化API、服务自治和容错设计等原则。同时,指出了过度拆分、服务通信复杂性、数据一致性和部署复杂性等常见问题,并提出了DDD拆分、使用成熟框架、事件驱动和配置管理与CI/CD的解决方案。文中还提供了使用Gin构建HTTP服务和gRPC进行服务间通信的示例。
1326 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
961 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
506 1

热门文章

最新文章

推荐镜像

更多