1.3.2 多语言生态
微服务独立之后,给了对应的团队和组织快速迭代和交付的能力,同时,也给团队和组织带来了更多的灵活性,实际上,对应交付不同微服务的团队或者组织来说,现在可以基于不同的计算机语言生态构建这些微服务,如图1-2所示。
微服务的提供者既可以使用Java或者Go等静态语言完成微服务的开发和交付,也可以使用Python或者Ruby等动态语言完成微服务的开发和交付,对于团队内部拥有繁荣且有差异的语言文化来说,多语言生态下的微服务开发和交付将可以最大化的发挥团队和组织内部各成员的优势。当然,对于多语言生态下的微服务研发来说,有一点需要注意:为了让服务的访问者可以用统一的接口访问所有这些用不同语言开发和交互的微服务,应该尽量统一微服务的服务接口和协议。
在微服务的生态下,互通性应该是需要重点关注的因素,没有互通,不但服务的访问者和用户无法很好地使用这些微服务,微服务和微服务之间也无法相互信赖和互助,这将大大损耗微服务研发体系带来的诸多好处,而多语言生态也会变成一种障碍和负累,而不是益处。
记得时任黑猫宅急便社长的小仓昌男在其所著的《黑猫宅急便的经营学》中提到一个故事,日本国铁曾经采用不同于国际标准的集装箱和铁路规格,然后发现货物的运输效率很低,经过考察发现,原来是货物从国际标准集装箱卸载之后,在通过日本国铁运输之前,需要先拆箱,重新装入日本国铁规格的集装箱,然后装载到日本国铁上进行运输。但是,如果日本国铁采用国际标准的集装箱规格,那么货物集装箱从远洋轮船上卸载之后就可以直接装上国铁,这将大大加快运输效率(日本,国铁改革后也证明确实如此)。日本国铁在前期采用私有方案时,只关注了自己的利益和效率,舍弃了互通,也带来了效率的低下。所以,在开发和交付微服务的时候,尤其是在多语言生态下开发和交付微服务,我们从一开始就要将互通性作为首要考虑因素,从而不会因为执迷于某些服务或者系统的单点效率而失去了整个微服务体系的整体效率。
图1-2 多语言的微服务生态