问题标签 [distributed-caching]

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.

0 投票
1 回答
479 浏览

java - 寻找用于实现分布式 MVC 模式的分布式缓存解决方案

我正在构建一个客户端/服务器应用程序,它的核心将具有一个相当复杂(但不是很大 - 比如说 10,00 个对象)的对象模型。多个客户端将需要查看模型(通过 Eclipse RCP GUI),但服务器将是唯一可以直接编辑模型的节点。我希望对模型的编辑发布给客户。新客户将能够请求模型并注册更新。

它确实是一个相当标准的模型-视图-控制器模式。

任何人都可以提出好的、开源的、复制的缓存解决方案来处理我的对象模型的分布,以及分布对模型的更改。我希望将“增量”发送给客户端,而不是每次一个字段更改时都发送完整的模型。

此外,我需要能够复制对象图并保持连贯性,例如,如果我有一个“Person”对象:

将三个人添加到我的缓存中:

然后更新'老板的名字:

我希望以下代码在所有节点上返回“TheBossXX”:

换句话说,我希望我的解决方案知道哪些对象相互引用并在所有节点上维护这些关系。

有兴趣听听您的建议。

缺口

0 投票
2 回答
8283 浏览

java - Clustered hibernate cache with ehcache: nonstrict vs. strict read write

What is the real difference between nonstrict-read-write and read-write? I can read ehcache and Hibernate docs, but as far as I can see they only say that "read-write is better if you do updates". I find it unsatisfactory.

I may have an issue with long-lived cached collection configured like this:

What exactly happens when the collection is updated, on the node where the update occurs and others? What is the difference between nonstrict-read-write and read-write here? Is it possible that a node will use its stale 10-minute version from cache?

Note the lengthy timeouts and asynchronous replication.

0 投票
2 回答
2583 浏览

caching - 具有 Windows Server AppFabric 缓存的分布式锁服务

我有一个在 Windows Server AppFabric SDK 中找到的 Microsoft.ApplicationServer.Caching.DataCache 对象的扩展方法,如下所示:

目的是让开发人员编写代码,“通过先尝试缓存来获取一些数据。如果缓存中不可用,则执行指定的函数,将结果放入缓存中以供下一个调用者使用,然后返回结果”。像这样:

锁定限制了对单个线程执行可能长时间运行的函数调用,但仅限于同一台机器上的单个进程内。您将如何扩展此模式以使锁定分布式以防止多个进程/机器同时执行该功能?

0 投票
2 回答
1271 浏览

distributed - 一致散列:重新散列呢?

您可能知道,在处理 DHT 时,一致的哈希是一个好主意。主要思想是在添加或删除新节点时不要遭受太多损失。

从原始论文:

当一台机器被添加到缓存集中或从缓存集中移除时,必须移动到新缓存的对象的预期比例是保持缓存间负载平衡所需的最小值。

解决方案很好,但是存在密钥分配不良的现象。为了解决这个问题,原始节点的副本是随机分布的。该解决方案效果很好。如果您想确定,请查看此图表。

好的,似乎工作得很好。但是,有件事我一直在想,没有人提到。

添加(或删除)一个节点时会发生什么?好吧,每个键,“之前”放置的节点都需要重新散列。这看起来不错,因为这些键不会是“所有”键。但是,如果我们决定放置一些副本,比如 20 个,那么 20 个节点会感到重新散列的痛苦。

更少的副本意味着更差的分布,但是更多的副本意味着在需要重新散列时更加痛苦。

您知道哪种解决方案适合这种情况?我错过了什么吗?

0 投票
1 回答
1564 浏览

java - 使用 Terracotta 的 EHCache 如何处理分布式堆中的驱逐?

我们最近开始使用 EHCache 和 Terracotta 来为应用程序数据运行分布式数据缓存。假设任何客户端节点的堆大约有 2gb,而服务器节点有 8gb。我们生成大量数据,每天大约 1.5gb。

通常,任何一个客户端都会使用特定日期的数据集(大约 1.5gb),但服务器显然必须保存所有这些数据集。

当堆变大时,我希望到期的工作方式是基于 LRU。因此,如果任何特定的 L1 客户端缓存变得太大(例如,从第 1 天切换到第 2 天),我希望它会从 L1 中驱逐所有第 1 天的数据。如果在我们获得第 6 个数据集时 L2 变得太大,那么最旧的数据集将完全过期。对于生存时间或空闲时间值应该是什么,我真的没有任何意见,所以我没有设置它们。

