粉丝关系链,10亿数据,如何设计?
方法一:服务同步冗余 顾名思义,由好友中心服务同步写冗余数据,如上图1-4流程:
优点:
缺点:
如果系统对处理时间比较敏感,引出常用的第二种方案。 方法二:服务异步冗余 数据的双写并不再由好友中心服务来完成,服务层异步发出一个消息,通过消息总线发送给一个专门的数据复制服务来写入冗余数据,如上图1-6流程:
优点:
缺点:
如果想解除“数据冗余”对系统的耦合,引出常用的第三种方案。 方法三:线下异步冗余 数据的双写不再由好友中心服务来完成,而是由线下的一个服务或者任务来完成,如上图1-6流程:
优点:
缺点:
上述三种方案各有优缺点,可以结合实际情况选取。 数据冗余固然能够解决多对多关系的数据库水平切分问题,但又带来了新的问题,如何保证正表T1与反表T2的数据一致性呢? 从上面的讨论可以看到,不管哪种方案,因为两步操作不能保证原子性,总有出现数据不一致的可能,高吞吐分布式事务是业内尚未解决的难题,此时的架构优化方向:最终一致性。并不是完全保证数据的实时一致,而是尽早的发现不一致,并修复不一致。 最终一致性,是高吞吐互联网业务一致性的常用实践。更具体的,保证数据最终一致性的常见方案有三种。 方法一:线下扫面正反冗余表全部数据 如上图所示,线下启动一个离线的扫描工具,不停的比对正表T1和反表T2,如果发现数据不一致,就进行补偿修复。 优点:
缺点:
有没有只扫描“可能存在不一致可能性”的数据,而不是每次扫描全部数据,以提高效率的优化方法呢? 方法二:线下扫描增量数据 每次只扫描增量的日志数据,就能够极大提高效率,缩短数据不一致的时间窗口,如上图1-4流程所示:
当然,我们还是需要一个离线的扫描工具,不停的比对日志log1和日志log2,如果发现数据不一致,就进行补偿修复 优点:
缺点:
有没有实时检测一致性并进行修复的方法呢? (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |