Neusoft,neusoft( 三 )


由于这里面有大量的横向集成和协同点,因此导致的就是微服务模块间的横向集成异常复杂,远超很多互联网应用,这是实际你会面临的问题 。微服务模块拆分后,各微服务间集成复杂度指数级增加只谈微服务架构的松耦合和高扩展性,而不谈开发和集成复杂度的都是耍流氓 。实际上当前很多企业对微服务架构并没有如此迫切,互联网很多企业推行微服务架构更多的还是考虑到巨大的业务并发量下的系统弹性扩展能力,而实际大多数企业内应用往往并没有如此海量并发 。
其次,即使在并发量增加的情况下通过进行代码本身的优化,数据库调优或者升级硬件服务器资源都可以较好的解决性能问题 。而做这些事情投入的成本远远小于微服务架构带来的开发复杂度增加成本,后期的运维管控成本 。要做到完全微服务模块独立,微服务架构下最大的一个变化就是数据库也拆分开了,原来的一个业务系统如果分为5个微服务模块,那理论上就是5个独立的后台数据库,而且数据库间还不能随便相互连接和访问 。
只有这样微服务模块才能做到独立部署和管理 。由于数据库拆分带来两个问题,其一是我们原来很简单的一个跨表查询操作现在无法做了,我们必须调用两个微服务模块提供的服务,查询到数据后再到逻辑层进行组合 。其次最大的问题就是如果一个业务操作需要同时更新两个微服务模块的数据,由于服务本身无状态,导致了这种分布式事务问题很难解决 。
企业内业务系统很大一个特点就是业务逻辑和规则相对互联网更加复杂,而且有更高的事务一致性要求 。正是由于这个原因,无法解决好分布式事务的问题都将直接导致后续数据不一致和业务错误 。原来通过调用项目内一个API方法就能解决的问题,现在要调用远程WS接口才能解决,这本身就增加了开发和调试的复杂度 。一个微服务模块与外部其它模块的集成和协同越少,你会发现该微服务模块和传统业务系统开发没太大区别,但是当其涉及到完成任何一个功能都需要调用外部微服务模块的服务接口时候,其开发模式和效率上就会带来巨大的变化 。
微服务架构下运维难度增加在实施了微服务架构后,运维的复杂度也是成倍增加,任何一个微服务模块出问题都可能影响到整个业务应用的功能使用 。我们在运维时候不仅仅要健康单个微服务模块,还需要健康所有的接口服务监控状态 。如果跟Docker集成了,我们看到整个性能监控和问题分析都会变麻烦了,没有实施微服务架构前发现问题,我们直接可以看应用服务器上类似tomcat或jboss日志,而实施了微服务架构后,应用容器已经是自动部署和动态分配的,原有的故障诊断模式行不通,而需要PaaS平台本身提供完整的预警和日志分析能力 。
再次,如果发现了性能问题或故障,我们的解决方案是如何的?我们如何保证不影响到业务运行,不出现数据的丢失,或者在微服务模块扩展的时候不出现业务中断等 。这些已经不是简单的部署架构层面的冗余能解决的问题,而涉及到我们在整个微服务架构中的消息策略,事务管理机制,持久化机制等问题 。引入微服务后的实施难度增加一个企业所涉及到的IT开发和架构能力以及企业本身的IT治理管控成熟度都将直接影响到微服务架构能否实施成功,要知道引入微服务架构后集成和后续运维等的复杂度都会成指数级增长 。
方式1:引入的外部开发商进行微服务架构化如果一个企业本身IT部门规模小,软件以外购为主,那么势必在对ERP等各类软件的选型评估后引入不同的软件产品提供商或软件开发商 。那么软件商本身都有了成熟的产品或架构,其产品内部的模块是否符合组件化和微服务架构的要求,我们不得而知 。即使招标要求写明软件提供商提供产品需要基于SOA或微服务参考架构,但是实际上由于企业本身的IT能力和水平往往也无法验证,而对于软件厂商来说一定希望是卖现有产品,减少改造和定制实现利润的最大化 。

推荐阅读