周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54203 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

35 | 如何在客户端实现服务的负载均衡?

你好,我是周志明。这节课我们来学习客户端负载均衡的实现原理。
在正式开始讨论之前,我们先来区分清楚几个容易混淆的概念,分别是前面两讲中我介绍过的服务发现、网关路由,以及这节课要探讨的负载均衡,还有在下一讲中将会介绍的调用容错这几个技术名词都带有“从服务集群中寻找到一个合适的服务来调用”的含义,那么它们之间的差别都体现在哪呢?下面我就通过一个具体的案例场景来给你说明一下。

理解服务发现、网关路由、负载均衡、调用容错的具体区别

假设,你目前身处广东,要上 Fenix's Bookstore 购买一本书。在程序业务逻辑里,购书的其中一个关键步骤是调用商品出库服务来完成货物准备,在代码中该服务的调用请求为:
PATCH https://warehouse:8080/restful/stockpile/3
{amount: -1}
假设 Fenix's Bookstore 是个大书店,在北京、武汉、广州的机房均部署有服务集群,那么此时按顺序会发生以下事件:
首先是将 warehouse 这个服务名称转换为了恰当的服务地址。
注意,这里的“恰当”是个宽泛的描述,一种典型的“恰当”就是因为调用请求来自于广东,DNS 层面的负载均衡就会优先分配给传输距离最短的广州机房来应答。
其实按常理来说,这次出库服务的调用应该是集群内的流量,而不是用户浏览器直接发出的请求。所以尽管结果都一样,但更接近实际的情况应该是用户访问首页时,已经被 DNS 服务器分配到了广州机房,请求出库服务时,应优先选择同机房的服务进行调用,此时该服务的调用请求就变为:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了客户端负载均衡器的工作原理及其在微服务架构中的重要性。通过具体案例场景,文章解释了服务发现、网关路由、负载均衡和调用容错的区别,并以购书服务调用为例详细介绍了在服务集群中寻找合适服务进行调用的过程。客户端负载均衡器的出现弥补了传统调用过程中的繁琐和性能问题,能够简化调用过程、提高性能、减少带宽消耗、降低链路风险和运维复杂度。文章还介绍了客户端负载均衡器的优势和缺点,以及代理客户端负载均衡器的改进,强调了代理均衡器作为处理微服务集群内部流量的理想方式。总体而言,客户端负载均衡器在微服务架构中具有重要意义,而代理均衡器则是未来微服务通讯方式的主流。文章内容深入浅出,对于读者快速了解客户端负载均衡的实现原理和重要性具有指导意义。文章还介绍了地域与区域的概念,这些概念不仅在购买、使用云计算服务时会用到,还直接影响到了应用程序中路由、负载均衡的请求分发形式。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • walnut
    客户端均衡器是为同进程访问其他服务做均衡吧?是不是描述为与客户端并存更合适?

    作者回复: 这里的场景是“一个服务调用另一个服务”,所以说的“服务实例”本身其实也就是一个客户端。但语言上确实可以调整以下避免混淆。

    2021-02-06
  • Jxin
    1.负责设计的架构是要实现项目从0-1,也就是基础框架和技术选项的搭建。所以必然是要考虑负载均衡的。 2.开发工程师一般是做1-100的迭代,重心在实现业务的扩展功能。一般不感知负载均衡,所以不关心。 3.实施工程师,也就是运维。我认为是要关心的。因为负载均衡的调控需要运维根据集群压力去抉择。
    2021-02-11
    20
  • good boby
    负载均衡是架构师说需要考虑的,业务架构、应用架构、系统架构、基础设施架构,其中在系统架构会参考应用架构+基础设施架构,负载均衡可以在基础设施架构或应用架构都可实现,架构师需要根据双方的实际情况进行决策。例如F5属于硬件负载均衡,LVS/Nginx/haproxy属于软件负载均衡器,k8s在PaaS平台层的负责均衡,ribbo属于微服务应用架构的负责均衡组件。例如采用Spring Cloud微服务应用架构,且k8s在基础设施进行集群部署,那么可以摒弃ribbon的负载均衡组件,其可完全交给k8s。好处就是,k8s可以实时动态伸缩。
    2021-05-08
    5
  • 逆行者
    1、从用户过来的流程,通常被称为“南北流量”。这些流量通过“服务端集中网关”来路由。 2、同机房中不同服务之前的相互调用流量,通常被称为“东西流量”。这些流量通过“客户端负载均衡”、或者sidecar中的均衡器来调度。
    2022-02-20
    1
    4
  • 言十年
    实际上都应该关心。 但由于工作侧重点不同。 谁话语权大,谁关心的多。
    2021-03-22
    4
  • Helios
    我觉得是架构师应该考虑的,因为架构师对业务和现有架构比较了解,知道什么场景应该使用各种方式负载均衡。
    2021-02-15
    4
  • zhanyd
    “负载均衡”这件事情,应该是由负责设计程序的架构师来考虑的吧,这里涉及到架构的设计和技术的选型,属于架构师的职责范围。
    2021-02-06
    2
  • laolinshi
    系统的高性能和高可用这两个架构目标是需要架构师重点考虑的。对于如何实现这两个目标,负责均衡的思想提供了很好的解决方案。在系统中引入负载均衡,就需要考虑负载均衡在不同场景下的的实现方式。对于APP,网页和桌面客户端的请求一般采用的是服务端负载均衡,而对于微服务架构下的服务端的调用一般采用客户端负载均衡。
    2022-04-11
  • yanger2004
    随着云原生和容器化技术的兴起,开发和运维的边界变得逐渐模糊。配置即代码,代码即基础设施。所以开发也需要了解负载均衡的知识,便于从全局角度优化自己的代码设计。
    2022-04-10
  • Chonge
    2022-01-04
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部