前言
微服务,是系统设计的一种架构风格。
曾经有一段时间,微服务被认为是系统设计的黄金法则。
但是,正如 Brooks 的名言:软件工程没有银弹。
微服务,自然不是银弹。
单体架构 vs 微服务架构
比较 | 单体架构 | 微服务架构 |
---|---|---|
项目结构 | 所有模块在一个项目中 | 一个模块对应一个项目 |
服务调用 | 进程内调用 | RPC/HTTP |
开发团队 | 所有模块由一个大的开发团队完成 | 一个模块对应一个开发团队 |
开发模式 | 瀑布式开发 | 敏捷开发,DevOps |
水平伸缩 | 以整个系统为维度加机器,浪费了不必要的资源 | 以某个模块为维度加机器,效果更好 |
微服务的好处 vs 坏处
好处:
- 解耦
- 职责分离
- 独立开发,独立升级,可以选择不同的技术栈
- 方便水平伸缩,可以对负载高的模块单独增加机器
- 无状态 (Stateless)
坏处:
- 微服务拆分多,并且互相调用,增加了系统复杂度
- 调用链路变长,延迟增加
- 异常处理复杂,比如某个微服务处理失败,需要考虑前面成功的微服务如何回滚
- 问题定位复杂
- 监控复杂
- 资源管理复杂
参考资料
- https://blog.bytebytego.com/i/96603172/is-microservice-architecture-the-silver-bullet
- https://blog.bytebytego.com/i/88429916/what-are-the-differences-between-monolithic-and-microservice-architecture
- https://www.zhihu.com/question/359630395
- https://martinfowler.com/articles/microservices.html