2.3.2 微服务架构的缺点
凡事都有两面性,微服务架构也不例外。讲完它的优点之后,再来列举一些它的不足之处。
1.落地一个微服务架构项目比较复杂
实施和上线一个微服务架构项目的复杂度很高,工作量很大,要考虑和解决的问题很多。微服务架构实施前的技术选型、微服务组件的搭建和底层支撑、项目拆分时的边界和具体落地的细则、微服务项目的开发和上线、后期的维护等具体的工作都摆在面前,需要一个一个地处理。在落地微服务架构项目时不仅要编码,还要考虑微服务架构的搭建和底层支撑,这件事就像“大兵团作战”,不是一个五人突击队就能够完成任务的。
2.服务依赖和调用链路更复杂
微服务架构中的单个微服务,不可避免地会出现依赖性及由此导致的问题。比如,H服务依赖S服务,S服务依赖A服务,如果A服务在线上出现问题或A服务需要修改部分逻辑,那么S服务和H服务也可能受到牵连,或者级联修改。虽然已经做了服务拆分,影响范围不大,但是这些问题还是存在的。
另外一个问题就是微服务中的调用链路复杂,调用时间相对于单体应用的调用时间肯定是要延长的。微服务在服务调用时难免要建立服务连接,不管是基于HTTP协议还是基于其他的RPC协议,都会难以避免地发生网络损耗,相对于单体应用中的服务调用是同一个项目中的方法调用,更加复杂。
3.数据一致性问题
用前文中的H服务、S服务和A服务举例来说,在调用过程中,如果遇到网络延迟或A服务出现了异常导致数据回滚,但是上游H服务和S服务的数据都已经入库了,就会导致数据不一致的问题。此时就需要做好数据一致性的解决方案,相对于单体应用中的本地事务处理,复杂度又提升了。
4.问题排查的链路加长
前文已经提到了微服务架构项目中的调用链路更复杂,链路复杂和链路的拉长会导致定位线上问题时要排查的地方增加,出现了处理一个问题要查看和定位多个服务的情况。
5.学习成本高
对于开发人员来说,微服务架构的学习和上手比较难。不像学习某一个技术栈,如想要学习和上手Spring Boot技术栈,看教程后动手做几个功能和项目也就学会了。在学习微服务架构时,需要学习很多内容,包括理念、组成部分、各个组件的功能与使用等,都需要理解,还要动手搭建和整合各个微服务组件,否则很难完完整整地掌握。到了具体编码和实战的过程中,又有很多的难点要克服。