随着微服务架构的落地,人们发现微服务架构虽然改进了开发模式,但同时也引入了一些问题,在这所有的问题中,最重要的也是马上要面临的一个问题就是数据的问题。在微服务架构中我们强调彻底的组件化和服务化,每个微服务都可以独立的部署和投产,其实也就意味着很多的微服务有自己独立的数据库。

 

整个业务数据被分散在各个子服务之后会带来两个最明显的问题:1、业务管理系统对数据完整的查询,比如分页查询、多条件查询等,数据被割裂后如何来整合?2、如何对数据进一步的分析挖掘?这些需求可能需要分析全量的数据,并且在分析时不能影响到当前业务。

 

从技术方案来讲,我们一般有两种选择来处理这些问题,第一种是在线处理数据,第二种是离线处理数据。

 

在线处理数据的方案就是按照微服务的标准接口来进行,后端需要哪个系统的数据就去调用某个微服务提供的接口来获取。后端管理平台根据前端的需求去不同的微服务系统去获取数据,然后将返回的数据进行处理后将数据返回。这种方案有两个弊端:1)一方面微服务数据方需要提供数据接口,一方面数据的使用者需要去写调用方法,并且调用者需要编写大量的代码进行数据处理;2)在对各个微服务进行调取数据时会影响微服务的正常业务处理性能。

 

离线处理数据方案,就是将业务数据准实时的同步到另外一个数据库中,在同步的过程中进行数据整合处理,以满足业务方对数据的需求,数据同步过来后,再提供另外一个服务接口专业负责对外输出数据信息。这种方案有两个特点:1)数据同步方案是关键,技术选型有很多,如何选择切合公司业务的技术方案;2)离线数据处理对微服务正常业务处理没有影响。

在条件允许数据实时性要求不高的情况下多用方案二,方案一是最容易想到的常规方法。

很多事情就像生孩子,听别人说的痛和不易跟自己亲身经历过的感觉完全不同,后者让你印象更深,成长更大。