Ribbon 负载均衡策略与自定义规则

负载均衡是微服务远程调用里绕不开的问题。注册中心告诉你"有哪些服务实例",但真正每次调用哪个实例,需要负载均衡组件来决定。

一句话概括:Ribbon 是客户端负载均衡组件,Feign 发起远程调用时,底层可以通过 Ribbon 从注册中心拉到的实例列表中选择一个服务实例。


#mermaid-svg-EeExnBgBycbFvZM4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EeExnBgBycbFvZM4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EeExnBgBycbFvZM4 .error-icon{fill:#552222;}#mermaid-svg-EeExnBgBycbFvZM4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EeExnBgBycbFvZM4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EeExnBgBycbFvZM4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 .marker.cross{stroke:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EeExnBgBycbFvZM4 p{margin:0;}#mermaid-svg-EeExnBgBycbFvZM4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster-label text{fill:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster-label span{color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster-label span p{background-color:transparent;}#mermaid-svg-EeExnBgBycbFvZM4 .label text,#mermaid-svg-EeExnBgBycbFvZM4 span{fill:#333;color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .node rect,#mermaid-svg-EeExnBgBycbFvZM4 .node circle,#mermaid-svg-EeExnBgBycbFvZM4 .node ellipse,#mermaid-svg-EeExnBgBycbFvZM4 .node polygon,#mermaid-svg-EeExnBgBycbFvZM4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .rough-node .label text,#mermaid-svg-EeExnBgBycbFvZM4 .node .label text,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape .label,#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-EeExnBgBycbFvZM4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .rough-node .label,#mermaid-svg-EeExnBgBycbFvZM4 .node .label,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape .label,#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape .label{text-align:center;}#mermaid-svg-EeExnBgBycbFvZM4 .node.clickable{cursor:pointer;}#mermaid-svg-EeExnBgBycbFvZM4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 .arrowheadPath{fill:#333333;}#mermaid-svg-EeExnBgBycbFvZM4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EeExnBgBycbFvZM4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EeExnBgBycbFvZM4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EeExnBgBycbFvZM4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EeExnBgBycbFvZM4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EeExnBgBycbFvZM4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EeExnBgBycbFvZM4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster text{fill:#333;}#mermaid-svg-EeExnBgBycbFvZM4 .cluster span{color:#333;}#mermaid-svg-EeExnBgBycbFvZM4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EeExnBgBycbFvZM4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EeExnBgBycbFvZM4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape p,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EeExnBgBycbFvZM4 .icon-shape .label rect,#mermaid-svg-EeExnBgBycbFvZM4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EeExnBgBycbFvZM4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EeExnBgBycbFvZM4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EeExnBgBycbFvZM4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} order-service

发起远程调用
Feign 生成代理请求
Ribbon 获取服务名
向注册中心拉取

userservice 实例列表
本地缓存实例列表
根据负载均衡规则

选择一个实例
拼接真实 IP 和端口
发起 HTTP 调用

Ribbon 是服务端负载均衡还是客户端负载均衡

Ribbon 是客户端负载均衡。

这句话的意思是:不是由一个独立的负载均衡服务器统一转发请求,而是调用方自己拿到服务列表,然后在本地选择一个实例。

类型 选择实例的位置 例子
服务端负载均衡 请求先到负载均衡器,由负载均衡器转发 Nginx、SLB
客户端负载均衡 调用方本地拿实例列表并选择实例 Ribbon

