问题标签 [eventual-consistency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
couchdb - 最终一致性
我正处于设计必须具有高可用性和可扩展性的应用程序的早期阶段。出于多种原因,我想为此使用最终一致性数据模型。我知道并理解为什么对于许多解决方案来说这是一个不受欢迎的架构选择,但在我的情况下它很重要。
我正在寻找现实世界的建议、最佳实践和在处理分布式/文档式数据库时要注意的问题。尤其是围绕电子商务(购物车风格)应用程序的领域,这些应用程序传统上更容易与关系数据库组合在一起。
我知道使用这些类型的数据库具有挑战性,但是,嘿,谷歌和 E-bay 使用它们,所以它们不会那么难;-) 任何建议都将不胜感激。
erlang - 最终与 erlang 保持一致的 mnesia 数据库。最佳实践有人吗?
我正在用erlang写一个bittorrent跟踪器。鉴于服务的性质,我不需要绝对的一致性(即,客户端可以对稍微过时的对等列表或洪流状态非常满意)。
到目前为止,我的策略是在启用 disc_copies 的 RAM 中创建 mnesia 表,以便在日志大小超过一定大小时让 mnesia 自动将内存转储到磁盘。
如果服务器崩溃,一些信息将会丢失。没有大碍。
另一种方法是实例化两个表(仅一个内存和一个磁盘),并每分钟左右将进程从内存复制到磁盘。这更天真,但允许仅转储内存中的一部分内容,从而减少整体磁盘开销并可能完全避免使用日志(我实际上不确定最后一条语句)。
我相信还有很多其他方法可以做到这一点。你的是啥呢?
-teo
unit-testing - 我应该如何处理 SimpleDB 中的最终一致性,尤其是在单元测试方面?
我们正在亚马逊网络服务堆栈之上构建一个网络应用程序,到目前为止我很喜欢它。
我们还充分利用了测试驱动开发,这也被证明是非常棒的。
我只是希望有人可以帮助我解决我遇到的与 Amazon SimpleDB 的“最终一致性”相关的问题。
出现问题的最佳示例是在添加用户的单元测试中,然后通过调用获取新添加的用户来检查用户是否已成功添加。
我可以轻松地继续为此编写测试,并且一切都可以正常工作,但是我知道“最终一致性”以及当我调用获取用户时,用户实际上可能不是还添加了。显然如果调用了 fetch user 函数并且用户不在系统中,它会返回 false 或失败。
我想知道处理这个问题的最佳方法是什么?我已经看到了制作一个在请求之间休眠 5 秒并尝试 10 次的函数的建议。我还看到了具有指数退避的解决方案。最佳解决方案是什么?
validation - 如何在 CQRS 中处理基于集合的一致性验证?
我有一个相当简单的域模型,涉及Facility
聚合根列表。鉴于我使用 CQRS 和事件总线来处理从域引发的事件,您如何处理集合验证?例如,假设我有以下要求:
Facility
's 必须有一个唯一的名称。
由于我在查询端使用最终一致的数据库,因此不能保证其中的数据在事件处理器处理事件时是准确的。
例如,aFacilityCreatedEvent
在查询数据库事件处理队列中等待处理并写入数据库。一个新CreateFacilityCommand
的被发送到要处理的域。域服务查询读取数据库以查看是否有任何其他Facility
' 已使用该名称注册,但返回 false 因为CreateNewFacilityEvent
尚未处理并写入存储。newCreateFacilityCommand
现在将成功并抛出另一个FacilityCreatedEvent
,当事件处理器尝试将其写入数据库并发现另一个Facility
已使用该名称存在时,它会爆炸。
cqrs - CQRS - 最终一致性
我有以下需要按照 CQRS 模式实现的场景:
- 用户登录
- 用户输入一些保险细节
- 用户要求做出决定
- 用户查看决策结果
这看起来相当简单,但是我的问题在第 3 步和第 4 步之间,在第 3 步中,我发送了一个ApplyForDecision
命令,该命令将从承保服务处获得决定,然后将具有该决定结果的事件发送到 BUS 以供读取存储稍后使用它并使用决策结果更新视图表。
问题出在 UI 上,我如何让用户知道正在应用该决定,因为在 CQRS 中,读取模型没有“直接”更新我如何让 UI 显示一个决定正在进行中并且“很快” ' 到达?
我还需要让用户能够注销并重新登录,因为该决定可能尚未应用,如何让 UI 显示“待决决定屏幕”?
architecture - 关于非 ACID(分布式)系统的精彩文章/视频/...?(“最终一致”等)
我将从这些 - IMO 精彩 - 文章开始:
- 碱:酸替代品- Dan Pritchett (eBay), 2008
- 最终一致(-重新访问) -Werner Vogels(亚马逊),2008
- Brewer 猜想和一致的、可用的、分区容错的 Web 服务(非免费)的可行性 - 作者:Seth Gilbert,Nancy Lnych(麻省理工学院),2002
我对更多关于分布式系统的文章感兴趣,其中 ACID 无法再提供必要的可扩展性/可用性(甚至,ACID 在极端情况下仍然可以提供)。
文章应该侧重于实用方面(尽管我喜欢数学)。
我发现特别有趣的一件事:哪些经验法则/设计模式/ ...可以从非 ACID 架构派生?
architecture - ATM 机的数据系统是否使用最终一致性?
我很清楚全球ATM 系统是如何构建的。银行在全球范围内设计一个一致的系统一定非常困难。他们为此使用最终一致性还是使用了出色的 ACID 系统?
有一天我可以在我的银行所在的瑞典使用自动取款机,然后乘飞机前往美国或泰国,几个小时后在国外使用自动取款机。如果系统是一致的,那么他们需要与世界任何地方的非常可靠的连接。
database - Cassandra中最终一致性的含义?
当单个集群中的节点不包含相同数据的副本但数据分布在节点之间时,Cassandra 中的最终一致性是什么意思。现在,因为单个数据被记录在一个地方(节点)。为什么 Cassandra 不从那个单一的记录位置返回最近的值?在这种情况下如何出现多个副本?
c# - 任何人都知道在使用最终一致的数据更新时保持用户界面一致的好模式
场景是一个包含联系人列表的网格。用户点击网格中的“发送电子邮件”,发送一封电子邮件。我们将消息放入队列以更新一些聚合(也显示在列表中)。
问题是在发送电子邮件后,不能保证更新聚合。
我们可以使用 javascript 更新计数,但是如果他们刷新页面并且聚合尚未完成怎么办?