我正在寻找一种在多个节点集群中共享对象的方法,经过一番研究,我认为最好使用 redis pub/sub。然后,我看到redis还不支持集群,也就是说基于redis的系统会有单点故障。由于高可用性对我来说是一个关键特性,因此该解决方案不适用。
目前,我正在研究针对此问题的其他 2 个解决方案:
我有两个问题:
- 在哪种解决方案之上,模拟 pub/sub 会更有效?
- 记住集群时哪个更好?
我希望有人遇到类似的问题并分享他的经验。
我正在寻找一种在多个节点集群中共享对象的方法,经过一番研究,我认为最好使用 redis pub/sub。然后,我看到redis还不支持集群,也就是说基于redis的系统会有单点故障。由于高可用性对我来说是一个关键特性,因此该解决方案不适用。
目前,我正在研究针对此问题的其他 2 个解决方案:
我有两个问题:
我希望有人遇到类似的问题并分享他的经验。
我认为将 memcached 和 couchbase 用于 pub/sub 是一个坏主意。两种解决方案都不提供内置的 pub/sub 功能,并且在应用程序端实现 pub/sub 可能会导致大量的 ops/sec 到 memcache/couchbase 服务器,因此你会得到缓慢的性能。Couchbase 将数据存储到磁盘中,因此对于临时存储,最好使用 memcaced。它会更快,并且不会加载您的磁盘。如果您可以避免“发布/订阅”并使用 memcached/couchbase 就像简单的 HA 共享键值存储一样 - 那就去做吧。它会比 pub/sub 好得多。
当您安装 Couchbase 服务器时,它提供了 2 种类型的存储桶:couchbase(具有磁盘持久性、创建视图的能力等)和 memcached(仅在内存中键值存储)。两种类型的桶在集群中的行为方式相同。couchbase 还支持 memcache api 调用,因此您无需更改代码即可测试这两种变体。
我尝试使用 memcached 提供程序进行 socket.io“pub/sub”共享,但正如我之前提到的那样,它很难看。在我的例子中,很少有带有 socket.io 的 node.js 服务器,所以我没有在套接字之上的服务器之间实现共享,而不是共享。
UPD:如果您有如此大量的数据,最好不要有一个共享存储,而是使用诸如具有“可预测”数据位置的分片之类的东西。