最好的erlang内存缓存系统跨网络节点= mnesia?

Mr.*_*oor 6 erlang ets

大家早上好

我是erlang的新手,但我正在努力设计我在erlang上的第一个项目尽我所能.这里我需要一些关于erlang内存缓存系统的建议.

  1. 缓存项是基于键值的存储.key通常是ASCII字符串; 值是erlang的类型包括number/list/tuple/etc.
  2. 缓存项可以由任何节点设置.
  3. 缓存项可以由任何节点获取.
  4. 即使在不同的服务器上,也可以跨所有节点共享缓存项
  5. 允许脏读,我不希望任何锁或事务降低性能.
  6. 完全分布式,没有集中式机器或服务.
  7. 很好的表现
  8. 易于安装和部署以及配置和维护

在我看来,第一选择是mnesia,但我没有任何经验.它符合我的要求吗?我的表现如何?

另一个选项是memcached - 但我担心性能低于mnesia,因为执行了额外的序列化/反序列化,因为memcached守护进程来自另一个OS进程.

任何建议都有帮助:)

Muz*_*hua 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有多好).

另一件事是,你应该做一些阅读并编写许多程序,直到你对它感到满意为止.