6

I need some suggestion for the erlang in-memory cache system.

  1. The cache item is key-value based storage. key is usually an ASCII string; value is erlang's types include number / list / tuple / etc.
  2. The cache item can be set by any of the node.
  3. The cache item can be get by any of the node.
  4. The cache item is shared cross all nodes even on different servers
  5. dirty-read is permitted, I don't want any lock or transaction to reduce the performance.
  6. Totally distributed, no centralized machine or service.
  7. Good performance
  8. Easy install and deployment and configuration and maintenance

First choice seems to me is mnesia, but I have no experence on it. Does it meet my requirement? How the performance can I expect?

Another option is memcached -- But I am afraid the performance is lower than mnesia because extra serialization/deserialization are performed as memcached daemon is from another OS process.

4

1 回答 1

12

是的。Mnesia满足您的要求。然而,就像你说的,当使用它的人深入理解它时,一个工具是好的。我们在 a 上使用了 mnesia,distributed authentication system到目前为止我们还没有遇到任何问题。当 mnesia 用作缓存时,它比 memcached 更好,原因之一是“Memcached 不能保证你写的东西,你可以随时阅读,因为内存交换问题和东西”(跟随这里)。

但是,这意味着您的分布式系统将基于 Erlang 构建。确实,在您的情况下,mnesia 击败了大多数 NoSQL 缓存解决方案,因为它们的系统是Eventually consistent. Mnesia 是一致的,只要能保证整个集群的网络可用性。对于分布式缓存系统,您不希望从不同节点读取相同键的不同值的情况,因此 mnesia 的一致性在这里派上用场。

您应该考虑的是,可以为分布式系统提供集中式内存缓存。它的工作原理是这样的:您RABBITMQ在每个集群节点上都有服务器正在运行并且可由 AMQP 客户端访问。系统通过 AMQP 接口进行交互。因为缓存是集中的,所以负责写入和读取缓存的进程/系统可以确保一致性。其他系统只需将密钥请求发送到AMQP message bus,负责缓存的系统接收到这个消息,并用值回复它。

我们已将其Message bus Architecture using RABBITMQ用于最近的系统,该系统涉及与银行系统、ERP 系统和公共在线服务的集成。我们建造的东西负责将所有这些融合在一起,我们很高兴我们使用了RABBITMQ. 细节很多,但我们做的是想出一个消息格式,一个系统识别机制。所有系统都必须有一个 RABBITMQ 客户端来读写消息总线。然后你会创建一个阅读Queue对于每个系统,以便其他系统将其请求写入该队列,该队列在 RABBITMQ 中的名称与拥有它的系统相同。然后,稍后,您必须对通过总线的消息进行加密。最后,您将系统通过大距离/跨状态绑定在一起,但是通过高效的网络,您不会相信 RABBITMQ 绑定这些系统的速度有多快。无论如何,RABBITMQ 也可以是集群的,我应该告诉你它是MnesiaRABBITMQ 的动力(它告诉你 mnesia 有多好)。

另一件事是,您应该阅读和编写许多程序,直到您对它感到满意为止。

于 2013-05-24T06:16:44.793 回答