经过几天的研究,我认为这并不像我期望的那样工作。例如,我运行了一个 L2 最大元素为 4 的测试。我用四个元素填充它。然后我去放第五个元素。Cache.put() 无异常返回,但紧随其后的具有相同键的 Cache.get() 返回 null!

所以我的问题是,我如何让 EHCache+Terracotta 做我想做的事情,或者至少做一些接近的事情?

0 投票
1 回答
199 浏览

asp.net - 用于 ASP.NET 的分布式缓存平台

我有一个 .NET 网站和一个位于 VPS(虚拟服务器)之上的 API 接口。他们都使用 ASP.NET 缓存系统(非常好和舒适)。如果它很重要 - API 系统将在某个时候移植到 WCF。

我想准备好从 1 个 VPS 转移到多个 VPS(当我们变得更大时)——因此我需要一些分布式缓存系统。

想法将不胜感激:)

谢谢!

0 投票
3 回答
6343 浏览

java - AWS Elastic Beanstalk 缓存?

我正在考虑在 AWS 上托管一个标准的 Java Web 应用程序,新的 Elastic Beanstalk ( http://aws.amazon.com/elasticbeanstalk/ ) 似乎拥有我们想要的大部分功能。我不知道的一件事是如何进行分布式缓存。似乎 AWS 不允许多播发现新节点,所以我不确定如何将自动缩放过程启动的新节点集成到现有的分布式缓存中。任何建议/最佳实践表示赞赏。

更新:理想情况下,这将是每个应用程序服务器实例的本地缓存。最好的情况是 ehcache 或 terracota 等的休眠级别 2 缓存配置。

0 投票
1 回答
1452 浏览

nosql - 具有实时多主机复制的键值存储

是否有满足以下条件的开源​​分布式键值存储。

  • 几乎实时的多主机复制。(决胜局将基于时间戳,而不是更复杂的东西)
  • 如果与其余节点断开连接,每个节点都应该能够使用其本地数据(基于一致散列的方法将不可行)。
  • 预计最大节点数约为 10。

评价如下。

  • 内存缓存数据库
  • 沙发数据库
  • 卡桑德拉

发现上面的并不能满足所有的要求。

0 投票
2 回答
2943 浏览

memory - 用于内存缓存系统的 Membase 或 Redis

我计划在我的应用程序中使用 membase 或 redis 作为内存缓存系统。我对哪个最适合持久性缓存系统感到困惑?你们能不能建议每个人中哪一个是最好的,原因是什么。还有redis和membase之间的比较和基准测试。

0 投票
1 回答
678 浏览

c# - 最佳实践缓存:单体与细粒度缓存数据

在分布式缓存场景中,通常建议使用还是避免使用存储在缓存中的单体对象?

我正在使用由 EAV 模式支持的服务,因此我们将缓存放在适当的位置,以最大限度地减少 EAV 在从数据库中检索所有主记录和相应的属性集合时造成的感知性能缺陷。我们将在服务启动时启动缓存。

我们对所有产品的调用并不特别频繁——客户在他们第一次使用对象映射填充本地缓存后调用差异。为了执行该差异,分布式缓存将需要反映对数据库中在任意基础上执行的单个记录的更改,并在客户端调用差异时针对更改进行处理。

首先想到的是使用 List 或 Dictionary 将记录存储在分布式缓存中——获取整个集合,在本地内存中对其进行操作或搜索,然后将整个集合放回缓存中。然而,后来的想法导致了用单独的记录填充缓存的想法,每个记录都以一种方式进行键控,以使它们可以单独从缓存中检索/更新到缓存中。这导致想知道在更新所有数据时哪种方法会更高效。

我们使用的是 Windows Server AppFabric,因此我们可以使用 BulkGet 操作。但是,我不相信有任何批量更新的概念。

关于分布式缓存对象大小是否有普遍的想法?如果我们对所有项目都有更多的请求,我会担心网络带宽,但至少目前,对所有项目的需求应该是相当小的。

是的,我们将测试和分析每种方法,但我想知道是否有任何超出当前考虑范围的内容需要考虑。