负载均衡的路子
在系统设计中负载均衡绝不是“随机派发请求”那么简单而是一套分层次、有策略的体系。我们把它拆解为三大层次和六大核心算法理清所有路子。第一层DNS层全局负载均衡这是最前置、成本最低的负载均衡方式。路子在DNS服务器上为同一个域名配置多个A记录不同IP。典型做法轮询返回不同机房的入口IP或基于GEO地理位置返回离用户最近的机房IP。优点简单、廉价能实现跨机房/跨地域的容灾。致命缺点DNS有缓存生效慢无法感知服务器实时健康状态。一旦IP挂了用户可能还要等几分钟DNS缓存过期才会切走【解决就是设置短一点的时间、访问不通就重新查询一次等等手段】。第二层反向代理/四层与七层负载均衡流量入口层这是最核心的机房内部流量分发层分为两种类型工作层级典型产品核心路子四层负载均衡LVS/DPVS传输层IP端口LVS、F5、HAProxytcp模式只看IP和端口不做内容解析。性能极高LVS单机可达百万级并发但无法做基于URL、Header的智能路由。七层负载均衡Nginx/HAProxy应用层HTTP/HTTPSNginx、HAProxyhttp模式、Envoy解析HTTP报文能根据URL路径、Cookie、Header做精细路由。性能比四层低但灵活性极高。第三层核心算法如何挑选后端服务器这一层决定了流量到底打到哪台机器上。常见六大策略算法核心路子适用场景潜在风险轮询Round Robin按顺序轮流分配一碗水端平。后端服务器配置完全一致的无状态服务。若服务器性能不均弱的会扛不住。加权轮询Weighted RR按权重比例分配配置高的机器权重更大。服务器配置有差异或新上线小流量机器灰度验证。仍无法应对请求处理时长的不均长连接会堆积。最少连接数Least Connections谁当前活跃连接数最少就发给谁。请求处理时间长短不一如文件上传、AI推理。若连接复用Keep-Alive活跃连接数可能不准确。源地址哈希IP Hash对客户端IP做哈希保证同一IP始终打到同一台服务器。需要会话保持Session Sticky的场景或有本地缓存的服务。若某台机器宕机哈希环重排会导致大量用户漂移可用一致性哈希优化。一致性哈希Consistent Hashing将服务器和请求都映射到哈希环上扩容/缩容时只影响相邻节点。分布式缓存如Redis Cluster、分布式存储。需要配合虚拟节点解决负载不均问题。自适应算法P2C / EWMA结合CPU、内存、RT响应时间等实时指标动态打分选最优者。微服务治理如Sentinel、Hystrix、云原生环境。实现复杂容易因指标抖动导致流量震荡。第四层客户端侧负载均衡直连式这是一条容易被忽略的路子常见于微服务架构。路子服务消费者从注册中心如Nacos、Consul拉取所有服务提供者的IP列表在客户端本地自行选择一台发起RPC调用如Dubbo默认使用加权随机。优点去中心化不经过中心代理节点少一层网络开销性能更高。缺点每个语言都要实现一套逻辑且服务列表的维护一致性有挑战。给你一个实战组合建议大厂标准模板面对真实业务从来不是单选一种而是分层组合DNSGSLB做就近接入→LVS四层扛住海量流量做全局限流→Nginx七层根据URL路径做精细分发→应用内客户端负载均衡Ribbon/Dubbo做最终服务调用同时所有负载均衡器必须开启健康检查Active/Passive自动摘除异常节点这是保证高可用的底线。⚠️ 两个容易踩坑的思维陷阱负载均衡不等于高可用它只管分发不管故障自愈。若没有配合熔断、降级和重试机制一旦后端全挂负载均衡就成了“均匀把请求发向错误的地方”。不要忽略“冷启动”新启动的服务器尤其是Java应用JIT未预热直接接入大流量会导致RT飙升。必须配合预热权重Slow Start让新机器前期只接少量流量。一般哈希对节点取余一致性 哈希一致性哈希是指将存储节点和数据都映射到一个首尾相连的哈希环上存储节点可以根据 IP 地址进行哈希数据通常通过顺时针方向寻找的方式来确定自己所属的存储节点即从数据映射在环上的位置开始顺时针方向找到的第一个存储节点。缺点节点退出后的压力全部给到了后续节点带有限负载的一致性哈希其实就是每个节点增加了一个最大值超过最大值继续往后找带虚拟节点的一致性哈希带虚拟节点的一致性哈希方法核心思想是根据每个节点的性能为每个节点划分不同数量的虚拟节点并将这些虚拟节点映射到哈希环中然后再按照一致性哈希算法进行数据映射和存储。其实能做的很多比如自行按照节点的性能、距离业务指标等设置分数或者自动打分来分配权重本质上虚拟节点也是权重的一种表现形式而已。负载均衡的好处在分布式系统中负载均衡技术除了各节点共同分担请求外还有什么好处呢1提高性能2提高吐出量3提高系统可用性7*24的服务保障就是这么来的4提高扩展性加减机器比较容易5提高系统的可维护性摘除异常机器简单6提高安全性统一的对外请求入口更容易控制负载均衡可以分为两种一种是请求负载均衡即将用户的请求均衡地分发到不同的服务器进行处理另一种是数据负载均衡即将存储的数据分发到不同的存储服务器。

相关新闻