第 14 章:不同规模场景怎么设计(2 个 / 3 个 / N 个节点)🧭
本章目标:给出可直接照抄的选型建议——你有几个服务、要不要单独建注册中心、要不要做集群,一看就知道怎么落地。
一句话原则:注册中心是"要不要用"的问题,不是"每个服务配一个"的问题。全局最多一套(生产是一套集群)。
14.0 先记住三条铁律
14.1 场景速查表(最重要,先看这个)
| A | 2 个,地址固定 | 否 | 写死地址(不用 Eureka) | 不需要 |
| B | 2~3 个,会变动 | 偶尔 | 单个 Eureka Server | 需要(1 个) |
| C | 3~10 个 | 会 | 单个 Eureka Server(开发)→ 生产上集群 | 需要(1 个,生产 2~3 副本) |
| D | 10+ 个 / 生产核心 | 会 | Eureka 集群(2~3 副本) | 需要(一套集群) |
| E | 全新项目 / 要配置中心 | 会 | 考虑 Nacos / Consul | 需要(一套) |
判断口诀:服务少且地址固定 → 写死;一旦要动/要扩容 → 上注册中心;一旦是生产核心 → 注册中心做集群。
14.2 场景 A:只有 2 个服务,地址固定
结论:不必上 Eureka,直接写死地址最省事。
#mermaid-svg-aHq6DOPMtnJIl2br{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-aHq6DOPMtnJIl2br .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aHq6DOPMtnJIl2br .error-icon{fill:#552222;}#mermaid-svg-aHq6DOPMtnJIl2br .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aHq6DOPMtnJIl2br .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aHq6DOPMtnJIl2br .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aHq6DOPMtnJIl2br .marker.cross{stroke:#333333;}#mermaid-svg-aHq6DOPMtnJIl2br svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aHq6DOPMtnJIl2br p{margin:0;}#mermaid-svg-aHq6DOPMtnJIl2br .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-aHq6DOPMtnJIl2br .cluster-label text{fill:#333;}#mermaid-svg-aHq6DOPMtnJIl2br .cluster-label span{color:#333;}#mermaid-svg-aHq6DOPMtnJIl2br .cluster-label span p{background-color:transparent;}#mermaid-svg-aHq6DOPMtnJIl2br .label text,#mermaid-svg-aHq6DOPMtnJIl2br span{fill:#333;color:#333;}#mermaid-svg-aHq6DOPMtnJIl2br .node rect,#mermaid-svg-aHq6DOPMtnJIl2br .node circle,#mermaid-svg-aHq6DOPMtnJIl2br .node ellipse,#mermaid-svg-aHq6DOPMtnJIl2br .node polygon,#mermaid-svg-aHq6DOPMtnJIl2br .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aHq6DOPMtnJIl2br .rough-node .label text,#mermaid-svg-aHq6DOPMtnJIl2br .node .label text,#mermaid-svg-aHq6DOPMtnJIl2br .image-shape .label,#mermaid-svg-aHq6DOPMtnJIl2br .icon-shape .label{text-anchor:middle;}#mermaid-svg-aHq6DOPMtnJIl2br .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aHq6DOPMtnJIl2br .rough-node .label,#mermaid-svg-aHq6DOPMtnJIl2br .node .label,#mermaid-svg-aHq6DOPMtnJIl2br .image-shape .label,#mermaid-svg-aHq6DOPMtnJIl2br .icon-shape .label{text-align:center;}#mermaid-svg-aHq6DOPMtnJIl2br .node.clickable{cursor:pointer;}#mermaid-svg-aHq6DOPMtnJIl2br .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aHq6DOPMtnJIl2br .arrowheadPath{fill:#333333;}#mermaid-svg-aHq6DOPMtnJIl2br .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aHq6DOPMtnJIl2br .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aHq6DOPMtnJIl2br .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aHq6DOPMtnJIl2br .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aHq6DOPMtnJIl2br .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aHq6DOPMtnJIl2br .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aHq6DOPMtnJIl2br .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aHq6DOPMtnJIl2br .cluster text{fill:#333;}#mermaid-svg-aHq6DOPMtnJIl2br .cluster span{color:#333;}#mermaid-svg-aHq6DOPMtnJIl2br 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-aHq6DOPMtnJIl2br .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aHq6DOPMtnJIl2br rect.text{fill:none;stroke-width:0;}#mermaid-svg-aHq6DOPMtnJIl2br .icon-shape,#mermaid-svg-aHq6DOPMtnJIl2br .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aHq6DOPMtnJIl2br .icon-shape p,#mermaid-svg-aHq6DOPMtnJIl2br .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aHq6DOPMtnJIl2br .icon-shape .label rect,#mermaid-svg-aHq6DOPMtnJIl2br .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aHq6DOPMtnJIl2br .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aHq6DOPMtnJIl2br .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aHq6DOPMtnJIl2br :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
http://b-host:8081 (写死)
http://a-host:8080 (写死)
service-a:8080
service-b:8081
配置直接写对方 URL:
# service-a 的配置
downstream:
service-b-url: http://b–host:8081
什么时候别用这招:只要出现「B 要部署多个实例做负载均衡」或「地址经常变」,就升级到场景 B。
- ✅ 优点:零额外组件、零学习成本
- ❌ 缺点:地址变要改配置重启;无自动负载均衡
14.3 场景 B:2~3 个服务,地址会变/想解耦
结论:单独建 1 个 Eureka Server,A、B(、C)都注册进去。
#mermaid-svg-yv10DgdNCyy42vdZ{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-yv10DgdNCyy42vdZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yv10DgdNCyy42vdZ .error-icon{fill:#552222;}#mermaid-svg-yv10DgdNCyy42vdZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yv10DgdNCyy42vdZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yv10DgdNCyy42vdZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yv10DgdNCyy42vdZ .marker.cross{stroke:#333333;}#mermaid-svg-yv10DgdNCyy42vdZ svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yv10DgdNCyy42vdZ p{margin:0;}#mermaid-svg-yv10DgdNCyy42vdZ .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-yv10DgdNCyy42vdZ .cluster-label text{fill:#333;}#mermaid-svg-yv10DgdNCyy42vdZ .cluster-label span{color:#333;}#mermaid-svg-yv10DgdNCyy42vdZ .cluster-label span p{background-color:transparent;}#mermaid-svg-yv10DgdNCyy42vdZ .label text,#mermaid-svg-yv10DgdNCyy42vdZ span{fill:#333;color:#333;}#mermaid-svg-yv10DgdNCyy42vdZ .node rect,#mermaid-svg-yv10DgdNCyy42vdZ .node circle,#mermaid-svg-yv10DgdNCyy42vdZ .node ellipse,#mermaid-svg-yv10DgdNCyy42vdZ .node polygon,#mermaid-svg-yv10DgdNCyy42vdZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yv10DgdNCyy42vdZ .rough-node .label text,#mermaid-svg-yv10DgdNCyy42vdZ .node .label text,#mermaid-svg-yv10DgdNCyy42vdZ .image-shape .label,#mermaid-svg-yv10DgdNCyy42vdZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-yv10DgdNCyy42vdZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yv10DgdNCyy42vdZ .rough-node .label,#mermaid-svg-yv10DgdNCyy42vdZ .node .label,#mermaid-svg-yv10DgdNCyy42vdZ .image-shape .label,#mermaid-svg-yv10DgdNCyy42vdZ .icon-shape .label{text-align:center;}#mermaid-svg-yv10DgdNCyy42vdZ .node.clickable{cursor:pointer;}#mermaid-svg-yv10DgdNCyy42vdZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yv10DgdNCyy42vdZ .arrowheadPath{fill:#333333;}#mermaid-svg-yv10DgdNCyy42vdZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yv10DgdNCyy42vdZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yv10DgdNCyy42vdZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yv10DgdNCyy42vdZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yv10DgdNCyy42vdZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yv10DgdNCyy42vdZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yv10DgdNCyy42vdZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yv10DgdNCyy42vdZ .cluster text{fill:#333;}#mermaid-svg-yv10DgdNCyy42vdZ .cluster span{color:#333;}#mermaid-svg-yv10DgdNCyy42vdZ 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-yv10DgdNCyy42vdZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yv10DgdNCyy42vdZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-yv10DgdNCyy42vdZ .icon-shape,#mermaid-svg-yv10DgdNCyy42vdZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yv10DgdNCyy42vdZ .icon-shape p,#mermaid-svg-yv10DgdNCyy42vdZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yv10DgdNCyy42vdZ .icon-shape .label rect,#mermaid-svg-yv10DgdNCyy42vdZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yv10DgdNCyy42vdZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yv10DgdNCyy42vdZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yv10DgdNCyy42vdZ :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
用服务名互调
用服务名互调
Eureka Server :8761(单独一个进程)
service-a
service-b
service-c
- 注册中心:单独 1 个进程(不要塞进 A 或 B)。
- 业务服务:都配 defaultZone: http://注册中心:8761/eureka/,用服务名互调。
- 开发/内网可接受单点,注册中心挂了期间已缓存地址仍能调用(客户端有本地缓存)。
「能不能让 A 兼任注册中心?」——技术可行,但 A 一挂注册中心也没了,不推荐,仅限本机学习。
14.4 场景 C:3~10 个服务
结论:开发环境单个 Server 够用;生产环境上集群。
- 每个业务服务如果需要抗压,可以起多实例(同一个 spring.application.name,不同端口)。
- Eureka 会把同名的多个实例都记下来,调用方自动负载均衡。
渲染错误: Mermaid 渲染失败: Parse error on line 7:
…均衡" .-> A1 B -. .-> A2
———————-^
Expecting 'STR', 'MD_STR', 'UNICODE_TEXT', 'EDGE_TEXT', got 'LINK'
多实例只需改端口即可(同名注册):
spring:
application:
name: order–service # 两个实例名字相同
server:
port: 8080 # 另一个实例改成 8082
14.5 场景 D:10+ 服务 / 生产核心链路
结论:注册中心必须做集群(2~3 个副本,互相注册)。
#mermaid-svg-9W96kkCElLouSusa{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-9W96kkCElLouSusa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9W96kkCElLouSusa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9W96kkCElLouSusa .error-icon{fill:#552222;}#mermaid-svg-9W96kkCElLouSusa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9W96kkCElLouSusa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9W96kkCElLouSusa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9W96kkCElLouSusa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9W96kkCElLouSusa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9W96kkCElLouSusa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9W96kkCElLouSusa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9W96kkCElLouSusa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9W96kkCElLouSusa .marker.cross{stroke:#333333;}#mermaid-svg-9W96kkCElLouSusa svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9W96kkCElLouSusa p{margin:0;}#mermaid-svg-9W96kkCElLouSusa .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-9W96kkCElLouSusa .cluster-label text{fill:#333;}#mermaid-svg-9W96kkCElLouSusa .cluster-label span{color:#333;}#mermaid-svg-9W96kkCElLouSusa .cluster-label span p{background-color:transparent;}#mermaid-svg-9W96kkCElLouSusa .label text,#mermaid-svg-9W96kkCElLouSusa span{fill:#333;color:#333;}#mermaid-svg-9W96kkCElLouSusa .node rect,#mermaid-svg-9W96kkCElLouSusa .node circle,#mermaid-svg-9W96kkCElLouSusa .node ellipse,#mermaid-svg-9W96kkCElLouSusa .node polygon,#mermaid-svg-9W96kkCElLouSusa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9W96kkCElLouSusa .rough-node .label text,#mermaid-svg-9W96kkCElLouSusa .node .label text,#mermaid-svg-9W96kkCElLouSusa .image-shape .label,#mermaid-svg-9W96kkCElLouSusa .icon-shape .label{text-anchor:middle;}#mermaid-svg-9W96kkCElLouSusa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9W96kkCElLouSusa .rough-node .label,#mermaid-svg-9W96kkCElLouSusa .node .label,#mermaid-svg-9W96kkCElLouSusa .image-shape .label,#mermaid-svg-9W96kkCElLouSusa .icon-shape .label{text-align:center;}#mermaid-svg-9W96kkCElLouSusa .node.clickable{cursor:pointer;}#mermaid-svg-9W96kkCElLouSusa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9W96kkCElLouSusa .arrowheadPath{fill:#333333;}#mermaid-svg-9W96kkCElLouSusa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9W96kkCElLouSusa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9W96kkCElLouSusa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9W96kkCElLouSusa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9W96kkCElLouSusa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9W96kkCElLouSusa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9W96kkCElLouSusa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9W96kkCElLouSusa .cluster text{fill:#333;}#mermaid-svg-9W96kkCElLouSusa .cluster span{color:#333;}#mermaid-svg-9W96kkCElLouSusa 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-9W96kkCElLouSusa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9W96kkCElLouSusa rect.text{fill:none;stroke-width:0;}#mermaid-svg-9W96kkCElLouSusa .icon-shape,#mermaid-svg-9W96kkCElLouSusa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9W96kkCElLouSusa .icon-shape p,#mermaid-svg-9W96kkCElLouSusa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9W96kkCElLouSusa .icon-shape .label rect,#mermaid-svg-9W96kkCElLouSusa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9W96kkCElLouSusa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9W96kkCElLouSusa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9W96kkCElLouSusa :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Eureka Server1 :8761
Eureka Server2 :8762
Eureka Server3 :8763
各业务服务
客户端指向所有副本:
eureka:
client:
service-url:
defaultZone: http://s1:8761/eureka/,http://s2:8762/eureka/,http://s3:8763/eureka/
- 副本数建议 2~3 个,跨机器/跨可用区部署。
- 任意一个 Server 宕机,其余副本继续服务,不影响注册与发现。
- 详见 第08章-高可用集群.md。
14.6 场景 E:全新项目 / 需要配置中心
结论:可以直接考虑 Nacos / Consul,一套组件同时搞定「注册 + 配置」。
- Eureka 只做「服务注册发现」,配置中心要另配(如 Spring Cloud Config)。
- Nacos 把「注册中心 + 配置中心」合二为一,社区更活跃,适合 2026 新项目。
- 已经在用 Spring Cloud Netflix 的老项目,Eureka 继续用没问题。
- 详见 第11章-2026选型提醒.md。
14.7 「是否需要单独建服务」决策图
#mermaid-svg-BTuuWcU3b0heQBaN{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-BTuuWcU3b0heQBaN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BTuuWcU3b0heQBaN .error-icon{fill:#552222;}#mermaid-svg-BTuuWcU3b0heQBaN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BTuuWcU3b0heQBaN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BTuuWcU3b0heQBaN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BTuuWcU3b0heQBaN .marker.cross{stroke:#333333;}#mermaid-svg-BTuuWcU3b0heQBaN svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BTuuWcU3b0heQBaN p{margin:0;}#mermaid-svg-BTuuWcU3b0heQBaN .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-BTuuWcU3b0heQBaN .cluster-label text{fill:#333;}#mermaid-svg-BTuuWcU3b0heQBaN .cluster-label span{color:#333;}#mermaid-svg-BTuuWcU3b0heQBaN .cluster-label span p{background-color:transparent;}#mermaid-svg-BTuuWcU3b0heQBaN .label text,#mermaid-svg-BTuuWcU3b0heQBaN span{fill:#333;color:#333;}#mermaid-svg-BTuuWcU3b0heQBaN .node rect,#mermaid-svg-BTuuWcU3b0heQBaN .node circle,#mermaid-svg-BTuuWcU3b0heQBaN .node ellipse,#mermaid-svg-BTuuWcU3b0heQBaN .node polygon,#mermaid-svg-BTuuWcU3b0heQBaN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BTuuWcU3b0heQBaN .rough-node .label text,#mermaid-svg-BTuuWcU3b0heQBaN .node .label text,#mermaid-svg-BTuuWcU3b0heQBaN .image-shape .label,#mermaid-svg-BTuuWcU3b0heQBaN .icon-shape .label{text-anchor:middle;}#mermaid-svg-BTuuWcU3b0heQBaN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BTuuWcU3b0heQBaN .rough-node .label,#mermaid-svg-BTuuWcU3b0heQBaN .node .label,#mermaid-svg-BTuuWcU3b0heQBaN .image-shape .label,#mermaid-svg-BTuuWcU3b0heQBaN .icon-shape .label{text-align:center;}#mermaid-svg-BTuuWcU3b0heQBaN .node.clickable{cursor:pointer;}#mermaid-svg-BTuuWcU3b0heQBaN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BTuuWcU3b0heQBaN .arrowheadPath{fill:#333333;}#mermaid-svg-BTuuWcU3b0heQBaN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BTuuWcU3b0heQBaN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BTuuWcU3b0heQBaN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BTuuWcU3b0heQBaN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BTuuWcU3b0heQBaN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BTuuWcU3b0heQBaN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BTuuWcU3b0heQBaN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BTuuWcU3b0heQBaN .cluster text{fill:#333;}#mermaid-svg-BTuuWcU3b0heQBaN .cluster span{color:#333;}#mermaid-svg-BTuuWcU3b0heQBaN 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-BTuuWcU3b0heQBaN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BTuuWcU3b0heQBaN rect.text{fill:none;stroke-width:0;}#mermaid-svg-BTuuWcU3b0heQBaN .icon-shape,#mermaid-svg-BTuuWcU3b0heQBaN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BTuuWcU3b0heQBaN .icon-shape p,#mermaid-svg-BTuuWcU3b0heQBaN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BTuuWcU3b0heQBaN .icon-shape .label rect,#mermaid-svg-BTuuWcU3b0heQBaN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BTuuWcU3b0heQBaN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BTuuWcU3b0heQBaN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BTuuWcU3b0heQBaN :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
否,地址固定
是
否(开发/内网)
是
否
是
服务是否会扩容/地址是否会变?
不建注册中心直接写死地址
是不是生产核心?
单独建 1 个Eureka Server
新项目?
Eureka 集群(2~3 副本)
考虑 Nacos/Consul(一套集群)
14.8 常见误区纠正
| 每个业务服务都要配一个注册中心 | ❌ 全局共用一套 |
| 服务多了就多建几个注册中心分担 | ❌ 多副本是为高可用,不是按业务拆 |
| 注册中心挂了业务立刻全断 | ❌ 客户端有本地缓存,短时间仍可调用 |
| 把注册中心塞进业务服务省资源 | ⚠️ 仅限学习,生产要独立部署 |
| 2 个小服务也非得上 Eureka | ❌ 地址固定时写死更简单 |
14.9 本章小结
- 要不要注册中心:地址会变/要扩容才需要,否则写死即可。
- 建几个:业务角度永远一套;生产为高可用做成 2~3 副本集群。
- 别搞错:注册中心是独立部署单元,不是每个服务各配一个。
- 选型:老项目用 Eureka,新项目可考虑 Nacos/Consul。
网硕互联帮助中心



评论前必须登录!
注册