重读 Martin Fowler 的微服务论文原文
微服务也是面向服务的,但 SOA 意味着 ESB。试图把复杂度隐藏在一个庞然大物里面。
几个小标题
组件化(Componentization )与服务(Services)
组件化的好处就是可以独立部署和升级,把变化隔离在组件之内。
缺点就是会引入大量的进程间交互,引入系统交叉点,引入性能下降的瓶颈以及失败的交互。
围绕业务功能的组织
不要被 conway 定律左右,按照 feature 组织 team。每个 project 都应该能够独立拥有自己的全部功能—UI、数据库。
产品不是项目
产品要有 ownership,要对这个产品的全部生命周期负责。
强化终端及弱化通道
弱化 ESB 的复杂协议、集中式的框架。强化各个 end,或者是 client。
两种做法:基于 RESTful 通信,像 Unix 过滤器一样。基于轻量级消息总线。
分散治理
这一条的意思大概是,不要考虑用一个技术方案 rule them all。
分散数据管理
就是每个服务拥有自己的数据库。
基础设施自动化
持续集成都全自动化。
容错性设计
监控错误指标,引入断路器和仪表盘。总之提高各种 resilience(韧性)。
设计改进
能够持续改进微服务组件。版本只是最后一个手段。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.