尧图精选

集群负载均衡核心算法与主流组件实现剖析

🕒 发布时间:2026/10/2 9:04:24 📁 来源:尧图网络
1. 先把集群负载均衡这件事拆清楚1.1 负载均衡到底在“均衡”什么几年前我第一次搭Hadoop集群的时候觉得负载均衡是个特别简单的事前面挂一台Nginx后面挂几台应用服务器轮询转发不就完了吗。真把集群铺开之后才发现负载均衡这个概念在不同层面指的东西完全不一样。一个Kafka集群的负载均衡关注的是分区在Broker节点之间的分配是否均匀消费者组内每个Consumer分到的分区数是否接近——这跟Nginx转发HTTP请求的逻辑差了十万八千里。一个Redis Cluster的负载均衡核心是16384个哈希槽在Master节点上是否分布均衡、热点Key有没有被打散。而一个K8s集群要处理的则是Pod副本的调度分布、Service对后端Endpoint的流量转发以及节点资源碎片化的问题。套用一句老话同一个词三层意思。我们做集群负载均衡研究第一步不是背算法而是先明确自己站在哪一层说话。站在接入层谈轮询权重站在数据层谈分区均衡站在资源调度层谈装箱率这三件事各有各的理论体系和调优手段混在一起谈只会越谈越糊涂。1.2 集群负载均衡的四个层面我把日常工作中实际接触到的负载均衡按层次拆成了四块这个框架对做研究或者做方案选型都挺有用接入层均衡流量入口到服务节点的分发典型工具是Nginx、HAProxy、F5以及云厂商的SLB。这一层处理的是连接和请求级别的均衡。服务间调用均衡微服务架构中消费者对Provider实例的选择典型组件是Dubbo的负载均衡策略、Spring Cloud LoadBalancer、Envoy的CDS/EDS。数据分布均衡数据分片在存储节点间的摆放策略。典型代表是HDFS的Block副本摆放、Kafka分区分配、Redis Cluster的哈希槽、Elasticsearch的Shard分配。计算调度均衡无状态任务或容器在计算节点上的调度。这个层面最典型的就是K8s的调度器以及VMware vSphere里的DRS集群跨主机资源调度。每个层面解决的核心矛盾不同。接入层解决的是“流量会不会压垮某一台机器”服务间调用解决的是“调用成功率与响应时间的平衡”数据分布解决的是“存储与查询热点”计算调度解决的是“资源利用率与性能隔离”。所以做技术选型的时候如果只盯着一个层面做文章其他层面的问题早晚会在某个凌晨爆发出来让你从睡梦中被报警电话叫醒。1.3 为什么不能指望“一台好机器解决所有问题”有人可能会问集群负载均衡这么复杂干脆上几台高性能物理机把流量硬扛住不就行了这个思路在小规模场景下确实能凑合但规模一大就会撞上三个现实问题。第一是单机瓶颈的物理边界。一台服务器的CPU、内存、网卡、磁盘带宽都有上限而且机房的机柜供电和散热也会限制单机配置。第二是可用性要求。再贵的机器也会宕机负载均衡的核心目标之一是“把故障的影响面控制在最小范围”单机方案天然不具备这个能力。第三是成本。高端整机在单位性能上的花费远超多台中端机器组成的集群而且横向扩容比纵向扩容要灵活得多。说白了负载均衡研究本质上是在做一个“多对多”的匹配问题多个请求对多个资源、多个数据分片对多个节点、多个Pod对多个物理机。研究的价值就是让这个匹配过程既高效又公平还能在部分节点失效时自动洗牌。2. 核心算法的原理与取舍2.1 第一代静态算法轮询与加权轮询轮询Round Robin是最没有技术含量但也最常用的策略。思路就是按顺序把请求依次发给后端节点第1个请求到节点A第2个到节点B第3个回到节点A周而复始。听起来很公平但实际跑起来问题就来了轮询假设所有请求的开销相同、所有节点的处理能力相同。现实中A节点部署在旧机器上、B节点是新采购的两者CPU主频差一倍或者某些请求携带大量数据、某些请求只是心跳探测这种差异会让轮询出现“看似均衡、实际倾斜”的情况。加权轮询Weighted Round Robin就是在轮询之上给每个节点配一个权重权重大的节点被选中的概率更高、被分配的次数更多。Nginx里的weight参数就是这个意思。权重的设置不能拍脑袋一般用节点的硬件配置和过往压测数据来定比如某节点QPS能力是另一个节点的1.5倍权重就设成3比2。不过静态类的算法有个共同缺陷它们不感知后端节点的实时状态。某个节点可能已经CPU跑满、响应延迟飙升但轮询还是把下一个请求继续发过去。这也是后来动态算法出现的原因。2.2 动态算法最少连接与EWMA最少连接Least Connections策略很好理解新请求发给当前活跃连接数最少的节点。Nginx的least_conn、HAProxy的leastconn都是这个思路。这个策略比轮询聪明的地方在于它考虑到了请求的“持续时间”。如果某些请求是长连接比如WebSocket、下载任务连接数可以粗略代表节点上的负载压力但如果请求都是短平快的API调用连接数这个指标就容易骗人——一个节点可能只是处理得快连接数一直保持低位反而是能力最强的那个这会导致它持续被分发更多的流量。更精细的做法是使用EWMA指数加权移动平均。Envoy和gRPC的负载均衡策略里大量用到这个算法。核心思想是让节点最近一段时间的响应时间以指数衰减的方式参与计算越靠近当前时刻的数据权重越大越久远的数据权重越小。每个节点维护一个平滑后的响应时间负载均衡器选择响应时间最短的节点转发请求。我在实际调优网关策略时体会比较深最少连接适合长连接场景EWMA适合HTTP短请求场景。两者没有绝对优劣取决于你的业务流量画像。如果想省心一点可以先用轮询跑一段基线再把策略切到最少连接或EWMA对比P99延迟和节点CPU分布再最终定夺。2.3 一致性哈希与数据分布的均衡前面讨论的算法都默认后端节点是无状态的任意节点都能处理任意请求。可一旦涉及缓存或者数据分片问题就变了同一个Key必须稳定地落到同一个节点上否则每次请求都要穿透到更底层的数据源。一致性哈希Consistent Hashing就是解决这个问题的经典方案。它的做法是把整个哈希值域看成一个环缓存节点也根据自己的哈希值分布在环上。一个请求的Key计算哈希后沿环顺时针找第一个节点就落到该节点上。节点增减时只影响环上相邻的一小段区间其他数据不受影响。Redis Cluster用的不是一致性哈希而是更工程化的哈希槽Hash Slot方案把Key空间划分为16384个槽每个Master负责一段连续的槽区间。节点增减时以槽为粒度做迁移配合MOVED重定向错误实现客户端的重新路由。这个方案比经典一致性哈希更好管理——槽的数量固定迁移单位明确跨节点的数据搬迁可以精确控制。我在帮一个团队排查Redis集群倾斜问题时发现他们的数据量并不大但某个节点CPU比其他节点高出一大截。原因是业务Key使用了同一个前缀哈希算法把大量Key算到了相同的槽。解决办法很简单给Key后缀拼接随机数或者用业务ID中的随机部分作为哈希输入。2.4 大模型时代的负载均衡新命题MOE与集群均衡要是只说传统的负载均衡这篇博文也就成了教科书复读。不得不提的是大模型训练和推理场景给负载均衡带来了全新的挑战。MOEMixture of Experts混合专家架构是当前大语言模型扩展参数量的主流方案之一。它把一个Transformer里的FFN层替换成多个专家子网络每个Token只激活其中Top-K个专家专家训练优化。这个机制的负载问题在于不同Token在训练数据中的分布是不均匀的某些“简单常见”的Token可能总是激活同一批专家导致这些专家的显存占用和计算负载远高于另外一些专家。解决办法就是辅助均衡损失Auxiliary Load Balancing Loss在训练时额外加一个约束项惩罚专家分配的不均匀性。类似的技术思路在KubeSphere这类集群管理平台里也有体现——平台的可观测性面板可以展示各节点的CPU、内存、网络吞吐曲线管理员能直观地定位热点节点再做手动干预。只是MOE的均衡是算法内部的动态行为而集群管理的均衡更多是策略上的调整两者解决的问题不在一个粒度上。AI算力集群的另一个负载均衡问题是“通信与计算的协同”。模型并行训练时不同GPU节点之间的数据传输量天然不同比如All-Reduce通信模式中慢节点的通信耗时会影响整个训练步长。NVIDIA的NCCL库做了大量通信调度优化包括环状算法、分块流水线来避免某个节点成为训练瓶颈。这也是一个特殊的负载均衡技术方向只是均衡的对象从“请求流量”变成了“梯度张量”。3. 主流集群组件的负载均衡实现剖析3.1 Kafka集群分区分配与消费者再均衡Kafka是我接触过的数据组件里负载均衡机制最讲究的。它把负载均衡拆成两个阶段生产者写入均衡和消费者读取均衡。生产者在发消息时要指定TopicTopic下有多个分区Partition。Kafka默认的分区器用的是murmur2哈希对Key做哈希后模分区数保证同一个Key的消息永远进入同一个分区。而分区在Broker节点上的分布则是由Kafka的副本分配策略决定的通过轮询方式将多个副本分散到不同Broker上同时尽量保证Leader副本在集群节点间数量均衡——这样每个Broker承担的写入主流量才能大致相当。消费者端的均衡则由GroupCoordinator负责。消费组内每个消费者实例订阅相同的TopicCoordinator负责把分区分配给每个消费者。分配策略有三种RangeAssignor按分区序号连续分段分配、RoundRobinAssignor按分区轮询分配消费者、StickyAssignor尽可能保留上次分配结果。这里有个特别容易踩的坑消费组里消费者数量发生变化宕机、扩容、重启会触发Rebalance。如果Rebalance频繁发生或者消费者处理消息的时间过长导致多次超时踢出就会形成“连环再均衡”风暴整个消费组出现停止消费的窗口期。我在一次生产事故里遇到过Kafka消费者全部处于Dead状态循环被踢出原因就是消费者实例处理一条耗时业务逻辑超过了max.poll.interval.msCoordinator认为它挂了触发重平衡。解决方式一是调大max.poll.interval.ms和session.timeout.ms二是缩小单次拉取的消息量max.poll.records保证消费者在超时前能完成一轮处理。3.2 Redis Cluster哈希槽与重定向机制Redis Cluster的负载均衡机制在2.2已经提到过一部分这里补充一个核心机制客户端路由。Redis Cluster的客户端比如Jedis、Lettuce、RedisGo启动时会从任意节点拉取整个集群的槽位映射表本地缓存每个槽对应的Master节点地址。一个Key过来客户端直接计算哈希槽然后直连目标节点。如果集群正在进行槽迁移目标分片上的Key可能已经被迁走请求会收到一个MOVED错误附带Key实际所在的节点地址。客户端收到MOVED后更新本地缓存并重新发起请求。这里需要特别留意的是CLUSTER命令下的槽迁移与数据倾斜排查。很多团队遇到Redis集群某个节点内存快满了其他节点还很空闲这就是哈希槽分布不均或数据分布不均的结果。我的排查路径一般是这样先用redis-cli --cluster check看各节点的槽数量和数据量分布。再用redis-cli --cluster reshard手动迁移槽把高容量节点的槽迁一部分到低容量节点。如果发现某个Key特别大大Value用MEMORY USAGE确认后考虑拆分Key或者改用Hash Tag让相关Key落到同一槽。Redis Cluster的负载均衡还有个容易忽略的方面从节点的高可用切换。主节点故障时从节点提升为主整个槽的归属发生转移集群内消息传播需要时间这期间客户端会短暂受到CLUSTERDOWN或连接异常的影响。这本质上也是一种“故障转移期的负载重新均衡”成熟客户端会自动重连并更新路由信息。3.3 K8s集群Service与kube-proxy的负载均衡K8s的负载均衡设计层层嵌套。最外层是Ingress/NLB负责外部流量进入集群中间层是Service通过kube-proxy把访问Service的流量转发到后端的Pod最内层是HPAHorizontalPodAutoscaler和调度器负责根据负载自动伸缩和调度Pod。以前老生常谈的问题是kube-proxy的三种模式userspace用户态代理性能差基本废弃、iptables通过iptables规则做DNAT转发成熟稳定但规则数量大时性能下滑、更新有延迟、ipvs基于内核态LVS支持更多调度算法性能更好。生产环境我一般建议直接用ipvs模式支持rr、wrr、lc、sh等调度算法而且规则更新是原子性的不会出现iptables模式下“更新期间连接突然断开”的现象。Service的会话保持SessionAffinity也经常被忽略。如果后端Pod是无状态的默认轮询没问题一旦Pod本地缓存了Session或者用户上下文就需要把同一个客户端的请求固定到同一个Pod。Service支持的配置是sessionAffinity: ClientIP基于来源IP做哈希。但要小心——集群前面如果还有一层负载均衡器且没开启IP透传K8s看到的“来源IP”其实是负载均衡器的内网IP所有流量会哈希到同一个Pod直接打爆那个节点。3.4 网关层与跨集群负载均衡服务网格和API网关是要单独说的。Envoy是当前最主流的负载均衡代理内核它支持极其细粒度的负载均衡策略round_robin、least_request、random、ring_hash、maglev。特别是Maglev算法——谷歌出品的一致性哈希算法内存占用小、查找速度快适合长连接场景下热点请求的负载均衡。大型企业还会遇到跨集群的负载均衡问题。比如业务同时部署在两个地域的K8s集群前面挂一层GSLB全局负载均衡或者DNS智能解析按地域亲和性把用户流量分发到就近集群。另外还涉及集群故障转移的问题主集群异常时流量需要切换到备集群。这要求两个集群的数据具备同步能力且上层负载均衡器能及时感知集群健康状态。云厂商的全局流量管理服务基本都提供健康检查 自动摘除的能力关键是要设计好“切换阈值”和“回切策略”。我见过不止一次因为阈值设置过窄导致集群网络抖动几秒就触发全局切换结果比不切换还危险——回切时又抖了一下两边来回切业务直接雪崩。4. 集群负载均衡的实际落地过程4.1 从架构图上找均衡点接手一个集群项目时我不急着写配置而是先画一张全链路请求图客户端 — 入口域名 — 接入层LB — 网关 — 微服务A/B — 数据层MySQL/Redis/ES — 消息队列 — 大数据链路。画完之后逐个环节标识出“这里有没有均衡机制”、“均衡策略是什么”、“单点在哪里”。比如接入层挂了两个Nginx用Keepalived做高可用但后面应用服务器是三个节点用轮询应用再调Redis Cluster——数据层的均衡已经由哈希槽保证了但是应用层到Redis的连接池是否均匀地分散到了每个Master往往没人验证。这一步的核心产出是一张清单标明哪些环节的均衡是“系统自动保证的”哪些是“需要人工配置的”哪些是“根本还没有均衡机制的”。后面所有的调优工作都是围绕这张清单展开。4.2 流量接入层落地从域名到Nginx再到服务池接入层的搭建量大且繁琐。以Nginx为例一个比较稳健的上游配置长这样upstream backend_cluster { least_conn; keepalive 32; server 10.0.1.10:8080 weight5 max_fails3 fail_timeout30s; server 10.0.1.11:8080 weight5 max_fails3 fail_timeout30s; server 10.0.1.12:8080 weight3 max_fails3 fail_timeout30s; } server { listen 80; server_name api.example.com; location /api/ { proxy_pass http://backend_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }这几个配置项背后都有对应的踩坑经验max_fails3 fail_timeout30s30秒内失败3次的节点会被标记为不可用之后Nginx会停止往它转发请求。但这里的“失败”只包括Nginx自己主动探测的失败如连接超时不包括后端返回500错误。如果后端服务逻辑异常导致500但进程没挂Nginx还是会继续转发请求过去。要处理这种“半死”状态需要在location里配proxy_next_upstream error timeout http_500 http_502 http_503 http_504让Nginx在收到5xx响应时自动转发给下一个节点。keepalive 32这是Nginx与后端节点之间的长连接数。如果不配每来一个请求都建一次TCP连接延迟和句柄开销大得多。配了之后要保证后端应用容器能正常接受长连接.加权最少连接在“请求耗时有差异”的场景下比纯轮询更平稳。但如果后端是高性能RPC框架如gRPC长连接复用率极高连接数这个指标在单进程内基本恒定此时加权轮询反而更可控。如果是更讲究一点的团队会在这里接上KubeSphere做集群可视化监控。KubeSphere的负载均衡器组件可以把网关的流量情况、工作负载的CPU内存和网络IO直接展示在面板上同时支持告警规则下发给底层节点方便我快速验证Nginx节点的转发分布是否与预期一致。对没有专职运维的中小团队来说这个工具能省掉大量命令行排查时间。4.3 数据层与调度层的均衡验证数据层的负载均衡验证要比业务层多一个步骤不只要看“请求有没有均匀分布”还要看“数据本身有没有均匀分布”。以Kafka为例我一般用kafka-log-dirs.sh查看每个Broker上的分区数和日志目录占用。如果某个磁盘目录的空间使用率明显偏高可能是分区分配不均或者某个分区消息量偏大。用kafka-reassign-partitions.sh按指定计划重分配即可。以Spark集群为例的均衡更多体现在Executor的调度上。Spark的spark.executor.cores与spark.executor.memory要结合集群节点配置统一规划否则容易出现“所有Executor挤在部分节点其他节点闲着”的问题。我习惯在提交任务前用YARN的资源管理器页面看一眼各NodeManager的剩余资源再调整Executor数量宁可让单Executor的核数小一点也要把Executor尽量分散到不同节点上。DNS层面的带宽测试也值得一说。测试集群间带宽时可以用iperf3搭Server/Client模式压测吞吐也可以直接在两台集群的网关节点之间跑FTP大文件传输对比线路质量和并发能力。这个问题必须提前做完因为很多跨集群复制从CDH集群迁移数据到另一个CDH集群的性能瓶颈都在网络链路上而不是拷贝工具本身。4.4 用压测验证均衡效果均衡策略配好之后不是结束了要用压力测试验证。我常用的工具是wrk、hey和locust。压测的核心指标不是总QPS而是每台后端节点的QPS分布、CPU利用率和P99延迟。压测方法上有个小技巧先固定总请求量观察各节点负载的离散系数标准差/平均值。如果离散系数超过15%说明均衡策略有问题。然后逐步把并发拉高观察负载均衡器自身是否成为瓶颈Nginx单个Worker的CPU跑满、连接队列溢出等。更精细的验证是“故障演练”手动摘掉一台后端节点观察均衡器是否及时感知、流量是否自动转移到其他节点、剩余节点有没有过载。演练期间我习惯同时观察KubeSphere面板中的工作负载曲线和Kafka的消费组Lag看数据链路是否也能自愈。“故障转移”四个字在文档里永远显得很轻巧只有真动手做一次摘除演练你才会知道自己的监控告警和流量切换机制有多脆弱。5. 常见问题与排查技巧实录5.1 健康检查误判流量被全部打死有个经典案例某核心服务的健康检查接口/health被拦截器拦了凡是没带Token的请求统统返回401。负载均衡器的健康检查自然没带Token于是后端节点被判定为不健康全部摘除流量直接打到备用池备用池容量不够服务雪崩。排查路径是这样的先看负载均衡器的后端节点状态发现全是“Down”手动curl /health发现返回401打开日志看拦截逻辑定位到认证过滤器。解决办法是把健康检查接口放进白名单。这个案例给我们的教训是两条健康检查接口一定不要依赖业务鉴权参数它应该是一个完全独立的探针最好直接返回固定字符串。负载均衡器的探针频率要低于后端节点的响应超时时间。比如探针间隔5秒、超时2秒比间隔3秒、超时5秒更安全——后者在网络抖动时很容易把正常节点误判为故障节点。5.2 会话保持失效导致登录状态反复丢失业务方反馈用户在A节点登录了下一次请求被转发到B节点B节点没有用户Session提示重新登录。排查后确认是负载均衡策略从“来源IP哈希”改成了“轮询”。解决办法有两种。第一种是把负载均衡器重新开启ip_hash或sticky session保证同一个IP的请求固定到一个节点。第二种是把Session存储集中化比如放到Redis集群里让所有节点共享Session数据。第二种方案更符合水平扩展的标准架构。如果走第一种方案要留意NAT出口IP相同的用户比如整个公司共用同一个出口IP会全部哈希到同一台后端节点造成热点。现在微服务架构里还有一个习惯做法把登录态放进JWTJSON Web Token服务端不保存Session上下文负载均衡器随便轮询都不影响。这是最彻底的应对方式缺点是无法主动失效Token。5.3 Kafka消费组Rebalance风暴我在3.1节提过这个案例这里展开说一说排查过程。现象是某个消费者服务持续出现“Member xxx has left the group”日志消费进度完全不前进。排查步骤查看消费组状态kafka-consumer-groups.sh --describe发现多个消费者状态为Dead分区不断在消费者之间重新分配。查看消费者端日志发现max.poll.records默认500条但业务数据处理平均耗时从200ms涨到了2秒原因是某次业务改造增加了DB查询处理一拉数据的时间超过了max.poll.interval.ms的默认值300000ms吗实际上500条*2秒1000秒远超5分钟。消费者被判定为超时被踢出消费组。处理办法先把max.poll.records降到200同时优化单条消息的处理逻辑把非核心操作改成异步再把max.poll.interval.ms从300000调到600000作为过渡。稳定运行后再把参数调回来用的是“先恢复可用再恢复性能”的思路。这类问题的根本原因不只是参数问题而是消费能力与消费速度不匹配。负载均衡机制在这里能做的只是“检测到消费者下线并重新分配分区”它无法主动帮消费者加快处理速度。所以做Kafka的负载均衡调优本质上是做消费组内各实例处理能力的均衡而不是做单一分布式系统的均衡。5.4 长连接池分布不均还有一个容易踩坑的地方是数据库或Redis连接池的分布问题。业务侧每个实例都会创建到后端数据集群的连接池如果业务实例数量不均、连接池上限不一即使数据层本身均衡来自客户端的总连接数也可能倾斜。比如Redis Cluster有3个Master但某个业务实例的连接池配置偏好连接到节点1所有业务实例都设置了同样的偏好节点1的连接数和CPU显著高于节点2和节点3。排查方式是在Redis上用CLIENT LIST统计各Master的连接数再检查客户端的集群路由配置。很多Redis客户端都支持启用“拓扑刷新”和“均衡路由”开启后会把新连接均匀分配到各个节点上。5.5 故障转移时的惊群效应在集群故障转移的实践里我吃过一次很大的亏。场景是主集群的一个流量入口节点发生网络分区健康检查失败负载均衡器把所有流量切到备集群。备集群之前一直是低负载运行突然涌进全部流量CPU飙到90%以上部分CPU密集型的业务请求直接超时最终触发了备集群自己的熔断机制——两边的服务都不可用。这类问题的本质是“负载均衡器只做了流量转移没做流量控制”。现在的思路有两个方向。方向一是给备集群配置容量水位线在负载均衡器上设置备用池的最大并发限制超出部分直接返回503而不是继续往备集群塞让客户端感知到“过载”而做重试退避。方向二是让备集群常态化承担一部分读流量或者离线任务流量保持“热备”状态切换时不会产生过大的负载落差。这点对于建设“高可用集群”来说比任何精妙的均衡算法都重要。5.6 常见问题速查表现象可能原因排查手段解决方案某个节点CPU明显高于其他节点会话保持导致热点、数据倾斜top、ss看连接数分布调整均衡策略打散Session或Key健康检查误摘全部节点探针接口依赖鉴权或外部依赖手动curl探针地址探针白名单降低探针风险消费者不断退出重平衡消费耗时超过超时阈值查看消费组和客户端日志调小单批拉取量调大超时阈值跨集群切换后备集群过载备集群长期低负载无缓冲能力监控备集群切换瞬间的CPU曲线增加容量水位限制保持热备K8s Service会话保持不生效来源IP被上层LB替换查看真实客户端IP开启externalTrafficPolicy或Proxy Protocol写在最后的实操体会做负载均衡这么多年我最大的感受是不要迷信算法和工具。轮询也好、一致性哈希也好、ipvs也好它们都是解决特定问题的手段而不是银弹。真正花时间的功夫是把系统的“均衡点”找全再为每个均衡点设计合适的策略和验证方法。我每次接手一个新集群必做的三件事是画全链路图、压测建立基准线、做一次故障切换演练。这三件事做完整个集群的负载均衡水平基本心里有数了。如果过程中发现哪些环节没办法自动均衡那就要明确这个风险的兜底方案是什么比如限流、熔断或手动切流。另外分享一个实用技巧无论用什么均衡策略都要在配置中开启详细访问日志或者抽样日志记录下“实际转发到了哪个节点”。很多负载均衡的问题查到最后卡点都在于无法确认流量到底走了哪条路径。有了这条日志排查效率会提升一个量级。最后提醒一句负载均衡研究的上限不是算法本身而是对业务流量的理解。把业务的账号体系、数据规模、调用特征摸透了再看看那些均衡策略你自然会知道该选哪个。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →