对象数组的简单同步协议

时间:2019-01-27 04:13:16

标签: git svn synchronization blockchain data-synchronization

我正在寻找适合以下要求的协议或标准:

  • 有一系列对象可以用JSON表示为文本。
  • 我们有一个或多个真理存储为文件。 (可能很多,但我想找简单)
  • 有许多受信任的客户端,它们对这些数据执行CRUD操作。
  • 一种服务器(可以通过无服务器架构实现,因为只有在客户端需要时才需要它),可以根据来自客户端的请求修改这些平面文件或为它们提供最新版本的资源。

我研究了几个小时,遇到了一个问题,因为发现了许多复杂的解决方案,例如Paxos和Raft,它们需要网络基础结构。

我的主张

因此,我想展示我的主张,并立即询问是否存在类似的情况并且可以在这种情况下使用。关于我的概念问题的任何反馈将不胜感激。

建筑。

客户

我们有许多客户端可以与网络断开连接,对本地数据进行操作,并且想要发送其更改,接收其他客户端所做的更改。

数据存储

我们只有一个数据存储区,例如AWS / Dropbox / Google Drive /托管文件,这很重要,重要的是,不能访问casandra这样的高级功能强大的工具。有两个文件:当前数据-可以序列化JSON或SQLite文件,并记录为具有按时间戳排序的所有操作历史的文件。

访问点

我们只有一点可以访问此数据。无服务器单元具有以下任务:从客户端接收本地日志,将其与全局日志合并,对其进行处理以更新全局当前数据,向客户端发送有关hi应该应用的本地修改的指令。

enter image description here

处理

让我们考虑以下情形。客户端修改本地数据并将任何修改添加到本地日志中。

同步手段。那 1)客户端正在将本地日志发送到访问点(服务器)。服务器创建空的.lock文件,以防止其他访问点进行修改。如果文件以前存在,则同步被拒绝。服务器查找本地日志中保存的最后一次同步的日期。然后从存储中下载日志,并获取从上次同步日期到现在的任何行。服务器混合它们,并计算两件事:a)如何更新全局当前数据,b)如何更新此客户端的本地当前数据。然后服务器下载全局数据,进行修改。发送本地修改指令给客户端。并删除.lock文件。客户端应用修改来修改本地状态,删除本地日志并将最后一次同步的日期保存到其中。

例外/合并

现在两个客户端删除了同一项目的图像。应该删除它。 Id是随机的,因此两个客户端不能使用相同的Id创建两个元素。如果无论如何将被创建,则第二个有效,并且其创建将更改为更新。如果两个客户更新相同的资源,那么我们应该看看他的结构。我提到了JSON表示形式。因此,它是键和值的集合。应采用以下策略:

First version         {a:1, b:2, c:3}
Update form client 1: {a:4, b:2, c:3}
Update from client 2: {a:1, b:5, c:3}
Merged version        {a:4, b:5, c:3}

因为最后修改日期是针对任何属性独立计算的。

在处理异常期间停止服务器并且不会删除.lock时,系统将停止同步并需要手动修复。

我的问题:

  • 在哪里可以找到与提出的解决方案相似的开源解决方案?
  • 我应该学习什么协议,标准吗?
  • 要在Google / Duckduck中键入什么才能找到它?

2009年的相关主题。

  

Client-server synchronization pattern / algorithm?

  • 有svn,推荐cvs

但是由于CVS was replaced by SVN, SVN by GIT,我是否应该考虑使用GIT这样进行同步?在wikipedia上,版本控制系统被认为是“需要大量开销”。

考虑blockchain and chain of blocks之间的差异,我知道不能在此处应用区块链。

0 个答案:

没有答案