流量治理基础

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 如果要了解微服务流量是如何治理的,那么我们需要先了解微服务的流量是如何调用的,在这之前我们必须先熟悉一些基础的知识。本文将借助于我们常见的微服务开发框架Spring Cloud与Apache Dubbo来介绍微服务的服务注册与发现模型、服务路由模型以及负载均衡。当我们了解并熟悉了这些能力之后,我们可...

如果要了解微服务流量是如何治理的,那么我们需要先了解微服务的流量是如何调用的,在这之前我们必须先熟悉一些基础的知识。本文将借助于我们常见的微服务开发框架Spring Cloud与Apache Dubbo来介绍微服务的服务注册与发现模型、服务路由模型以及负载均衡。当我们了解并熟悉了这些能力之后,我们可以尝试着从流量治理的场景出发基于以上这些微服务框架的模型与组件,来实现我们想要达到的流量治理能力。

服务注册与发现

通过第一章的介绍,我们了解到,在微服务架构下,将原先复杂的业务系统拆分成一系列简单的服务,且每个服务都是由一个个独立的应用且运行在各自的进程内,单个服务可以由多个节点构成,各个服务之间通过远程通信的方式交互。当微服务架构面对变化的业务流量时,每个服务都可以做到快速地弹性扩容与缩容。那么迎来了微服务架构下的第一个问题,如图 2-1-1 所示,对于其他需要调用 OrderService 的服务来说,OrderService 服务的节点状态如何感知?其他服务(UserService)必须感知到 OrderService 服务的节点信息,才可以通过远程通信的方式与之进行交互,如果节点的信息或者状态感知有误,如果感知到部分地址那么UserService 就会访问不到 OrderService 服务的全部节点,如果感知到的地址中有错误地址,那么UserService 访问 OrderService 服务时,就有概率出现服务调用错误的问题。

可以看出来,准确且及时地让其他需要的服务感知到当前服务的节点信息是非常重要的一件事情,为了更好地解决这个服务节点信息以及状态感知的问题,微服务架构引入了注册中心这个角色。OrderService服务通过向注册中心注册自己的服务并将自己的节点信息与状态维护在注册中心中。UserService 服务如果需要访问 OrderService 服务,那么 UserService 会从注册中心中订阅 OrderService 服务,并拉取注册中心中维护的 OrderService 节点列表。这样 UserService 就可以从 OrderService 节点列表中任意选择一个节点进行调用,实现服务的调用。这个过程也就是服务注册与服务订阅,Spring Cloud 和 Apache Dubbo 都是通过服务注册/服务发现机制实现服务节点信息的维护与感知。

image

2-1-2

Spring Cloud/Apache Dubbo的服务调用过程如图 2-1-2 所示,Provider 应用(服务提供者)一个或多个节点在启动之后,会在注册中心中注册当前服务的节点信息,Consumer 应用(服务消费者)会向注册中心发现/订阅所需调用的 Provider 的节点信息,得到对应Provider服务的节点列表,之后选择其中的一个节点进行服务调用。

服务路由与负载均衡

站在服务消费者的角度思考,当我们得到了我们所需调用的服务提供者的节点列表之后,会选择其中一个节点进行服务调用,那么我们该如何选择呢?如果我们一直只选择其中第一个节点进行调用,会造成服务提供者的第一个节点压力巨大,但其他节点却闲得发慌,这肯定是不合理的。因此如何选择更合适的节点进行调用,这就是服务路由与负载均衡需要考虑的事情。

1、服务路由

服务路由的指责就是根据一定的路由策略从所有的地址表中筛选出最终目的地址集合。值得一提的是我们可以为目标服务配置多种路由策略,多个路由如同流水线一样,形成一条路由链:target = rn(…r3(r2(r1(src))))。可以用这样的公式来体现服务路由的过程,其中 r1 的输出作为 r2 的输入。

image

服务消费者会向注册中心获取到目标服务提供者的地址列表之后,会根据路由策略选出需要调用的服务提供者地址列表。

2、负载均衡

经过服务路由的服务提供者地址列表如果还是存在多个地址,就需要经过客户端负载均衡算法最终选择一个访问的目标节点地址。我们希望服务消费者的请求调用合理地分配至服务提供者的各个节点上,避免服务提供者负载不均。如果出现服务提供者负载过大,轻则导致部分请求超时,重则导致服务提供者崩溃。

微服务中常见客户端负载均衡算法如下:

  • 随机(Random)算法:在节点列表中随机选择一个目标节点。

  • 轮训(RoundRobin)算法:在节点列表中轮流选择一个目标节点。假设有 3 个节点,第一次选择第 1 个节点,第二次选择第 2 个节点。以此类推,第三次选择第 3 个节点,第四次则选择第 1 个节点。

  • 基于权重的随机(Weightd Random)算法:举一个简单的例子说明,假设有 3 个节点,第一个节点的权重是 10,第二个节点的权重是 20,第三个节点的权重是 70 。每次选择一个1到100之间的数字,如果是 1 到 10 之间,就选择第一个节点,如果是10到30之间就选择第二个节点,如果是30到100之间,就选择第三个节点。

  • 基于最少连接数(Least Connections)算法:选择当前具有最小连接数的节点。

  • 基于 hash 一致性(Consistent Hashing)算法:根据一致性 hash 的算法,尽可能将相同参数的请求选择到同一个节点上。

