《从程序员到架构师》第三部分:基于常见组件的微服务场景实战
个人水平有限,可能有错,欢迎大家在评论区指正和讨论。
这是我读完王伟杰《从程序员到架构师》的读书笔记。这只是一个总结,真正深入学习,还是推荐读书!
文章目录
《从程序员到架构师》第三部分:基于常见组件的微服务场景实战
第 8 章 注册发现
1 业务痛点
几十套多语言微服务(Java/Go/Node.js),原始依靠 Nginx 静态配置服务地址,存在 4 大问题:
-
机器扩容、下线需要手动修改 Nginx,多节点同步配置极易出错;
-
新增服务实例必须重启 Nginx,影响线上业务;
-
Nginx 存在单点故障,一旦挂掉所有服务调用全部瘫痪;
-
无自动化服务清单,人工维护成本极高。
2 核心解决方案
核心逻辑:服务启动自动注册至协调中心,客户端监听节点变更,本地做负载均衡,去掉 Nginx 中转。
协调中心选型
-
Zookeeper:CP 模型,强一致性,集群选举期间不可用,适合已有 ZK 存量系统;
-
Nacos:支持 AP/CP 切换,内置配置中心,新项目首选;
-
Eureka:AP 模型,高可用优先,一致性弱,早期 Spring Cloud 方案。
兜底方案:注册中心宕机时,客户端本地缓存服务列表,新服务启动降级读取静态配置。
3 小节
场景描述:微服务集群机器频繁扩缩容,手动维护 Nginx 配置繁琐、易出错。
解决思路:引入注册发现中间件,服务自动注册下线,客户端实时感知节点变化;
故障兜底:依靠本地缓存,保障注册中心不可用时业务正常调用。
第 9 章 全链路日志
1 业务痛点
微服务多节点跨服务调用,无统一追踪标识,报错 / 超时排查效率极低,分散在多台机器的日志无法串联完整请求流程。
核心需求:
-
全局唯一 TraceID 贯穿整条请求,覆盖服务、Redis、MQ、数据库等所有调用;
-
记录每个调用环节耗时、入参、异常堆栈;
-
支持流量采样、错误日志全量采集,避免海量日志占满存储。
2 方案选型与落地
主流组件:SkyWalking、Zipkin、Jaeger
落地架构:Agent (探针)无埋点采集数据,异步上报服务端,数据存入 Elasticsearch;
基础配置:自定义采样比例、日志自动过期、集群高可用。
3 小节
场景描述:接口响应缓慢,跨多个微服务,无法定位是哪个服务拖慢整体流程。
解决思路:接入全链路追踪系统,通过 TraceID 串联整条请求,查看各环节耗时,快速定位性能瓶颈。
第 10 章 熔断
1 业务故障场景
场景 1:下游第三方接口响应缓慢,上游服务线程池被占满,所有接口阻塞卡死;
场景 2:下游服务宕机、大量请求超时,连锁拖累所有调用方,引发服务雪崩。
2 方案选型与落地
-
Hystrix:Spring Cloud 原生组件,线程池隔离,现已停止迭代;
-
Sentinel:阿里开源,配套可视化控制台,熔断 + 限流一体化,国内企业常用。
核心执行流程:
滑动时间窗口统计请求指标 → 失败率超限打开熔断 → 半开状态试探性调用 → 恢复正常则关闭熔断。
3 小节
场景描述:依赖的下游服务频繁超时,导致自身服务所有接口不可用。
解决思路:引入熔断组件,做资源隔离,触发熔断后执行降级逻辑,阻断故障雪崩。
第 11 章 限流
1 业务场景
秒杀、大促活动产生瞬时海量流量,服务器、数据库承载能力不足,流量洪峰直接打垮系统。限流核心目标:控制系统 QPS,过滤超额无效请求。
2 方案选型与落地
四类限流算法:
-
固定窗口:存在临界流量突刺缺陷,基本不使用;
-
滑动窗口:流量平滑,网关常规限流使用;
-
漏桶:匀速处理流量,不支持瞬时突发;
-
令牌桶:可预存令牌,适配秒杀突发流量,Guava RateLimiter 实现。
分层限流方案:
-
CDN / 前端:拦截重复刷的无效请求;
-
网关层限流(最优):提前拦截流量,不穿透业务服务;
-
分布式限流:多实例部署时,基于 Redis 统一管控总流量。
3 小节
场景描述:秒杀活动瞬间涌入几十万请求,后端数据库容易被打崩。
解决思路:网关采用令牌桶算法分层限流,超出阈值直接返回提示,保护后端核心服务与数据库。
总结
-
服务节点频繁扩缩容、静态配置难维护 → 注册发现中心,自动感知上下线;
-
跨服务接口超时 / 报错,难以定位瓶颈 → 全链路追踪,TraceID 串联整条调用链路;
-
下游故障引发服务雪崩 → 熔断隔离资源,配置降级逻辑;
-
大促 / 秒杀瞬时高流量冲垮系统 → 分层限流,令牌桶控制最大 QPS。
更多推荐

所有评论(0)