什么是微服务,如何构建微服务( 四 )


方式1:引入的外部开发商进行微服务架构化如果一个企业本身IT部门规模小,软件以外购为主,那么势必在对ERP等各类软件的选型评估后引入不同的软件产品提供商或软件开发商 。那么软件商本身都有了成熟的产品或架构,其产品内部的模块是否符合组件化和微服务架构的要求,我们不得而知 。即使招标要求写明软件提供商提供产品需要基于SOA或微服务参考架构,但是实际上由于企业本身的IT能力和水平往往也无法验证,而对于软件厂商来说一定希望是卖现有产品,减少改造和定制实现利润的最大化 。
对于软件开发厂商来说对已有的软件产品是没有微服务架构改造的动力的 。那在这种情况下要推动微服务架构实施落地必须的就是企业本身有很强的架构管控能力和甲方话语权 。在曾经实施的案例里面可以看到,甲方在有较强的IT规划和架构设计能力情况下,才可能一开始就划分好微服务模块并且设计好微服务模块间的接口,在进行招标和选型 。
同时甲方话语权强的情况下,可以完全要求软件供应商按照自己定义好的标准,规范,架构进行微服务模块的开发 。简单点来说顶层架构分解和接口设计能力不在单个微服务模块开发商手里面,而是在甲方手里,或者在甲方请的专门负责规划架构设计的技术咨询团队手里 。在这种模式下,技术咨询团队应该对整体模块划分和后续集成负责,技术咨询团队就需要有业务和技术两方面的能力,同时有类似领域的规划设计经验,系统开发建设经验等 。
这些本身就对技术咨询团队提出了相当高的要求,可以来讲很少有技术咨询团队达到这个水平,包括埃森哲或德勤等也难 。在微服务架构下,我们希望的是一个业务系统如果由三个微服务模块组成,在我们进行了前期的架构和接口设计后,我们完全可以将三个模块发标给不同的软件开发商建设和实施,然后在根据预先定义的服务接口进行集成 。
这个从理论上是行得通的,但是实际上出现两个问题 。其一是刚开始的模块划分或接口设计不合理,在后面开发过程中才发现又很难再大变更 。其二是微服务模块间的接口服务太多,导致了模块间的集成和联调异常复杂 。从上面也看到引入微服务架构后,企业本身可以削弱单个软件供应商对企业本身的约束,防止被单一厂商绑定 。因此企业没有特色要求,从软件厂商来说没有任何动力和意愿推微服务架构 。
方式2:企业自由开发团队实践微服务架构如果企业本身的IT成熟度没有达到一定阶段,显然是不可能推行实施微服务架构的 。这个道理前面已经谈到过,在企业IT建设中,如果连粗粒度的业务系统以及它们之间的集成都管理不好,那么更没有能力管理细粒度的微服务模块 。那么如果企业IT成熟度达到一定水平,在推广微服务架构还存在的难点如下:首先是架构设计能力的显性化,即架构设计这个工作的输入,输出和过程需要更加的显性化出来形成团队都认同的标准工件 。
一个业务系统没有拆分开时候,虽然有架构设计和组件划分,但是这个工作是属于团队内部的事情,即使架构设计不合理,在后期集成也可以通过诸多变通方式解决掉 。而现在是不同的微服务模块可能分派到两个独立的团队开发,原来属于自己内部黑盒的问题变为团队间问题 。简单来说你原来藏着或没做规范的东西太多,而现在这些不能再藏着掖着了,当真要把这些东西拿出来的时候,你才会发现你原来架构能力是有欠缺的 。
正如我们理解了一个东西,那么要让我们清楚的讲出来困难,那么我们的理解有欠缺 。对于我们能讲清楚的东西,要系统的写下来有困难,那么说明我们讲的结构和条理有欠缺 。其次管控要求和规范体系的建立,对于管控要求可以看到如果两个微服务模块分给同一个团队开发,如何才能保证开发的团队保持两个模块的完全独立和解耦,两个模块间不会出现相互交叉的数据库直接调用,也不会存在直接绕开Service接口的其它耦合调用?这些如果没有完整的管控和检查体系我们很难约束 。

推荐阅读