微服务之间如何进行数据共享

2021-11-17 16:29:00 浏览数 (1)

本文主要讲解关于微服务之间的数据共享,一共有四种方式,下面会做具体的分析。

静态表

有些静态数据库表,比如国家,可能会被很多程序使用,而且程序内部需要对国家表进行连接(join),以生成最终用户显示的数据,这样用微服务调用的方式效率不高,影响性能。一种方法是在每一项微服务中配置一个这样的表格,它只读,这样就可以进行数据库连接。您必须确保数据同步。大多数情况下,这种方案都是可接受的,因为有以下两点:

(1)静态数据库表结构基本不变:因为一旦表结构发生变化,您不仅需要更改所有微服务的数据库表,还需要修改所有微服务的程序。

(2)数据库表中的数据变化不频繁:因此数据同步工作量不大。此外,当您同步数据库时,总是会有延迟,如果数据变化不频繁,您可以选择许多同步方法。

只读业务数据访问

若您需要阅读其他数据库中的动态业务数据,理想的方法是服务调用。假如您只是调用其他微服务进行一些计算,性能通常是可以接受的。若您需要连接数据,则您可以使用程序代码而非SQL语句。若测试后性能不能满足要求,则可考虑在自己的数据库中建立一个只读数据表。大致有两种数据同步方式。若为事件驱动,则以发送信息的方式进行同步,若为RPC方式,则使用数据库本身或第三方同步软件。

存在两个问题:

(1)数据容量:数据库中的数据量是影响性能的主要因素。因为这个数据是外来的,不利于掌握它的流量规律,所以很难规划容量,也不能更好的

(2)界面泄露:微服务之间的界面只有服务调用界面,可以在不影响其他服务的情况下对内部程序和数据库进行任何变更。现在数据库表结构已经成为界面的一部分。界面一旦发布,基本无法更改,极大地限制了你的灵活性。幸运的是,另一套手表已经建成并有缓冲。当主手表修改时,从手表可能不需要同步更新。

阅读和阅读业务数据访问

这是最复杂的情况。一般情况下,你有一个表是主表,其他表是从表。主表包含主要信息,这些主要信息复制到从表,但是微服务会有额外的字段需要写到从表。这样本地微服务就可以既读又写了。而且主表和从表有顺序的关系。从表的主键来自主表,所以必须先有主表,再有从表。如图14-1。

直接访问其他数据库

这种方法是绝对禁止的。生产环境中的许多程序错误和性能问题都是通过这种方式产生的。以上三种方法都是新建的本地只读数据库表,导致数据库的物理隔离,这样数据库的性能问题不会影响另一种。此外,当主库中的表格结构发生变化时,您可以暂时保持从库中的表格不变,这样程序就可以运行。如果直接访问他人的库,主库一旦修改,其他微服务程序将立即报错。

0 人点赞