Conway定律软件的系统结构会对应企业的组织结构。后端
单体服务 | 微服务 | |
---|---|---|
当团队规模和代码库很小时,生产力 | ✅ 高 | ❌ 低 |
当团队规模和代码库很大时,生产力 | ❌ 低 | ✅ 高 (Conway定律) |
对工程质量的要求 | ❌ 高 (能力不够的开发人员很容易破坏整个系统) | ✅ 低 (运行时是隔离的) |
dependency 版本升级 | ✅ 快 (集中管理) | ❌ 慢 |
多租户支持 / 生产-staging状态隔离 | ✅ 容易 | ❌ 困难 (每项服务必须 1) 要么创建一个staging环境链接到其余处于staging状态的服务 2) 要么跨请求上下文和数据存储的多租户支持) |
可调试性,假设相同的模块,参数,日志 | ❌ 低 | ✅ 高 (若是有分布式tracing) |
延迟 | ✅ 低 (本地) | ❌ 高 (远程) |
DevOps成本 | ✅ 低 (构建工具成本高) | ❌ 高 (容量规划很难) |
结合单体代码库和微服务能够同时利用二者的长处.api
关键是要有异步设计, 由于跨多个系统的ACID交易支付系统一般具备很是长的延迟.缓存
本文首发于硅谷io架构