微服务的优点
- 使大型的复杂应用程序可以持续交付和持续部署:因为每个服务相对较小,编写和执行自动化测试变的很容易,bug也就更少;每个服务独立于其他服务部署,不需要与其他开发人员协调,因此持续部署的能力也就更强;每个服务需要满足业务逻辑相对较简单,开发过程中降低了开发难度从而使开发的速度变得更快。
- 每个服务都相对较小并容易维护:相比之下每个服务都比较小,开发者更容易理解服务中的代码,服务的编译、启动和研发速度都相对较快。
- 服务可以独立部署和扩展:服务可以独立扩展,不管是水平复制的方式增加运行实例,还是通过流量分区的方式增加运行实例,都可以根据服务的情况选择部署在适合它们的硬件之上。
- 更容易实验和采纳新的技术:因为服务相对较小且需要满足的业务需求不同,可以根据业务需求采用更合适的编程语言和框架来实现。
- 更好的容错性:可以实现更好的故障隔离,某个服务异常,其他服务仍旧可以正常的响应请求。
微服务的缺点
- 服务的拆分和定义是一项挑战:拆分微服务没有一个具体的、良好定义的算法可以完成,如果服务拆分出现偏差反而会产生更大的弊端。
- 分布式系统带来的各种复杂性:访客的一个请求会执行多个服务的业务逻辑,所以必须要解决分布式事务的问题,同样在测试业务功能也需要同时启动运行多个服务,出现异常后排查问题也会非常复杂。
- 当部署跨域多个服务的功能时需要谨慎地协调更多开发团队:必须制定一个发布计划,把服务按照依赖关系进行排序。
持续交付和持续部署可以为业务带来的价值
- 缩短了产品(或新功能)的上市时间,使企业能够快速响应客户的反馈。
- 使企业能够提供当今客户所期望的可靠服务。
- 员工可以花费更多时间来提供有价值的功能,提供员工满意度和技术能力。