微服务内部调用通常更适合客户端负载均衡,因为消费者本身就能通过注册中心拿到服务列表。
#mermaid-svg-NXHa1fuD8YnKJbLb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NXHa1fuD8YnKJbLb .error-icon{fill:#552222;}#mermaid-svg-NXHa1fuD8YnKJbLb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NXHa1fuD8YnKJbLb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NXHa1fuD8YnKJbLb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb .marker.cross{stroke:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NXHa1fuD8YnKJbLb p{margin:0;}#mermaid-svg-NXHa1fuD8YnKJbLb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster-label text{fill:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster-label span{color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster-label span p{background-color:transparent;}#mermaid-svg-NXHa1fuD8YnKJbLb .label text,#mermaid-svg-NXHa1fuD8YnKJbLb span{fill:#333;color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .node rect,#mermaid-svg-NXHa1fuD8YnKJbLb .node circle,#mermaid-svg-NXHa1fuD8YnKJbLb .node ellipse,#mermaid-svg-NXHa1fuD8YnKJbLb .node polygon,#mermaid-svg-NXHa1fuD8YnKJbLb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .rough-node .label text,#mermaid-svg-NXHa1fuD8YnKJbLb .node .label text,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape .label,#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape .label{text-anchor:middle;}#mermaid-svg-NXHa1fuD8YnKJbLb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .rough-node .label,#mermaid-svg-NXHa1fuD8YnKJbLb .node .label,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape .label,#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape .label{text-align:center;}#mermaid-svg-NXHa1fuD8YnKJbLb .node.clickable{cursor:pointer;}#mermaid-svg-NXHa1fuD8YnKJbLb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb .arrowheadPath{fill:#333333;}#mermaid-svg-NXHa1fuD8YnKJbLb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NXHa1fuD8YnKJbLb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NXHa1fuD8YnKJbLb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NXHa1fuD8YnKJbLb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NXHa1fuD8YnKJbLb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NXHa1fuD8YnKJbLb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster text{fill:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb .cluster span{color:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NXHa1fuD8YnKJbLb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NXHa1fuD8YnKJbLb rect.text{fill:none;stroke-width:0;}#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape p,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NXHa1fuD8YnKJbLb .icon-shape .label rect,#mermaid-svg-NXHa1fuD8YnKJbLb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NXHa1fuD8YnKJbLb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NXHa1fuD8YnKJbLb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NXHa1fuD8YnKJbLb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 服务端负载均衡
请求先到 Nginx / SLB
负载均衡器选择后端实例
转发请求
客户端负载均衡
消费者从注册中心拿实例列表
消费者本地选择实例
直接调用目标服务

两者的区别不在"有没有负载均衡",而在谁负责选择实例。服务端负载均衡由中间层选择;客户端负载均衡由调用方自己选择。

Ribbon 常见负载均衡策略

Ribbon 提供了不少规则,面试里不用每个都展开,但常见的要能说出差异。

策略 含义
RoundRobinRule 轮询选择服务实例
RandomRule 随机选择一个可用实例
WeightedResponseTimeRule 根据响应时间计算权重,响应越慢权重越低
BestAvailableRule 忽略短路实例,选择并发数较低的实例
RetryRule 在指定时间内重试选择可用实例
AvailabilityFilteringRule 过滤不健康实例,再选择连接数较小的实例
ZoneAvoidanceRule 默认策略,综合区域可用性和实例可用性选择

项目里最常提的是轮询、随机、响应时间权重、区域敏感策略。

自定义负载均衡怎么做

常见有两种方式:全局配置和局部配置。
#mermaid-svg-0750uDFS9mMYexD7{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0750uDFS9mMYexD7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0750uDFS9mMYexD7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0750uDFS9mMYexD7 .error-icon{fill:#552222;}#mermaid-svg-0750uDFS9mMYexD7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0750uDFS9mMYexD7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0750uDFS9mMYexD7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0750uDFS9mMYexD7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0750uDFS9mMYexD7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0750uDFS9mMYexD7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0750uDFS9mMYexD7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0750uDFS9mMYexD7 .marker.cross{stroke:#333333;}#mermaid-svg-0750uDFS9mMYexD7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0750uDFS9mMYexD7 p{margin:0;}#mermaid-svg-0750uDFS9mMYexD7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster-label text{fill:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster-label span{color:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster-label span p{background-color:transparent;}#mermaid-svg-0750uDFS9mMYexD7 .label text,#mermaid-svg-0750uDFS9mMYexD7 span{fill:#333;color:#333;}#mermaid-svg-0750uDFS9mMYexD7 .node rect,#mermaid-svg-0750uDFS9mMYexD7 .node circle,#mermaid-svg-0750uDFS9mMYexD7 .node ellipse,#mermaid-svg-0750uDFS9mMYexD7 .node polygon,#mermaid-svg-0750uDFS9mMYexD7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .rough-node .label text,#mermaid-svg-0750uDFS9mMYexD7 .node .label text,#mermaid-svg-0750uDFS9mMYexD7 .image-shape .label,#mermaid-svg-0750uDFS9mMYexD7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-0750uDFS9mMYexD7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .rough-node .label,#mermaid-svg-0750uDFS9mMYexD7 .node .label,#mermaid-svg-0750uDFS9mMYexD7 .image-shape .label,#mermaid-svg-0750uDFS9mMYexD7 .icon-shape .label{text-align:center;}#mermaid-svg-0750uDFS9mMYexD7 .node.clickable{cursor:pointer;}#mermaid-svg-0750uDFS9mMYexD7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0750uDFS9mMYexD7 .arrowheadPath{fill:#333333;}#mermaid-svg-0750uDFS9mMYexD7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0750uDFS9mMYexD7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0750uDFS9mMYexD7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0750uDFS9mMYexD7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0750uDFS9mMYexD7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0750uDFS9mMYexD7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0750uDFS9mMYexD7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0750uDFS9mMYexD7 .cluster text{fill:#333;}#mermaid-svg-0750uDFS9mMYexD7 .cluster span{color:#333;}#mermaid-svg-0750uDFS9mMYexD7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0750uDFS9mMYexD7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0750uDFS9mMYexD7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-0750uDFS9mMYexD7 .icon-shape,#mermaid-svg-0750uDFS9mMYexD7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0750uDFS9mMYexD7 .icon-shape p,#mermaid-svg-0750uDFS9mMYexD7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0750uDFS9mMYexD7 .icon-shape .label rect,#mermaid-svg-0750uDFS9mMYexD7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0750uDFS9mMYexD7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0750uDFS9mMYexD7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0750uDFS9mMYexD7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 自定义负载均衡策略
全局生效
局部生效
定义 IRule 类型 Bean
所有服务调用使用该规则
在配置文件中指定

