# 云原生迁移方案 - 基础设施篇(重构版) --- ## 1. 目标与结果 - **业务连续性**:迁移期间零感知,RTO < 15 分钟,RPO = 0(有状态组件托管化)。 - **弹性与韧性**:流量高峰 5 分钟内可横向扩 2 倍;灰度/回滚 < 5 分钟。 - **可观测性**:QPS、订单成功率、p95 延时、错误率全链路可见;异常 5 分钟内告警。 - **成本可控**:新增月度核心支出可控在 ¥500 内(不含业务流量费);按需扩缩避免常驻浪费。 --- ## 2. 目标架构(流量路径) ```mermaid graph TD User((用户/客户端)) --> ALB[ALB 负载均衡] ALB --> Gateway[MSE 云原生网关] Gateway --> Nacos[Nacos / 配置] subgraph "ACK 集群" Nacos --> DubboConsumer[Dubbo 消费者] DubboConsumer -- RPC (Dubbo/gRPC) --> DubboProvider[内部服务/大模块] DubboProvider --> Istiod[ASM/Istio 控制面] DubboProvider --> Cron[K8s CronJob] end DubboProvider --> Redis[(Redis)] DubboProvider --> MySQL[(MySQL)] DubboProvider --> RabbitMQ[(RabbitMQ)] DubboProvider --> MongoDB[(MongoDB)] DubboProvider --> Seata[Seata 分布式事务] ``` **访问关系说明** - 外部流量:ALB 终止 TLS,转发至 MSE 网关;网关基于 Nacos 实现服务路由与灰度。 - 东西向流量:Dubbo 服务通过 ASM 提供的 Sidecar 统一做流量治理、熔断与可观测性注入。 - 调度:业务定时任务迁移为 K8s CronJob,与应用镜像同生命周期、同发布节奏。 - 数据层:所有状态型组件优先托管化,降运维面风险;Seata 负责分布式事务。 --- ## 3. 日志与监控 ### 3.1 监控重心(业务优先) - 核心 KPI:QPS、订单成功率/失败率、p50/p95/p99 延时、错误率。 - 系统健康:JVM/GC、线程池、连接池、水位、节点资源(CPU/Mem/FD)。 ### 3.2 采集与展现路径 ```mermaid flowchart LR subgraph Pod App[业务应用] App -- Actuator/Exporter --> PromExp[Prom Exporter] App -- Stdout JSON --> Vector end Vector --> Loki[(Loki)] Vector --> Prom[(Prometheus)] PromExp --> Prom Prom --> Grafana Loki --> Grafana ``` - **日志侧**:应用输出单行 JSON,Vector 解析+降噪,落 Loki;查询/告警用 LogQL。 - **指标侧**:Actuator/Exporter 暴露 JVM/线程池/HTTP histogram,自定义业务指标写入 Prometheus;Grafana 汇总看板+告警。 - **云监控对比**: - 流量小、快速落地:ARMS/云监控开箱即用,少运维; - 流量大、需定制度:自建 Loki+Prom 更低成本、可扩展,建议后期切换。 --- ## 4. 弹性伸缩(HPA/AHPA) - **AHPA 原理**:基于历史数据做预测,结合自定义业务指标提前预热,避免原生 HPA 滞后。 - **示例策略**: - 触发条件:`order_success_rate < 95%` 或 `http_server_requests_p95 > 500ms`; - 扩容动作:副本数在 2~10 间自动调节,步长 50%; - 回落条件:指标连续 10 分钟恢复后缩容。 (示例 YAML 片段,供落地时调整) ```yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: order-service-hpa spec: minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 - type: Pods pods: metric: name: http_p95_latency_ms target: type: AverageValue averageValue: 500m # 500ms ``` --- ## 5. 成本增量(估算) | 资源 | 预估单价/月 | 价值/能力 | 备注 | | --- | --- | --- | --- | | ALB (基础型) | ~¥50+流量 | 7 层转发、TLS 卸载 | 按流量计费为主 | | MSE 网关 | ~¥150 | 动态路由、灰度、限流 | 含网关能力 | | MSE/Nacos/Dubbo 注册 | ~¥100 | 托管注册/配置,减运维 | 可与网关套餐绑定 | | ASM (Istio) | ~¥0-300 | 东西向治理、可观测性注入 | 标准版起收 | | Redis/Mongo/RabbitMQ | 按需计费 | 高可用托管,免自运维 | 选按量计费起步 | | HPA/AHPA 隐形成本 | 弹性节点费用 | 用多少付多少,较常驻节省 ~30% | 需监控缩容时机 | | 备份与存储 | ~¥30-80 | 日志/快照存储 | 随容量浮动 | > 核心新增固定费控制在 ~¥500/月;大头来自业务流量与数据存储的按量计费。 --- ## 6. 资源申请与迁移计划 ### 6.1 资源清单 - 计算:现有 3 台 ECS 加入 **ACK-PRO**(托管费 ~¥35/月)。 - 中间件:申请 **MSE**(含 Nacos/Dubbo/Gateway)、**Redis/Mongo/RabbitMQ** 托管版、**ASM** 基础/标准版。 - 观测:部署 **Loki + Prometheus + Grafana**(可先用云监控,后期自建)。 ### 6.2 里程碑(示例 2 周) 1. **D1-D2**:ACK、MSE、ASM 基础设施落地;网络/安全组/证书准备。 2. **D3-D5**:日志与监控链路打通(Vector -> Loki/Prom,Actuator -> Prom)。 3. **D6-D8**:非核心 Dubbo 服务与 CronJob 迁入;验证路由、配置、密钥。 4. **D9-D10**:压测与 AHPA 策略验证;观察缩扩容曲线。 5. **D11-D12**:灰度切流(ALB 权重/网关路由);回滚预案演练。 ### 6.3 风险与回滚 - **配置漂移**:使用 GitOps/Helm 管控,禁止手改;发现异常可直接回滚 Chart 版本。 - **流量突刺**:保留原机房降级开关;Prometheus 告警触发时可临时提升副本上限。 - **数据一致性**:切换前对接 Seata/事务补偿;核心写流量先双写、比对再切换。 --- *本稿为重构版,聚焦“业务优先、弹性可控、成本透明”的最小落地路径,可按实际规模调整容量与价格。*# 云原生迁移方案 - 基础设施篇 (初稿) --- ## 一、 结果导向:最终状态架构 ### 1.1 最终目标架构图 (ASCII) ```mermaid graph TD User((用户/客户端)) --> ALB[阿里云 ALB 负载均衡] subgraph "阿里云 ACK 集群 (K8s)" ALB --> Gateway[MSE 云原生网关] Gateway --> Nacos[Nacos 注册中心/配置中心] subgraph "Service Mesh (Istio/ASM)" Nacos --> DubboConsumer[Dubbo 服务消费者] DubboConsumer -- RPC (gRPC/Dubbo) --> DubboProvider[DUBBO 内部服务/大模块] DubboProvider --> IstioSidecar[Istiod 控制面] end subgraph "持久化与中间件 (云原生托管)" DubboProvider --> Redis[(Redis)] DubboProvider --> MySQL[(MySQL)] DubboProvider --> RabbitMQ[(RabbitMQ)] DubboProvider --> MongoDB[(MongoDB)] DubboProvider --> Seata[Seata 分布式事务] end subgraph "定时任务" K8sCron[K8s CronJob] end end ``` ### 1.2 业务访问关系说明 - **外部访问**:流量经 **ALB** 卸载 SSL 证书后转发至集群内的 **MSE 云原生网关**。 - **服务发现**:网关通过 **MSE Nacos** 发现 Service,实现南北向流量管理。 - **内部通信**:大模块间通过 **Dubbo RPC** 通信,并由 **ASM (Service Mesh)** 实现东西向流量治理(灰度、熔断、链路追踪)。 - **任务调度**:原生业务定时逻辑迁移至 **K8s CronJob**,确保与应用生命周期一致。 --- ## 二、 日志与监控 ### 2.1 监控重心上移 我们不再只关注宿主机负载,而是聚焦于业务健康度。 - **关键性能指标 (KPI)**:QPS (吞吐)、ORDER (业务成功率/量)、DURATION (响应延时)。 ### 2.2 日志与监控架构图 ```mermaid flowchart LR subgraph "应用 Pod" App[业务应用] --> Stdout[Log Stdout] App -- Actuator --> PromExp[Prometheus Exporter] end subgraph "采集层" Stdout --> Vector[Vector Agent] end subgraph "数据中台" Vector --> Loki[(Loki 日志库)] Vector --> Prom[(Prometheus 时序库)] PromExp --> Prom end subgraph "展示层" Loki --> Grafana[Grafana Dashboard] Prom --> Grafana end ``` ### 2.3 自建与云监控对比 | 维度 | 自建监控 (Loki + Prom) | 阿里云云监控/ARMS | 结论 | | --- | --- | --- | --- | | **价格** | 低 (主要为存储成本) | 高 (按指标量计费) | 流量大时自建性价比极高 | | **配置** | 需要运维维护配置文件 | 开箱即用,全图形化 | 早期推荐 ARMS,后期转自建 | | **扩展性** | 插件丰富,自定义逻辑强 | 受限于平台功能 | 业务逻辑复杂推荐自建 | --- ## 三、 HPA 建设:自动伸缩演进 ### 3.1 阿里云 AHPA (Advanced HPA) 原理 AHPA 基于预测算法和业务指标,解决了原生 HPA 扩容滞后的痛点。通过集成 **Prometheus 自定义指标**,可以在高峰期到来前自动完成 Pod 预热。 ### 3.2 实现示例 假设针对“订单处理成功率”进行 HPA: 1. **指标定义**:从 Prometheus 提取 `order_success_rate < 95%`。 2. **扩容逻辑**: - 当探测到处理速度低于阈值时,ACK 自动请求扩容 50% 的 Pod。 - 触发条件:`avg(order_duration) > 500ms`。 3. **结果**:在高并发大促场景下,系统在 2 分钟内完成吞吐量翻倍。 --- ## 四、 成本增量分析 (估算) | 资源名称 | 预估单价 | 获得的功能与价值 | | --- | --- | --- | | **ALB (基础型)** | 约 ¥50/月起 (含流量) | 替代传统 SLB,支持更复杂的转发规则 (Header/Cookie) | | **MSE 网关** | 约 ¥150/月 | 统一网关、限流降级、服务发现,节省自建 Nginx/Zuul 成本 | | **RabbitMQ/Redis/Mongo** | 云托管按需付费 | 极致稳定性,免去 DB 层运维痛苦 | | **ASM (基础版/标准版)** | 约 ¥0-300/月 | 获得全链路治理能力,无侵入式服务监控 | | **HPA 隐性成本** | 动态 ECS 扩容费 | **关键点**:用完即销毁,比常驻包年包月 ECS 节省约 30% 支出 | --- ## 五、 资源申请与迁移计划 ### 5.1 资源配置 - **计算资源**:3 台现网现有 ECS 作为节点,加入 **ACK-PRO 托管版** 集群(满足高可用 SLA)。 - **托管服务**:申请 **云原生 MSE**(配置 2 节点高可用型)。 - **预估成本**: - ACK-PRO 托管费:约 ¥35/月。 - ECS 节点:作为现网原有扩容,不产生额外“迁云”溢价费用。 - **总计可控**:初期核心纯新增支出 < ¥500/月。 ### 5.2 迁移时间线 1. **Day 1-2**: 基础设施搭建(ACK + MSE + 基础网络设置)。 2. **Day 3-5**: 日志/监控系统测试(Vector 采集路径打通)。 3. **Day 6-10**: 分批迁移 CronJob 与 Dubbo 非核心模块。 4. **Day 11**: 灰度切流测试(ALB 权重灰度)。 --- *注:本方案旨在利用托管服务降低运维压力,同时控制核心成本。*