这里全是引用或者从这篇文章引发的: Microservices - Not A Free Lunch!
pros:
每个单独的服务都是以某个业务模块为中心, 不用关心其他服务, 开发简单;
sale out, 伸缩性, HA
rollback only involve single app
每个服务都可以根据自己业务特性, 采用不同的内部架构, 工具, 开发语言;
每个服务可以根据load 情况, 增加减少cluster内机器的数量;
系统中的服务都是松耦合的, 便于开发, 维护;
每个服务的开发团队都不至于太大, 团队之间相互独立;
现在很多的开源的工具支持这种开发模式, 便于上手;
cons:
原来你测试部署一个app就好了, 那么现在按照模块, 根据微服务架构拆分成了多个app, 相互提供服务, 那么你逻辑上就要有多个team, 多个app, 原来测试, 部署一个app就好了, 现在要部署测试多个app, 要有更多的开发, 测试, 生产环境;
原来一个app 内部之间直接调用, 现在要通过网络, 要有服务注册, 发现机制; 网络之间的调用, 就有了failover;
多个prodution cluster 在线上, 那么就需要等多的mnoitor, 报警机制, 以及分布式的log 机制;
Substantial DevOps Skills Required
定义接口, 单机应用的接口可以随时改变, 然后修改, 微服务的分布式架构就要求协调多个team, 按计划发布; 并且接口最好在一段时间内不要修改;
Once we have distributed a system, we have to consider a whole host of concerns that we didn't before. Network latency, fault tolerance, message serialisation, unreliable networks, asynchronicity, versioning, varying loads within our application tiers etc.
Asynchronicity Is Difficult!
Testability Challenges