高可用系列四:loadbalancer 负载均衡

负载均衡可以单独使用,也常常与注册中心结合起来使用,其需要解决的问题是流量分发,这是就需要定义分发策略,当然也包括了故障切换的能力。

故障切换

故障切换是负载均衡的基本能力,和注册中心结合时比较简单,直接获取注册中心中可用的健康服务列表,根据负载均衡策略进行数据分发,因为注册中心往往存在健康服务延迟下线的问题,因此更完善的机制是在重试时优先其他节点。

在没有注册中心的场景下,需要类似熔断的策略,进行目标服务健康状态标记,被熔断时将目标实例加入熔断名单,单位时间内进行恢复验证,验证成功后恢复服务健康状态

在以上策略外,往往还会需要一个兜底的方案,即所有实例都无法匹配上时,一般也会从所有列表中随机选择一个实例进行请求分发

分发策略

另一个核心是分发策略,常见的策略有:

  1. 随机选择策略,即请求进来以后,随机选择一个健康实例进行分发
  2. 权重策略,根据权重,分发请求时可以根据权重概率进行计算,权重高的实例有更高的概率被分发到请求
  3. 轮询策略,实例列表依次分发,相当于均匀分发请求到实例上
  4. 标签策略,可以根据请求标签,优先选择相同或满足一定条件的标签查找实例进行分发,在此基础上,便可以实现同区机房优先、版本兼容优先(即灰度)等衍生场景,后面的技巧中也是使用了该特性进行变种满足特殊需求。当然这个标签需要往下传递,从请求到各个服务节点,可以透传或者根据本身服务的特点进行修改标签。

网络策略也不是只固定一种,比如标签策略和其他策略混合使用,先使用标签策略减小实例范围,再根据其他策略进行二次实例选择。

技巧------巧用开发环境

众所周知,在微服务开发中,因为服务切分的问题,往往开发者的电脑"负担"也会很重,执行效率也会收到影响。很多时候,不仅要运营正在开发的服务,还需要运行一系列的相关服务才能测试全流程。运行服务要花时间,电脑也越来越卡,影响开发测试效率。

一般公司都会建立公共的开发测试环境,里面会运行所有的服务,这时,如果可以使用公共环境结合测试本地服务,本地只需要运行有修改的服务,同时又不影响其他人的测试,那么整体的开发测试效率会大大提升,这里提供一个方法和思路:

  1. 对接口进行打标,比如增加特定的请求 header
  2. 本地服务启动时,使用特定的服务标签运行,比如nacos中可以扩展metaData
  3. 服务接收到请求后,负载均衡先检查是否有请求相同标签的实例,有则优先访问相同标签实例,没有则优先选择没有标签的实例,最后选择其他实例
  4. 开发环境可能部署在特殊的内网中,此时需要改造特殊标签实例和没有特殊标签实例的请求地址,重定向到特定的网络端口进行分发

总结

负债均衡也是高可用中很重要的一环,而且巧用负载均衡,还可以实现开发环境中降本增效的效果。

相关推荐
诚心呈意共享外卖配送系统14 小时前
即时零售配送系统怎么选?一份可落地的技术选型评估清单
架构·系统架构·创业创新·零售
深圳安锐科技有限公司15 小时前
从成像尺度到亚像素解算:变焦视觉位移监测如何让远近断面都稳
图像处理·人工智能·深度学习·算法·计算机视觉·系统架构·结构健康监测
Ivanqhz17 小时前
MoE 原理、TC/EC 路由、LSH-MoE 与负载均衡浅析
运维·网络·人工智能·深度学习·算法·机器学习·负载均衡
微订校园外卖平台17 小时前
搭建本地外卖平台避坑:校园外卖系统架构、验收与交付清单
系统架构·外卖系统·本地生活·微订
微三云生态系统架构师-彭丹18 小时前
GEO品牌负面舆情监测?多AI问答采集与自动澄清架构
系统架构·大模型应用·舆情监测·geo系统·geo代运营服务·ai引用率·品牌防护
荆棘鸟智能18 小时前
扬尘在线监测数据接入与异常清洗:从断点补传到质量审计
人工智能·算法·系统架构
qq_4017004121 小时前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
Jmyd01231 天前
博物馆文物建模设备系统架构设计:固定式与手持式协同采集方案
系统架构·智慧文博
科威网络1 天前
《无人场馆系统架构:IoT 硬件对接、预约并发与支付一致性》
物联网·系统架构·软件需求
坐看风云变幻2 天前
《系统架构师成长之路》第 8 期|微服务:单体拆分的时机、粒度与通信
微服务·架构·系统架构