我们在Restlet框架上构建了一个基于REST的应用程序,它支持CRUD操作。它使用本地文件来存储数据。
现在要求将此应用程序部署在多个VM上,并且一个VM中的任何更新操作都需要传播在其他VM上运行的其他应用程序实例。
我们解决这个问题的想法是在给定VM中发生更新操作时发送多个POST消息(对所有其他应用程序)。 这里假设每个应用程序都有一个所有其他应用程序的列表/ URL。
有没有更好的方法来解决这个问题?
答案 0 :(得分:5)
Consistency是一个很深层次的主题,还有一个hard thing to get right。当同一数据发生两个几乎同时发生的变化时会出现问题:冲突的更新可以在一个服务器上以一个顺序到达,在另一个服务器上以另一个顺序到达。这是一个问题,因为两个服务器不再同意数据是什么,并且不清楚谁是“正确的”。
短篇小说:获取您最喜欢的RDBMS(例如,mysql很受欢迎)并让您的应用服务器连接到所谓的three-tier model。请务必在transactions中执行复杂的更新,这将提供可接受的一致性模型。
长篇大论:三层模型适用于中小型网站/服务。您最终会发现单个数据库成为瓶颈。对于读取流量远大于写入流量的服务,常见的优化是创建单主机,多从机数据库复制安排,其中所有写入都发送到单主机(与非分布式事务一致所需),但更常见的读取可以发送到任何读取从属。
对于具有均匀混合的读/写流量的服务,可以通过删除正式SQL提供的一些便利(以及附带的限制)来改善服务,而是使用最近的各种“nosql”数据存储之一出现了。他们对各种问题的相对优点和适应性本身就是一个深刻的话题。
答案 1 :(得分:1)
我现在可以看到7个主要选项。您应该了解更多详细信息,并确定设施/权衡是否适合您的目的