因为…所以… — 从单体架构到微服务全链路的因果推导
1. 部署慢:改一行代码,整个项目重新编译打包部署(30分钟)
2. 扩展难:用户模块压力大,但必须把整个单体都扩展(浪费资源)
3. 技术栈绑定:想用Go写新功能?不行,整个项目都是Java
订单服务调用库存服务:http://192.168.1.10:8083/inventory/deduct → 库存服务扩容换了IP → 所有调用方都要改代码!
10个服务就有10个地址 → 前端要记住10个URL → 认证、限流、日志每个服务都要写 → 引出API网关
| 面试题 | 因为…所以… |
|---|---|
| 为什么要微服务 | 因为单体部署慢/扩展难/技术栈绑定 → 所以按业务拆分 |
| 服务注册发现原理 | 因为地址硬编码无法动态伸缩 → 所以服务启动时注册到中心,调用方从中心拉取 |
| CAP与注册中心选型 | 因为网络分区不可避免 → 所以Eureka选AP(可用),ZooKeeper选CP(一致) |
| API网关作用 | 因为没有统一入口 → 所以网关统一路由/认证/限流/日志 |
| 熔断降级原理 | 因为一个服务挂了会级联 → 所以熔断快速失败,降级返回兜底数据 |
| 链路追踪原理 | 因为调用链复杂不知道哪里慢 → 所以每个请求带traceId追踪 |
| 配置中心 | 因为配置散落改了要重启 → 所以集中管理+动态刷新 |