java - 选择分布式共享内存解决方案

标签 java architecture nosql distributed-caching

我的任务是为可大规模扩展的分布式共享内存 (DSM) 应用构建原型(prototype)。原型(prototype)仅用作概念验证,但我希望通过挑选稍后将在实际解决方案中使用的组件来最有效地度过我的时间。

此解决方案的目的是从外部来源获取数据输入,将其搅动并使结果可用于多个前端。这些“前端”只会从缓存中获取数据并提供服务,而无需额外处理。对这些数据的前端点击量实际上可以达到每秒数百万。

数据本身非常不稳定;它可以(并且确实)迅速改变。然而,在处理和缓存最新的数据之前,前端应该看到“旧”数据。处理和写入由单个(冗余)节点完成,而其他节点仅读取数据。换句话说:没有通读行为。

我正在研究像 memcached 这样的解决方案然而,这个特定的并不能满足我们的所有要求,这些要求如下所列:

  1. 该解决方案必须至少具有 Java 客户端 API,该 API 维护得相当好,因为应用程序的其余部分是用 Java 编写的,而且我们是经验丰富的 Java 开发人员;
  2. 解决方案必须完全弹性:应该可以添加新节点而无需重新启动集群中的其他节点;
  3. 解决方案必须能够处理故障转移。是的,我意识到这意味着一些开销,但整体提供的数据大小并不大(最大 1G),所以这应该不是问题。 “故障转移”是指无缝执行,无需硬编码/更改服务器 IP 地址,就像节点出现故障时在 memcached 客户端中一样;
  4. 理想情况下,应该可以指定数据重叠的程度(例如,同一数据的多少副本应存储在 DSM 集群中);
  5. 无需永久存储所有数据,但可能需要对某些数据进行后处理(例如序列化到数据库)。
  6. 价格。显然我们更喜欢免费/开源,但如果解决方案值得,我们很乐意支付合理的金额。无论如何,付费 24 小时/天支持契约(Contract)是必须的。
  7. 整个事情都必须托管在我们的数据中心,因此像 Amazon SimpleDB 这样的 SaaS 产品超出了范围。只有在没有其他选项可用的情况下,我们才会考虑这样做。
  8. 理想的解决方案是严格一致(如在 CAP 中);但是,最终一致性可以作为一种选择。

提前感谢您的任何想法。

最佳答案

看看Hazelcast .它是纯 Java、开源(Apache 许可)高度可扩展的内存数据网格产品。它确实提供 7X24 支持。它确实解决了你所有的问题,我试图在下面解释每个问题:

  1. 它有一个本地 Java 客户端。
  2. 它是 100% 动态的。动态添加和删除节点。无需更改任何内容。
  3. 一切都是动态的。
  4. 您可以配置备份节点的数量。
  5. Hazelcast 支持持久性。
  6. Hazelcast 提供的一切都是免费的(开源),并且确实提供企业级支持。
  7. Hazelcast 是单个 jar 文件。 super 好用。只需将 jar 添加到您的类路径中。看看主页中的屏幕转换。
  8. Hazelcast 是严格一致的。您永远无法读取过时的数据。

关于java - 选择分布式共享内存解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045164/

相关文章:

java - 如何为内部类创建多个实例

java - Windows 8.1 上的 Apache Maven 3.5.3 安装问题

ios - View 更新后保持对 View /数据模型的引用

python - 如何修复 Cassandra 中的问题 "Unable to complete the operation against any hosts"?

java - 如何在 Java 中将 CamelCase 转换为人类可读的名称?

java - Selenium 网络驱动程序 : can I check if a resource (e. g。 XML 文件)已加载?

architecture - 构建转换应用程序的好例子

android - 我如何结合使用 db4o 来存储数据和 Lucene 来索引数据以进行快速搜索?

mongodb - 如何在 NoSql 数据库(MongoDB)中强制执行外键?

sql - 对于一台机器上的结构化数据,NoSQL是否比RDBMS有任何真正的优势?