开发指南140-跨服务数据范围限定
微服务架构有个重要特点,数据库是分离。这样跨数据库的数据范围限定就是个问题。举个例子,绩效考核服务对应绩效考核数据库,该数据库和人员核心库是分离的。这样的场景就是跨数据库的数据范围限定问题:列出某个部门的人员绩效考核结果。
这样的问题有如下几种解决方案,在不同场景下选择不同方案来处理。
1、冗余数据法。
把需要的数据存到自己的服务里一份,访问时访问自己的数据。例如上述问题,可以在绩效库存一份部门和人员的对照关系。
这种方法有个数据同步的问题,所以一般只冗余存储不变的东西。如存储人员ID的时候也存储下人员姓名。这样无需翻译id时再调用核心库。
2、前端组合法。
前端首先调用核心人员服务,通过部门id获取部门下人员id,然后把id以参数形式传递给绩效考核服务,从而获取对应结果。
这种方法需要前端做比较多工作,但是可以减少后台服务的耦合性。
3、后台组合法。
这种方法前端只访问绩效考核服务。绩效考核服务需要通过feign调用自行找到人员范围,然后再组合查询结果数据。
这种方法封装了后台逻辑,前端无需知道太多后台存储细节,缺点是增加了服务之间的偶合性。
4、跨双库服务法。
让对应微服务同时链接两个微服务。
具体方法可见《开发指南058-JPA多数据源》
以上方法各有优缺点,要根据具体场景具体解决。
