因为…所以… — 从单点故障到异地多活的完整因果推导
因为一台会挂 → 所以至少两台 → 但是两台之间数据要同步 → 引出主从复制
因为一个服务挂了会导致整条链路雪崩 → 所以需要熔断器:检测到失败率过高就断开,快速失败而非慢慢等死
类比:地铁限流——人太多就放行慢一点,不能让人全挤进站台
| 算法 | 原理 | 因为…所以选 |
|---|---|---|
| 计数器 | 固定窗口内计数 | 因为简单 → 但临界点会双倍流量 |
| 滑动窗口 | 细粒度窗口 | 因为计数器临界问题 → 所以更精确 |
| 令牌桶 | 匀速放令牌,取到才能请求 | 因为允许突发 → 所以API限流常用 |
| 漏桶 | 匀速流出 | 因为要严格匀速 → 所以流量整形 |
| 策略 | 原理 | 因为…所以选 |
|---|---|---|
| 蓝绿部署 | 两套环境,切换 | 因为要秒级回滚 → 所以蓝绿 |
| 金丝雀发布 | 先放5%流量到新版本 | 因为不想全量出问题 → 所以逐步放量 |
| 滚动更新 | 逐个替换实例 | 因为资源不够两套环境 → 所以滚动 |
因为kill -9直接杀进程 → 正在处理的请求断了 → 所以优雅停机:1.停止接收新请求 2.等现有请求处理完 3.关闭
类比:Docker=集装箱,把应用打包成标准化单元;K8s=自动化港口,自动调度、扩缩容、自愈
| 面试题 | 因为…所以… |
|---|---|
| 高可用设计 | 因为单点故障 → 冗余 → 因为流量集中 → 负载均衡 |
| 熔断降级 | 因为上游故障级联 → 熔断快速失败 → 降级返回兜底 |
| 限流算法 | 因为资源有限 → 计数器/滑动窗口/令牌桶/漏桶 |
| 部署策略 | 因为发布出错 → 蓝绿秒回滚/金丝雀小流量验证 |
| 优雅停机 | 因为kill丢失请求 → 所以先注销+等处理完+再关闭 |
| Docker | 因为环境不一致 → 所以容器化打包应用+依赖 |
| K8s | 因为手动管理容器太累 → 所以K8s自动调度+自愈 |
| 容灾方案 | 因为机房故障 → 同城双活 → 异地灾备 → 异地多活 |