问题描述:假设有A服务,A服务会去插入A_table,然后调用B服务,B服务会去查询A_table中的数据,这个时候就会出现问题,A_table最新数据没有找到。

    问题分析:典型的多版本并发控制问题,A服务更新A_table的时候会去开启事务,然后该事务是在调用B服务之后才关闭,而B服务在查询A_table的时候查的还是之前的数据,这里就存在事务版本问题,如果事务还没提交就能读取到反而有问题,因为存在幻读脏读的情况。
    MVCC(Mutil-Version Concurrency Control),就是多版本并发控制,原理概念可以自行百度资料,我这里先简单的做个比喻,就是将A服务开启事务的时候会在表上面拷贝一个快照,然后针对这个快照进行数据修改,而不是修改原表里面的数据,等事务提交时才去修改表里的数据。而刚好B服务读取的数据刚好就是原表里面的数据,而不是快照里面的数据自然就找不到最新数据。

    这个问题在微服务远程调用的时候容易出现,因为远程调用之后实际就不在一个事务中自然就会存在版本控制。(谨记)