云计算百科
云计算领域专业知识百科平台

SpringCloud-Eureka 第 14 章:不同规模场景怎么设计(2 个 / 3 个 / N 个节点)

第 14 章:不同规模场景怎么设计(2 个 / 3 个 / N 个节点)🧭

本章目标:给出可直接照抄的选型建议——你有几个服务、要不要单独建注册中心、要不要做集群,一看就知道怎么落地。
一句话原则:注册中心是"要不要用"的问题,不是"每个服务配一个"的问题。全局最多一套(生产是一套集群)。


14.0 先记住三条铁律

  • 注册中心全局只有「一套」:不管你有 2 个还是 200 个业务服务,它们共用同一套注册中心。
  • 注册中心 ≠ 业务服务:它是独立进程/独立部署单元,不要塞进某个业务服务里(学习除外)。
  • 多个注册中心 = 高可用副本,不是"给不同业务各配一个"。

  • 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。
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » SpringCloud-Eureka 第 14 章:不同规模场景怎么设计(2 个 / 3 个 / N 个节点)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!