【问题标题】:Sharing object between Node.js server with memcached / couchcase cluster在 Node.js 服务器与 memcached / couchcase 集群之间共享对象
【发布时间】:2013-06-30 01:12:53
【问题描述】:

我一直在寻找share object in several nodes cluster 的方法,经过一番研究,我认为最好使用 redis pub/sub。然后,看到redis doesn't support cluster yet,表示基于redis的系统会出现单点故障。由于高可用性对我来说是一个关键特性,因此此解决方案不适用。

目前,我正在研究解决此问题的其他 2 个解决方案:

我有两个问题:

  1. 在哪种解决方案之上模拟 pub/sub 会更有效?
  2. 记住集群时哪个更好?

我希望有人遇到类似的问题并分享他的经验。

【问题讨论】:

  • 我不明白如何使用 memcached 不会是单点故障?它是一个仅在内存中的缓存。我不会认为“高度可用”,因为数据可能随时丢失。如果您需要强大而高效的东西,我建议您寻找实际的发布-订阅系统。
  • memchached 确实在内存中,但每次更改后我都会保存我的对象,所以 memchached 集群应该可以工作。我的主要问题是发布/订阅功能。有没有类似redis pub/sub 的支持集群的解决方案?
  • 我还是没听懂……你用什么来做 memcached 的 HA?您是否打算尝试在 memcached 节点之间复制数据?同样,我认为您针对此要求使用了错误的工具。当一个 memcached 实例连同所有数据一起死亡时,您的代码如何知道哪些内容已成功“发布”给订阅者?
  • 我正在寻找一种在 node.js 服务器之间传递消息的方法。我正在寻找一种弹性解决方案,它将消息发送到所有其他节点,同时动态更新活动服务器列表。如果你能想到更好的方法来实现这一点,如果你能与我分享,我将不胜感激
  • 列表有多少台服务器/多少条消息/有多“动态”?

标签: memcached cluster-computing couchbase


【解决方案1】:
  1. 我认为将 memcached 和 couchbase 用于 pub/sub 是个坏主意。两种解决方案都不提供内置的 pub/sub 功能,并且在应用程序端实现 pub/sub 可能会导致大量的 ops/sec 到 memcache/couchbase 服务器,因此你会得到缓慢的性能。 Couchbase 将数据存储到磁盘中,因此对于临时存储,最好使用 memcaced。它会更快,并且不会加载您的磁盘。 如果您可以避免“发布/订阅”并使用 memcached/couchbase 就像简单的 HA 共享键值存储一样 - 这样做。会比 pub/sub 好很多。

  2. 当您安装 Couchbase 服务器时,它提供了 2 种类型的存储桶:couchbase(具有磁盘持久性、创建视图的能力等)和 memcached(仅在内存中键值存储)。两种类型的桶在集群中的行为方式相同。 couchbase 还支持 memcache api 调用,因此您无需更改代码即可测试两种变体。

我尝试使用 memcached 提供程序进行 socket.io“pub/sub”共享,但正如我之前提到的那样,它很难看。在我的例子中,很少有带有 socket.io 的 node.js 服务器,所以我没有在套接字之上的服务器之间实现共享,而不是共享。

UPD:如果您有如此大量的数据,最好不要有一个共享存储,而是使用诸如具有“可预测”数据位置的分片之类的东西。

【讨论】:

  • 我首先想要 pub/sub 的原因是为了避免 p2p 消息传递以及使用它可能产生的复杂性。例如,如何保持需要通知的活动服务器的动态列表?
  • 我有固定数量的 (3) 台具有固定 ips 的服务器,所以我可以使用“p2p”。我在每个节点上都有列表副本,并且只发送更改(添加/删除)。如果您有很多服务器或需要动态添加/删除它们 - 发布/订阅只是一种变体。您可以尝试节点的 memcached pub/sub 提供程序来测试它。
猜你喜欢
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
相关资源
最近更新 更多