在上文《异地多活架构梳理演变(九)异地双活》我们介绍了实施异地双活的部署方式来实现系统的高可用。但是这里其实有一个非常重大的问题,即:
1、如果A用户在成都机房登录了。并且A用户也在北京机房登录了。 2、用户9点41分20秒在北京机房新增了一条用户个人简介数据。 3、用户9点41分22秒在成都机房修改了刚才新增的个人简介数据。
此时我们会发现,可能9点41分20秒在北京机房产生的数据还没有同步到成都机房来,此时做了数据修改是不是产生了数据错误?
这种产生了数据错误对于系统的伤害是不是更大了。这是直接造成系统故障的非常非常重大的问题。
那么对于上诉的情况我们如何来处理呢?
其实这里一般的解决方案就是使用路由分片,也就是在dns层下直接假设一层路由层,把相同的用户全部路由到1个机房去,由此用户A登录的时候永远只会登录到1个机房,操作数据库也只会在一个机房。此时的部署示例图如下:
这时候的路由层面的话,我们可以通过一定的策略来进行分片,例如:
1、根据标识进行hash分片 2、根据标识进行地理位置分片 3、根据标识进行业务类型分片
反正不管是根据哪种分片,我们主要一定是针对用户来说的,目的是把同一个用户的所有操作导入到同一个机房去。
还没有评论,来说两句吧...