gpt4 book ai didi

erlang - 最好的分布式 Erlang 内存缓存是什么?

转载 作者:行者123 更新时间:2023-12-02 05:56:35 24 4
gpt4 key购买 nike

我需要一些关于 erlang 内存缓存系统的建议。

  1. 缓存项是基于键值的存储。key 通常是一个 ASCII 字符串; value是erlang的类型,包括数字/列表/元组/等。
  2. 缓存项可以由任意节点设置。
  3. 任何节点都可以获取缓存项。
  4. 缓存项在所有节点之间共享,甚至在不同的服务器上
  5. 允许脏读,我不希望任何锁定或事务降低性能。
  6. 完全分布式,没有集中式机器或服务。
  7. 表现良好
  8. 易于安装、部署、配置和维护

在我看来,第一个选择是 mnesia ,但我没有这方面的经验。符合我的要求吗?我期望的性能如何?

另一个选项是memcached --但我担心性能会低于 mnesia,因为由于 memcached 守护进程来自另一个操作系统进程,因此需要执行额外的序列化/反序列化。

最佳答案

是的。 Mnesia 满足您的要求。然而,就像你说的,当使用它的人深入理解它时,工具就是好的。我们在分布式身份验证系统上使用了mnesia,到目前为止我们还没有遇到任何问题。当 mnesia 用作缓存时,它比 memcached 更好,原因之一是“由于内存换出问题等原因,Memcached 无法保证您写入的内容可以随时读取”(遵循 here )。< br/>
然而,这意味着您的分布式系统将基于 Erlang 构建。事实上,在你的例子中,mnesia 击败了大多数 NoSQL 缓存解决方案,因为它们的系统是最终一致的。 Mnesia 是一致的,只要能够保证整个集群的网络可用性。对于分布式缓存系统,您不希望出现从不同节点读取同一键的不同值的情况,因此 mnesia 的一致性在这里派上用场。

您应该考虑的是,它分布式系统可以有一个集中的内存缓存。它的工作原理如下:您有 RABBITMQ服务器运行并可由每个集群节点上的 AMQP 客户端访问。系统通过 AMQP 接口(interface)进行交互。因为缓存是集中式的,所以负责写入和读取缓存的进程/系统可以确保一致性。其他系统只需将 key 请求发送到 AMQP 消息总线,负责缓存的系统就会接收该消息并回复该消息。

我们在最近的系统中使用了使用 RABBITMQ 的消息总线架构,该系统涉及与银行系统、ERP 系统和公共(public)在线服务的集成。我们构建的内容负责将所有这些融合在一起,我们很高兴使用 RABBITMQ。细节很多,但我们所做的是想出一个消息格式和一个系统识别机制。所有系统都必须有一个 RABBITMQ 客户端,用于从消息总线写入和读取。然后,您将为每个系统创建一个读取队列,以便其他系统将其请求写入该队列,该队列在 RABBITMQ 中的名称与拥有该队列的系统相同。然后,您必须对通过总线传递的消息进行加密。最后,您的系统将远距离/跨州绑定(bind)在一起,但是有了高效的网络,您将无法相信 RABBITMQ 绑定(bind)这些系统的速度有多快。不管怎样,RABBITMQ 也可以集群化,我应该告诉你,是 Mnesia 为 RABBITMQ 提供了动力(它告诉你 mnesia 有多好)。

另一件事是,您应该阅读并编写许多程序,直到您熟悉为止。

关于erlang - 最好的分布式 Erlang 内存缓存是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16726821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com