统一数据同步解决方案

每天进步一点点!

前段时间一个项目需要做数据同步,考虑到数据同步功能在很多地方都会涉及到,所以将功能提炼出来,做成统一的组件,供公司所有的项目使用,在此将实现方案记录下来,希望对其他人有用。

背景:

   背景是这样的,互联网公司,做社区O2O产品的,目前需要做一套停车收费系统以及道闸控制系统,我们的产品中心数据肯定放在云端,处理缴费充值等业务;但停车收费系统在部署到物业公司小区,这就涉及到需要将云端的数据同步到局域网的服务器,同时也会涉及到局域网产生的数据同步到云端;而且局域网有可能是联网的,也可能是未联网的。

术语:

生产者:通常只有一个,我这里指云端的系统

消费者:N个,我这里指局域网端系统

用到的技术:

Hangfire、Mongodb、Signalr。

Hangfire,处理生产者或者消费者同步数据任务调度,主要是保证同步任务队列处理、错误重试、同步任务持久化(先持久化任务,再执行任务,执行成功后再删除任务)

Mongodb,这里其他没有用到Mongodb的什么技术,只是做为Hangfire处理任务的存储介质

Signalr,负责建立生产者与消费者之前的连接管理,注意需要处理断开重连。

具体解决方案:

架构涉及图:

同步数据任务实体设计

方案核心地方说明:

同步数据可能是数据库数据或者图片等,用不同类型来区分,不同的类型处理方式不一致,如果是同步数据库数据,这里是一条完整的Sql命令,Key需要保证唯一,并携带同步需要的一些数据。

注意架构图中几个标有“组件Dll”的地方,这是独立于其他系统的Dll,生产者或者消费者只需要引用。

同步数据可能在线,也可能离线,同步数据的时候,默认两种方式都支持,但允许调用方自己做决定,离线同步时,需要用导入数据组件手动导入。

Hangfire处理同步任务调度,具体技术请参考官网,反正意思是能够保证同步任务被执行,并提供面板监控同步任务执行情况。Hangfire任务存储生产者端采用Mongodb(Redis更好,但要收费,只能用Mongodb了),消费者端一般就直接用Sql了。

通信服务生产者(组件Dll),主要用Signalr建立同步数据服务,当然,你也可以自己建立通信服务;同时,生产者同步数据错误或者消费者同步数据出错,都由此服务进行存储,出错的时候,调用短信或者邮件通知管理员。出错文件存储目录结构如下:生产者->分组->消费者Key->日期->小时,消费者->分组->消费者Key->日期->小时。

注意有个分组的概念,熟悉Signalr的应该都知道,这里一般配置一条数据同步给哪些具体的消费者,那把这些消费者都加入到你设定的一个组。

消费者很有可能需要接受多个生产者,那么,需要注册到多个生产者服务,这里的Signalr注册服务可能就是一有List。

     同步数据任务到达消费都或者生产者后,需要通知接收方,一般公开一个事件,让接收方监听,监听到之后,处理业务数据(执行Sql语句,将数据写入数据库也可以封装为一个组件)

注意,Signalr和Hangfire都需要用到Owin,需要加到一个注册启动项中。

主要提供同步数据的解决方案思路,这里代码就不贴出来了,有问题欢迎咨询。

时间: 2024-10-08 20:50:45

统一数据同步解决方案的相关文章

转载:MySQL和Redis 数据同步解决方案整理

from: http://blog.csdn.net/langzi7758521/article/details/52611910 最近在做一个Redis箱格信息数据同步到数据库Mysql的功能. 自己想了想,也有大概方案. 1.队列同步,变跟数据2份,使用消息队列,一份给Redis消费,一份给Mysql消费. 2.后台定时任务,定时刷新Redis中箱格信息到数据库. 网上也到处找了下解决方案,发现这么个问题,居然是天下一大抄,还抄的一字不差,我也抄吧. 方案一: 读: 读redis->没有,读

两台SQL Server数据同步解决方案

复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性. SQL复制的基本元素包括 出版服务器.订阅服务器.分发服务器.出版物.文章 SQL复制的工作原理 SQL SERVER 主要采用出版物.订阅的方式来处理复制.源数据所在的服务器是出版服务器,负责发表数据.

