暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

祺贵人宕机了!甄嬛传版微服务故障处理指南(附实战代码)

导语
当祺贵人(订单服务)突然宕机,当华妃(流量洪峰)发起攻击,当皇后(注册中心)暗中使绊子……用甄嬛传讲透微服务高可用设计,附送代码级解决方案!



一、祺贵人宕机了!——服务节点故障

剧情还原
祺贵人(订单服务)突然晕倒(Pod崩溃),皇上(客户端)无法下单,后宫大乱。

技术真相

  1. 健康检查机制

    • Liveness Probe:太医院(Kubernetes)每10秒把脉一次,连续3次失败则判定死亡

    • Readiness Probe:检查是否准备好接客(服务就绪),失败则从服务发现中剔除

代码实战(K8s配置)

    # 健康检查配置  
    livenessProbe:
    httpGet:
    path: /health
    port: 8080
    initialDelaySeconds: 30 # 容器启动30秒后开始检查
    periodSeconds: 10 # 每10秒检查一次
    failureThreshold: 3 # 连续失败3次判定宕机


    readinessProbe:
    tcpSocket:
    port: 8080
    initialDelaySeconds: 5
    periodSeconds: 10
    1. 自动恢复策略

      • 原地重启:太医(Kubelet)尝试抢救(重启容器)

      • 节点迁移:若抢救失败,将祺贵人迁至其他寝宫(重新调度Pod)

    配置参数

      restartPolicy: Always       # 重启策略(Always/OnFailure/Never)  
      terminationGracePeriodSeconds: 30 # 优雅终止等待时间

      二、华妃发起流量攻击!——限流与熔断

      剧情还原
      华妃(恶意用户)发动1000个宫女同时召见祺贵人(每秒千次请求),导致服务崩溃。

      技术真相

      1. 网关层限流(皇后把关)

        • 令牌桶算法:每个宫女(请求)需持令牌才能进殿

        • 全局限流:限制整个后宫的请求总量

      代码实战(Nginx配置)

        # 限制每秒10个请求  
        limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;


        location order {
        limit_req zone=req_limit burst=20; # 允许突发20个请求
        proxy_pass http://order-service;
        }
        1. 客户端熔断(甄嬛的智慧)

          • 熔断条件:错误率超过50%或连续5次失败

          • 半开状态:试探性放行部分请求,若成功则关闭熔断

        代码实战(Sentinel熔断规则)

          // 定义熔断规则  
          DegradeRule rule = new DegradeRule("orderService")
          .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATE) // 按异常比例
          .setCount(0.5) // 阈值50%
          .setTimeWindow(10) // 熔断时长10秒
          .setMinRequestAmount(5) // 最小请求数
          .setStatIntervalMs(10000); // 统计窗口10秒


          三、皇后篡改名册!——注册中心故障

          剧情还原
          皇后(注册中心Nacos)故意删除祺贵人的登记信息(服务下线),导致无人能找到她。

          技术真相

          1. 注册中心高可用架构

            • 集群部署:同时向太后(Nacos节点A)和敬妃(Nacos节点B)登记

            • 客户端缓存:皇上(客户端)本地缓存服务列表,防止注册中心全挂

          配置实战(Nacos集群)

            spring:  
            cloud:
            nacos:
            discovery:
            server-addr: 192.168.1.101:8848,192.168.1.102:8848
            1. 服务心跳保活

              • 主动上报:祺贵人每5秒向皇后报平安(注册续约)

              • 自我保护模式:若皇后发现超过85%节点失联,暂停剔除服务



            四、安陵容顶替上岗!——服务降级与容灾

            剧情还原
            祺贵人宕机后,安陵容(降级服务)临时接管,返回默认订单(“商品已售罄”)。

            技术真相

            1. 降级策略设计

              • 静态降级:直接返回预设默认值

              • 动态降级:从缓存中读取最近一次成功数据

            代码实战(Hystrix降级)

              @HystrixCommand(fallbackMethod = "fallbackOrder")  
              public Order createOrder(OrderRequest request) {
              // 正常业务逻辑
              }


              // 降级方法
              public Order fallbackOrder(OrderRequest request) {
              return new Order("default_order_id", "商品已售罄", 0);
              }
              1. 跨机房容灾

                • 异地多活:圆明园(机房A)和紫禁城(机房B)同时部署服务

                • DNS智能解析:根据用户位置选择最近机房



              五、温太医的监控系统——可观测性设计

              剧情还原
              温太医(Prometheus+Grafana)实时监控嫔妃(服务)健康状态,发现异常立即告警。

              技术栈配置

              1. 指标收集(脉象记录)

                # Prometheus配置  
                scrape_configs:
                - job_name: 'order-service'
                metrics_path: '/actuator/prometheus'
                static_configs:
                - targets: ['order-service:8080']
                1. 告警规则(太医诊断标准)



                  # Alertmanager规则
                  groups:
                  - name: service-alerts
                  rules:
                  - alert: HighErrorRate
                  expr: sum(rate(http_server_errors_total{job="order-service"}[5m])) > 0.5
                  for: 5m
                  labels:
                  severity: critical
                  annotations:
                  summary: "服务异常:订单服务错误率超过50%"

                  终极容灾方案——混沌工程演练

                  剧情彩蛋
                  每月举办“甘露寺演习”(Chaos Mesh),随机让嫔妃(服务)宕机,训练后宫应急能力。

                  混沌实验配置



                    # 模拟Pod故障
                    apiVersion: chaos-mesh.org/v1alpha1
                    kind: PodChaos
                    metadata:
                    name: kill-order-service
                    spec:
                    action: pod-kill
                    mode: one
                    selector:
                    labelSelectors:
                    app: order-service
                    duration: "30s"

                    文末求生欲

                    评论区留言「你在微服务中踩过的最深坑」

                    下期预告
                    《用红楼梦讲透分布式事务!贾宝玉的银子到底该给谁?》


                    文章转载自让天下没有难学的编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论