我正在寻找适合以下要求的协议或标准:
我研究了几个小时,遇到了一个问题,因为发现了许多复杂的解决方案,例如Paxos和Raft,它们需要网络基础结构。
因此,我想展示我的主张,并立即询问是否存在类似的情况并且可以在这种情况下使用。关于我的概念问题的任何反馈将不胜感激。
我们有许多客户端可以与网络断开连接,对本地数据进行操作,并且想要发送其更改,接收其他客户端所做的更改。
我们只有一个数据存储区,例如AWS / Dropbox / Google Drive /托管文件,这很重要,重要的是,不能访问casandra这样的高级功能强大的工具。有两个文件:当前数据-可以序列化JSON或SQLite文件,并记录为具有按时间戳排序的所有操作历史的文件。
我们只有一点可以访问此数据。无服务器单元具有以下任务:从客户端接收本地日志,将其与全局日志合并,对其进行处理以更新全局当前数据,向客户端发送有关hi应该应用的本地修改的指令。
让我们考虑以下情形。客户端修改本地数据并将任何修改添加到本地日志中。
同步手段。那
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
时,系统将停止同步并需要手动修复。
2009年的相关主题。
但是由于CVS was replaced by SVN, SVN by GIT,我是否应该考虑使用GIT这样进行同步?在wikipedia上,版本控制系统被认为是“需要大量开销”。
考虑blockchain and chain of blocks之间的差异,我知道不能在此处应用区块链。