相对于服务路由来说,一个服务的负载均衡算法只能选择一个。负载均衡是一个比较通用的能力,基本上所有 RPC 框架都会有对应的实现。对于Apache Dubbo来说,通过内部 LoadBalance 组件实现了负载均衡能力;对于Spring Cloud 来说,官方提供了Netflix Ribbon跟Spring Cloud LoadBalancer两种实现。

有了服务路由与负载均衡后,开发者无需关心目标服务的节点列表获取与选择的逻辑,只需调用目标服务即可。流量治理能力的建设,离不开对服务路由与负载均衡的实现。我们可以通过实现一个路由策略,做到将特定的流量比如 Header 中带有 X-user-id 为 12345 的流量,路由至服务提供者中带有新版本代码的节点上;我们需要在线上服务提供者的 10.0.0.79 节点上进行内存 Dump ,为了不影响线上的业务流量,还可以通过修改负载均衡策略,让 IP 为 10.0.0.79 的服务提供者节点不接受任何来自消费者的流量,等到我们可以收集完内存 Dump 文件之后,再恢复负载均衡的策略。我们可以通过实现不同的路由与负载均衡策略可以完成对微服务流量调用的控制。

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
打赏
0
0
0
0
266
分享
相关文章
京东商品评论数据接口(JD.item_review)丨京东API接口指南
京东商品评论数据接口(JD.item_review)让开发者获取京东商品的评论列表、内容、时间、买家昵称等详细信息,助力产品优化和市场研究。使用步骤包括注册京东开发者账号、创建应用并申请API权限、获取API密钥、阅读API文档,最后通过HTTP请求调用接口获取数据。示例代码展示了如何使用Python进行请求。
827 9
2022年超详细如何使用Xftp连接CentOS 7来进行文件的传输【详细过程、图解】
这篇文章提供了使用Xftp工具连接到CentOS 7虚拟机进行文件传输的详细步骤和图解。步骤包括打开Xftp软件、创建新连接、查看并填写虚拟机的IP地址、输入虚拟机的连接账号密码,以及连接成功后进行文件传输。文章最后以"现场手撸、学无止境"作为结束语,鼓励读者不断学习和实践。
Git 可视化的实现:提升版本控制体验的利器
Git是最流行的分布式版本控制系统,广泛用于软件开发和项目管理。但其命令行操作复杂,难以直观理解,尤其是涉及分支和合并时。为此,Git可视化工具应运而生,通过图形界面帮助开发者更清晰地理解项目历史、分支结构及变更情况。本文将探讨Git可视化的概念背景、技术方法及相关工具,包括GitKraken、Sourcetree、Gitg、Git Extensions和Tig等,帮助读者掌握其在日常工作中的应用,提升版本管理效率。此外,还将介绍如何结合可视化项目管理工具,如板栗看板,实现更高效的团队协作和任务管理。
182 0
k8s学习-CKA真题-Etcd数据库备份恢复
k8s学习-CKA真题-Etcd数据库备份恢复
195 0
在实用化人形机器人研发流程中深入应用FPGA技术的流程图(基于工信部《人形机器人创新发展指导意见》)(版本A)
这个流程图将人形机器人视为一个多入多出的反馈控制系统,针对实现工信部《人形机器人创新发展指导意见》所要求的以应对真实场景下的复杂环境与任务、应对突发情况为特征的实用化人形机器人功能需求,在基于CPU+软件体系结构的人形机器人控制系统之中涉及多通道并行处理且需精准协同、强实时性(低延迟量+低延迟抖动量)、大运算量、大数据传输量且构成实时性性能瓶颈的环节中导入FPGA。
329 0
Ubuntu中删除LibreOffice方法
删除LibreOffice套件 1、打开终端。您可以使用快捷键Ctrl + Alt + T来打开终端。 2、输入以下命令以卸载LibreOffice套件: sudo apt-get remove libreoffice* 删除所有与LibreOffice相关的软件包 1、系统可能会要求您输入管理员密码。输入密码后,按下Enter键继续。 2、终端会列出要删除的软件包,并要求您确认操作。按下Y键,然后按下Enter键继续。 3、完成卸载后,您可以输入以下命令来删除与LibreOffice相关的配置文件: sudo apt-get purge libreoffice* 删除与LibreOffice
399 1
MySQL数据库 -- 索引结构 (B+ tree 与 Hash)
索引(index)是帮助MySQL高效获取数据的数据结构 , 在Mysql中有两个最常用的索引 -- B+tree索引 和 Hash索引 B-Tree(B树)是一种多叉路平衡查找树,相对于二叉树,B树每个节点可以有多个分支 哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中
510 0
传统微服务框架如何无缝过渡到服务网格ASM
服务网格ASM是一个统一管理微服务应用流量、兼容Istio的托管式平台。通过流量控制、网格观测以及服务间通信安全等功能,服务网格ASM可以全方位地简化您的服务治理,并为运行在异构计算基础设施上的服务提供统一的管理能力,适用于Kubernetes集群、Serverless Kubernetes集群、ECS虚拟机以及自建集群。
传统微服务框架如何无缝过渡到服务网格ASM
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问