[db2数据库数据同步解决方案]DB2数据库数据同步更新方法及设备与流程

技术总结 本发明实施例提供了DB2数据库数据同步更新方法及设备.所述方法包括:根据待同步更新表创建数据详细地址存储列,对待同步更新表上S锁,获取源端DB2数据库当前的日志序列号LSN作为待同步更新表的起始LSN,释放S锁:获取待同步更新表的结果集,将结果集发送至目标端数据库入库,获取源端DB2数据库当前LSN作为待同步更新表的结束LSN:接收源端同步更新服务发送的初始化数据,在目标端数据库将ROWID插入数据详细地址存储列,初始化待同步更新表的数据:启动数据实时同步更新服务,将源端DB2数据库的

[db2数据库数据同步解决方案]db2数据库同步

db2look-dpayment-a-e-x-0cre_stp.sql db2-tvfcre_stp.sql db2look-i指定用户-w指定密码 2 db2move导出数据文件 db2moveexport db2move导出数据 db2moveimport truncatetable删除表中的所有行 要将数据倒入一个指定的schema的中需要修改 导入数据文件中的db2move.lst文件将里面的shema该改为需要导入数据的shema 3 导出一个指定schema的数据 db2moveoc

DKH大数据整体解决方案的优势介绍

大数据技术的发展与应用已经在深刻地改变和影响我们的日常生活与工作,可以预见的是在大数据提升为国家战略层面后,未来的几年里大数据技术将会被更多的行业应用.相信很多人对于大数据技术的应用还是处于一个非常陌生的阶段,可能在很多地方听说过大数据,但具体应用在哪方面可能就并不清楚了.举个最简单的的例子,前段时间新闻报道说警方在某明星的演唱会上抓捕了一名在逃嫌犯,而这名嫌犯是在进入现场时被监控识别出来的.这种就是大数据技术的一种具体的应用表现.这个案例可能不是很贴切,但应该很好理解了吧!企业对大数据技术的需

多台服务器之间如何让sqlserver,mysql数据库进行数据同步?

服务器存储视频,带宽不够用,想用多台服务器,如何让所有服务器之间视频实时同步,可以用什么软件!当企业租用服务器,但是在数据同步的时候,又有着严格的要求,要求数据达到一致,在科技发达的今天,这又该如何做到了?下面天下数据为大家介绍多台服务器之间让数据同步的方法! 1.采用高可用sureHA软件镜像型,一台主服务器,一台备服务器,通过心跳线(网线)实时将数据备份,实现服务器双机互备的功能,此方式保证多台服务器之间数据的一致性. 2.采用高可用sureHA双机热备共享型.一台主服务器,一台备服务器,链

一张图看懂混合云数据同步一站式解决方案

摘要: 针对不同数据库间数据实时同步难的问题,日前,阿里云宣布推出混合云数据同步一站式解决方案,便于广大云产品用户实现实时数据同步的混合云支持,更为方便的是,该功能让本地Oracle也能实现与云上数据库的实时同步. 针对不同数据库间数据实时同步难的问题,日前,阿里云宣布推出混合云数据同步一站式解决方案,便于广大云产品用户实现实时数据同步的混合云支持,更为方便的是,该功能让本地Oracle也能实现与云上数据库的实时同步. 通过一张图来了解一下 原文链接 原文地址:http://blog.51cto

Redis数据存储解决方案

1.背景1.1 Redis简介 官方网站:http://redis.io/,Redis是REmote DIctionary Server的缩写. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.它跟 memcached 类似,不过数据可以持久化,而且支持的数据类型很丰富.它在保持键值数据库简单快捷特点的同时,又吸收了部分关系数据库的优点.从而

线程安全、数据同步之synchronized与Lock

线程安全.数据同步之synchronized与Lock 技术交流1群:46523908 技术交流2群:46505645 NoHttp 源码及Demo托管在Github欢迎大家Star:https://github.com/Y0LANDA/NoHttp NoHttp是专门做Android网络请求与下载的框架. 本文Demo下载传送门 写在前面 本篇文章讲的东西都是Android开源网络框架NoHttp的核心点,当然线程.多线程.数据安全这是Java中就有的,为了运行快我们用一个Java项目来讲解.