微服务优点
- 独立部署。不依赖其他服务,耦合性低,不用管其他服务的部署对自己的影响。
- 易于开发和维护:关注特定业务,所以业务清晰,代码量少,模块变的易开发、易理解、易维护。
- 启动快:功能少,代码少,所以启动快,有需要停机维护的服务,不会长时间暂停服务。
- 局部修改容易:只需要部署 相应的服务即可,适合敏捷开发。
- 技术栈不受限:java,node.js等
- 按需伸缩:某个服务受限,可以按需增加内存,cpu等。
- 职责专一:专门团队负责专门业务,有利于团队分工。
- 代码复用:不需要重复写。底层实现通过接口方式提供。
- 便于团队协作:每个团队只需要提供API就行,定义好API后,可以并行开发。
微服务缺点
-
分布式固有的复杂性:容错(某个服务宕机),网络延时,调用关系、分布式事务等,都会带来复杂。
-
分布式事务的挑战:每个服务有自己的数据库,有点在于不同服务可以选择适合自身业务的数据库。订单用MySQL,评论用Mongodb等。目前最理想解决方案是:柔性事务的最终一致性。
刚性事务:遵循ACID原则,强一致性。
柔性事务:遵循BASE理论,最终一致性;
与刚性事务不同,柔性事务允许一定时间内,不同节点的数据不一致,但要求最终一致。
BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。BASE理论是对CAP中AP的一个扩展,通过牺牲强一致性来获得可用性,当出现故障允许部分不可用但要保证核心功能可用,允许数据在一段时间内是不一致的,但最终达到一致状态。满足BASE理论的事务,我们称之为“柔性事务”。 -
接口调整成本高:改一个接口