java - 我们如何实现可扩展的计算网格,并具有支持低延迟和一致性的大规模并发内存更新

标签 java apache-spark hadoop mapreduce ignite

我们正在利用 Apache Ignite 集群实现低延迟分布式计算系统。所有数据都存储在内存中。现在我们每秒支持大约 600 个分布式计算请求,延迟约为 50-200 毫秒。计算非常复杂并且涉及不同的缓存。我们还支持数据更新。

当数据在读取的同时更新时,我们遇到了可扩展性问题。我们的数据不是原子的(涉及多个缓存)。实际上所有的数据都被分成了段,我们通过集群来分布这些段。 在进行搜索计算时,每个节点都会扫描其所有本地段并找到结果。

当我们进行一次更新时,我们会影响存储该数据的单个段。

但问题是,在单个节点上的单个段更新期间,整个搜索计算被阻塞或重复,以支持整个结果的一致性。

我知道Hadoop限制这种情况并且不允许在HDFS中更新,只保存新版本。但我们的情况并非如此,因为收集不同版本的数据需要大量内存并会导致重复。

是否有任何架构技术可以通过此类更新来支持可扩展性?

我们尝试通过重复来实现乐观交易,但计算经常重复。 READ_COMMITED 级别破坏了一致性。 REPEATABLE_READ 正在阻塞。

最佳答案

我认为您可以采用一个事务 block (一个段?),通过删除重复项并连接对相同键进行操作以进行单个操作来优化它,然后以事务方式运行其余部分。

关于java - 我们如何实现可扩展的计算网格,并具有支持低延迟和一致性的大规模并发内存更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464140/

相关文章:

java - 删除某些空白

java - 如果我的大部分 Activity 方法都是私有(private)的,如何在 Android 中实践 TDD?

scala - Spark /斯卡拉: Split row into several rows based on value change in current row

hadoop - MapReduce:将 Reducer 的结果分组为固定大小的 block

Java - 文本字段的验证

java - 本地化 org.apache.wicket.extensions.yui.calendar.DatePicker 中的标签

scala - 如何优雅地提前结束 Spark 应用程序?

scala - 如何在协同过滤中设置 ALS 隐式反馈的首选项?

ubuntu - 配置单元查询HDFS数据时出现异常

sorting - 二级排序 - 将其留给 Hadoop 框架或在 reducer 中自己完成