某个服务的规则类
只影响指定服务调用

方式一:定义 IRule Bean

java 复制代码
@Bean
public IRule randomRule() {
    return new RandomRule();
}

这种方式通常是全局生效,要小心影响范围。

方式二:配置某个服务的规则

yaml 复制代码
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

这种方式是局部生效,只影响调用 userservice 时的负载均衡策略。

面试回答模板

可以这样答:

我们项目里的服务调用使用 Feign,Feign 底层会结合 Ribbon 做客户端负载均衡。消费者先从注册中心拉取服务实例列表,比如 user-service 有多个实例,Ribbon 会根据负载均衡策略选择一个实例发起调用。常见策略有轮询、随机、按响应时间权重、区域敏感策略等。自定义策略可以实现 IRule 接口并配置成 Bean,也可以在配置文件里针对某一个服务单独指定规则。

小结

Ribbon 的重点不在"背策略名",而在理解调用链:

Feign 发起调用 -> Ribbon 获取服务列表 -> 负载均衡规则选实例 -> 拼真实地址 -> 发送请求。

把这条线讲清楚,策略名只是补充。

相关推荐
随便做点啥14 小时前
8卡服务器(4服务x 2卡)Nginx 负载均衡配置,与百分位延迟说明
服务器·nginx·负载均衡
梵得儿SHI14 小时前
SpringCloud 进阶拓展:性能优化指南(缓存三大问题 + 分库分表入门)
spring cloud·缓存·微服务·性能优化·高并发·分库分表·数据库优化
苏渡苇1 天前
Spring Cloud Alibaba:将 Sentinel 熔断限流规则持久化到 Nacos 配置中心
数据库·spring boot·mysql·spring cloud·nacos·sentinel·持久化
过期动态1 天前
【LeetCode 热题 100】盛最多水的容器
java·数据结构·spring boot·算法·leetcode·spring cloud·职场和发展
明夜之约1 天前
Spring Cloud Gateway 深度解析:从路由原理到生产级网关实战
java·spring·spring cloud·gateway
Devin~Y2 天前
大厂 Java 面试实录:Spring Boot微服务/Kafka/Redis/K8s可观测性 + RAG Agent(小Y社死版)
java·spring boot·redis·spring cloud·kafka·kubernetes·micrometer
杰克尼2 天前
天机学堂复习总结(day03-day04)
java·开发语言·redis·elasticsearch·spring cloud
苏渡苇2 天前
服务容错的必要性与Spring Cloud Alibaba Sentinel 限流配置实战
spring boot·spring cloud·sentinel
callJJ2 天前
Nacos 详解——从概念到实战
java·spring boot·spring·spring cloud·微服务·nacos