首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分布式系统中的数据同步

分布式系统中的数据同步
EN

Stack Overflow用户
提问于 2011-09-08 11:54:04
回答 2查看 4.4K关注 0票数 4

我们有一个构建在Restlet框架上的基于REST的应用程序,它支持CRUD操作。它使用本地文件来存储数据。

现在,需要在多个VM上部署此应用程序,一个VM中的任何更新操作都需要传播到其他VM上运行的应用程序实例。

我们解决这个问题的想法是在给定的VM中发生更新操作时发送多个POST消息(发送到所有其他应用程序)。这里的假设是每个应用程序都有一个所有其他应用程序的列表/URL。

有没有更好的方法来解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2011-09-08 12:39:15

Consistency是一个很深的话题,也是一个hard thing to get right。当同一数据发生两次几乎同时的更改时,问题就来了:冲突的更新可能在一台服务器上以一种顺序到达,而在另一台服务器上以另一种顺序到达。这是一个问题,因为两个服务器不再就数据是什么达成一致,并且不清楚谁是“正确的”。

简而言之:获取您最喜欢的关系型数据库管理系统(例如,mysql很流行),并在所谓的three-tier model中连接您的应用程序服务器。请确保在transactions中执行复杂的更新,这将提供可接受的一致性模型。

长话短说:三层模型很好地服务于中小型网站/服务。您最终会发现单一数据库成为瓶颈。对于读取流量明显大于写入流量的服务,常见的优化方法是创建一个单主多从数据库复制安排,其中所有写入都将发送到单个主服务器(与非分布式事务保持一致所必需的),但更常见的读取操作可能会发送到任何读从服务器。

对于读/写流量均匀混合的服务,放弃一些正式SQL提供的便利(以及附带的限制),转而使用最近出现的各种"nosql“数据存储,可能会更好。它们的相对优点和对各种问题的适用性本身就是一个深层次的话题。

票数 7
EN

Stack Overflow用户

发布于 2015-02-17 13:40:26

我现在可以看到7个主要的选择。您应该了解更多细节,并决定设施/折衷是否适合您的目的

  1. 在普通的关系型数据库上执行CRUD操作。最简单和最多的consistent
  2. Perform在一个普通的关系型数据库上的CRUD操作,这运行在内存中的关系型数据库管理系统。例如,来自甲骨文等的TimesTen
  3. 在分布式缓存或您自己的自制分布式哈希表上执行CRUD,这可以保证同步例如Hazelcast/ehcache和其他
  4. 使用快速的公共状态服务器,如REDIS/memcached,并在其上以同步方式执行更新,并在需要时以惰性方式将成功的操作写出到数据库中。
  5. 分布您的REST服务器,以便单个实体上的CRUD操作仅由单个主服务器执行。一旦这样做了,关于更改的细节可以使用可靠的消息总线或分布式数据库(例如postgres)传达给其他所有人,这些数据库在底层运行,并以相当快的速度同步所有的更新。CRUD目标最终的一致性,并使用像Cassandra这样的分布式数据存储,它允许您分别使用target the consistency you require
  6. Use分布式共识算法(如Paxos或RAFT )或相同(推荐)的实现(如zookeeper或
  7. ),并在执行CRUD操作之前从每个REST服务器获取您想要更改的项目的所有权-尽管这可能会有点慢,但Cassandra可能会提供给您相同的东西。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7342945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档