这个应用程序是Erlang糟糕的语言吗?

时间:2014-09-11 09:56:34

标签: erlang

我正在为实时网络应用程序构建框架。我开始在 Elixir 中这样做,因为 如何为 Erlang VM 开发应用程序是现代的方法。 如果你需要并发,容错,可扩展的应用程序(比如web服务器等),Erlang应该是好的。这正是我需要的。

问题:实时框架总是需要保存关于谁对什么感兴趣的信息。这将通过使用发布/订阅模式来完成。所以我将有1000个客户订阅主题“最新消息”。如果出现主题为“newest-message”的内容,我需要将这些客户端(代表每个客户端的进程的pid)保存到某个地方以便以后访问它们。 如果Erlang对我的框架非常有用,那么我很困惑。

ETS 可能是存储共享数据的唯一选项,但如果您保存/访问记录,ETS始终会复制所有内容。这意味着总是在复制1000个pids时我需要访问它们(而不是仅仅迭代某些列表,如果我将在c / java / python中执行它)。 如果仍然从 ETS (许多客户,许多订阅等)复制许多记录,这可能是一个很大的瓶颈,我是对的吗?

2 个答案:

答案 0 :(得分:1)

分享国家可能是设计糟糕的表现。例如,您可以为每个队列/主题创建进程,它将存储自己的订户列表。您向该主题进程发送消息,然后它将消息发送给客户端。这样,您就不会复制整个订户列表。

如果您需要并行处理它们,可以在更多进程之间拆分订户列表。

实现了Erlang的容错能力,因为它不会让你分享状态,你必须更多地考虑设计,不涉及状态共享,但会有效。从长远来看,这将获得回报,因此Erlang / Elixir绝对是这类应用程序的优秀语言。看看RabbitMQ吧。

答案 1 :(得分:0)

在我的观察中,如果你打算保存像#34;那些对什么"感兴趣的状态?仅凭Erlang可能不是一个好主意。当然,有时候传递信号中的所有内容非常方便(比如你在Erlang中做的事情),但是当存储的内容很多时 - 在Erlang中缺少状态会开始阻碍你而不是帮助。

另一方面,您可以保持Erlang的广泛便利,并将其与Java应用程序一起使用。用于Java的Erlangs接口使您可以非常轻松地连接这两种技术,同时您可以使用Java应用程序为您存储信息(并在必要时将其保存在某处)和Erlang用于整个并发信令的实时部分。甚至比这更好:您仍然可以使用这样的架构实现OTP,因此您可以创建一个非常轻量级的应用程序(因为实时逻辑由Erlang为您完成)能够轻松访问存储的数据(因为Java可以帮助您)