微服务也是面向服务的,但 SOA 意味着 ESB。试图把复杂度隐藏在一个庞然大物里面。

几个小标题

组件化(Componentization )与服务(Services)

组件化的好处就是可以独立部署和升级,把变化隔离在组件之内。

缺点就是会引入大量的进程间交互,引入系统交叉点,引入性能下降的瓶颈以及失败的交互。

围绕业务功能的组织

不要被 conway 定律左右,按照 feature 组织 team。每个 project 都应该能够独立拥有自己的全部功能—UI、数据库。

产品不是项目

产品要有 ownership,要对这个产品的全部生命周期负责。

强化终端及弱化通道

弱化 ESB 的复杂协议、集中式的框架。强化各个 end,或者是 client。

两种做法:基于 RESTful 通信,像 Unix 过滤器一样。基于轻量级消息总线。

分散治理

这一条的意思大概是,不要考虑用一个技术方案 rule them all。

分散数据管理

就是每个服务拥有自己的数据库。

基础设施自动化

持续集成都全自动化。

容错性设计

监控错误指标,引入断路器和仪表盘。总之提高各种 resilience(韧性)。

设计改进

能够持续改进微服务组件。版本只是最后一个手段。