Dubbo负载均衡和路由规则的区别

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 强哥的朋友最近就遇到一个问题。有如下情况:代码仓库中有一套使用Dubbo2.x编写的微服务代码CodeW,其中有一个接口方法algoCompute(Map map),这个方法可以根据传入的Map内部信息的不同,加载不同的算法模型进行计算,以此来达到同一套代码可以根据请求参数的不同处理不同需求的目的。

哈喽,大家好,我是强哥。


大家知道,强哥之前有一篇推文Dubbo也支持基于应用粒度的服务发现机制啦中说到,Dubbo2.x版本目前大都还是使用接口粒度的服务发现机制。


强哥的朋友最近就遇到一个问题。有如下情况:代码仓库中有一套使用Dubbo2.x编写的微服务代码CodeW,其中有一个接口方法algoCompute(Map map),这个方法可以根据传入的Map内部信息的不同,加载不同的算法模型进行计算,以此来达到同一套代码可以根据请求参数的不同处理不同需求的目的。


现在我们有两个服务集群E1和E2,两个集群中的服务使用的代码都是CodeW。但是集群E1只可以支持加载算法模型A的调度,集群E2只可以支持算法模型B的调度。此时就会有一个问题,集群E1和E2提供在Dubbo上的接口algoCompute(Map map)其实在服务提供者层面是无区别的,都是同一个方法的提供者(因为Dubbo2.x版本目前还是使用接口粒度的服务发现机制)。


4.png


也就是说,如果有一个服务消费者C想要通过algoCompute(Map map)方法只获取集群E1的算法A的结果如果没有经过额外的配置是不可能的。因为消费者在调用algoCompute(Map map)的时候,很可能请求会打到集群E2上,导致提供了算法模型B的运算结果。


那么,要怎么处理这样的问题呢?


我的这个朋友在经过一番思考后,想到能不能使用一致性hash的方式来处理这个问题呢?比如,我们通过配置一致性hash,使得服务消费者C的请求都打到集群E1对应的服务实例上。而其他消费者也通过请求hash,打到对应的服务实例上。


额,强哥听到这种解决办法后,马上提出了质疑,且不说一致性hash在微服务中主要处理的应用场景,就一致性hash本身来说,如果服务的下线,就会导致请求打到其他服务上,如果消费者C的请求经过一致性hash重新计算后都还是打到同一个集群E1上还好说,但是如果就打到不同的集群E2上,那问题就大了。


而会有这个想法,其实还是没有弄懂负载均衡和路由规则的关系。


路由转发规则


路由规则简单来讲就是我们在发出请求后,根据一定的规则,在服务列表中找到请求对应的处理服务(服务提供的能力是不同的),这称为服务的路由。


负载均衡


负载均衡简单地讲就是对于负载较高的服务,往往对应着一个集群。当请求到来的时候,为了将请求均衡的负载到合适的服务器,负载均衡程序将通过相应的规则,选取一台服务器进行访问,这个过程被称为负载均衡。而这些服务器提供的服务是相同的。


一张图看清区别


5.png


从图中我们便可以清晰的看出。服务路由规则是将请求分发到不同的服务集群中的。而负载均衡,则是在同一个服务集群中进行请求分发的方式。


我们提到的一致性hash,就是负载均衡的一种解决方案是我们上面提到的问题,其实是路由层面的问题。两者有本质性的差别。


Dubbo中的路由规则和负载均衡


在Dubbo中,路由规则的实现方式有:


  • 条件路由。支持以服务或 Consumer 应用为粒度配置路由规则。
  • 标签路由。以 Provider 应用为粒度配置路由规则。这两种方法都可以解决上面提到的问题。


详见:https://dubbo.apache.org/zh/docs/advanced/routing-rule/


而Dubbo的负载均衡方式就更多了:


6.png


我们通过负载均衡算法,可以解决请求在同一个集群下的的不同机子访问不平衡的问题。


详见:https://dubbo.apache.org/zh/docs/advanced/loadbalance/


写在最后


大家在学习的过程中,对于学习的知识,对应解决的是哪一种问题要多注意。不同的领域有其对应的解决方案,但这些方案在其他领域是否适用也要学会辨别和区分。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
负载均衡 Dubbo 应用服务中间件
【Dubbo 解析】Dubbo支持几种负载均衡策略?
【1月更文挑战第11天】【Dubbo 解析】Dubbo支持几种负载均衡策略?
|
9月前
|
负载均衡 Dubbo 应用服务中间件
微服务技术系列教程(31) - Dubbo-原理及负载均衡分析
微服务技术系列教程(31) - Dubbo-原理及负载均衡分析
77 0
|
3月前
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
384 1
|
22天前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
140 15
|
2天前
|
负载均衡 Cloud Native 容灾
阿里云负载均衡SLB价格_ALB、NLB和CLB区别_负载均衡功能和使用场景说明
阿里云负载均衡SLB分为应用型ALB、网络型NLB及传统型CLB。ALB与NLB仅支持按量付费,而CLB则提供包年包月和按量付费选项。ALB专长于7层HTTP/HTTPS/QUIC协议处理,支持丰富的内容路由功能;NLB聚焦于4层TCP/UDP/TCPSSL协议,擅长处理大规模并发连接。两者均基于NFV技术,支持自动弹性伸缩,并与云原生环境如ACK/SAE/K8S深度集成。此外,SLB提供多协议支持、多级容灾、安全防护等功能,确保服务的高可用性和安全性。具体收费方面,ALB的基础版实例费为0.049元/小时起,NLB实例费限时免费,两者还需支付性能容量单位LCU费及公网网络费(仅公网实例)
|
6天前
|
负载均衡 Dubbo 算法
Dubbo服务负载均衡原理
该文章主要介绍了Dubbo服务负载均衡的原理,包括Dubbo中负载均衡的实现位置、为什么需要负载均衡机制、Dubbo支持的负载均衡算法以及随机负载均衡策略的源码分析。
|
3月前
|
负载均衡 算法
Dubbo-负载均衡原理解析(1),一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的
Dubbo-负载均衡原理解析(1),一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的
|
3月前
|
负载均衡 Dubbo Java
SpringCloud和Dubbo有哪些区别
SpringCloud和Dubbo有哪些区别
|
3月前
|
弹性计算 缓存 网络协议
slb配置监听规则
配置Server Load Balancer的监听规则涉及选择协议(如HTTP/HTTPS/TCP/UDP)、设置端口,配置后端服务器组,设定健康检查(TCP或HTTP),定义转发规则(轮询、权重等),配置SSL证书、会话保持及安全优化措施。在阿里云上,这可通过登录控制台,选择SLB实例,添加监听并设置相关参数来完成。不同云服务商的具体步骤可能略有差异,参考官方文档为宜。
119 3
|
3月前
|
弹性计算 负载均衡 网络协议
slb关联监听规则
SLB的监听规则配置涉及监听协议与端口选择,如HTTP/HTTPS的80/443端口;绑定后端服务器组,按轮询、最少连接数等策略分发请求;设定健康检查以确保仅转发给健康实例;设置转发策略,如URL路径、域名路由或重定向;HTTPS监听需配置SSL证书。通过这些规则,SLB能高效均衡流量,提升服务的高可用性和可扩展性。在华为云或阿里云等平台,用户需完成这些步骤来配置SLB。
48 1