zoukankan      html  css  js  c++  java
  • 数据同步功能梳理

    在分布式的环境中,数据同步是一个经常会碰到的问题,在内网中可以通过数据库发布订阅或Always On实现主从复制 ,读写分离。但是在.net平台中没有现成的跨网夸机房的数据同步方案。数据同步是一个复杂的过程,特别是涉及到双向同步,要保证同步的数据一致性、同步的高可用性,是需要良好设计和仔细权衡的一个事情。

    一个良好的同步框架必须保证数据的正确同步,同时异常重试、异常监控通知、同步状态反馈等都是需要考虑的方面,以下是关于同步功能的简单梳理和基于CDC单向同步的同步流程梳理。通过变通的方式可以将单向同步扩展为双向同步(不考虑同表同字段双向同步,实际在业务设计时可以规避相同字段的双向同步问题)。

    同步功能点梳理:

     中心直接调用子节点服务的方式,中心为执行调度方,子节点只负责接收任务执行同步并反馈执行结果。

     异步方式处理同步,中心分解同步任务,传递同步任务,子节点拉取任务,执行同步,推送同步状态,中心轮询同步状态,对同步成功的任务进行后续移除记录等操作。采用异步的方式会增加数据同步程序的复杂程度,但是系统的吞吐量会有一定程度的增加。在同步各个节点之间可以加入消息队列,通过队列对同步任务,同步状态反馈进行统一分发。隔离各个节点之间的强关联。

    后话:

    针对同一张表的同步操作出现异常时,同一个子库相同表的同步操作会挂起,异常任务会不断重试,阻塞后续同步任务,但不同表,不同库之间不受影响。在同步任务不是幂等操作的情况下,阻塞是唯一能保证数据一致性的方式。实际的情况中,抛开断网,程序崩溃的特殊情况,实际通过健壮测试和有序发布的系统,是基本可以规避同步问题出现的。

    本文为作者原创,转载请注明出处。

  • 相关阅读:
    Core Animation笔记(变换)
    Core Animation笔记(- Layer 基本属性)
    使用AndroidStudio编写APICloud模块需要注意的地方,解决模块未定义。
    MAC中使用APICloud同步代码错误解决办法
    【深入理解Java虚拟机 】类加载器的命名空间以及类的卸载
    【深入理解Java虚拟机 】类的加载器
    【深入理解Java虚拟机】类的初始化过程
    Netty中ByteBuf的引用计数线程安全的实现原理
    Java使用PipedStream管道流通信
    Java中的守护线程
  • 原文地址:https://www.cnblogs.com/WangHuaiSheng/p/7687931.html
Copyright © 2011-2022 走看看