【发布时间】:2012-08-01 04:43:18
【问题描述】:
我想为披萨外卖店构建一个容错的软实时 Web 应用程序。它应该帮助比萨店接受客户的电话,将它们作为订单输入系统(通过 CRM 网络客户端),并帮助调度员为订单分配送货司机。
这些目标并不稀奇,但我想让服务 24/7 可用,即使其具有容错性。此外,我想让它工作得非常快并且反应灵敏。
下面是这样一个应用程序的一个非常简单的架构视图。
问题是我不知道如何利用 Erlang/OTP 的所有优点来使应用程序响应迅速且容错。
这是我的问题:
- 应该复制哪些系统元素以提供容错能力,我应该如何做到这一点?我知道我可以将每辆车的状态(坐标、分配的订单等)存储在一个复制的 Mnesia 数据库中。这是正确的方法吗?
- 哪些数据存储服务应该是传统的基于 SQL 的(例如基于boss_db),哪些应该在 Mnesia 上完成以提供非常快速的响应?在这种容错且响应迅速的应用程序中,是否可以使用传统的 SQL 数据库来存储客户记录和历史记录?
- 我是否应该尝试将所有服务(客户、车辆状态等)的所有数据存储在 RAM 中,以使应用程序具有高响应性?
- 我是否应该将持久性车辆数据(id、容量等)存储在常规 SQL 数据库中,并将实时数据(坐标、分配的订单、后备箱中的订单等)存储在 Mnesia 数据库中以使应用程序更实时响应?
【问题讨论】:
-
如果您不复制所有应用程序逻辑和数据,您将如何使服务 24/7 以防万一?数据库服务器故障;)
-
您能否提供有关如何在具有 2 个以上处理逻辑的节点的 Erlang/OTP 系统中复制数据的参考?
-
进程组,发送给所有人,解决冲突或简单地使用 riak/couchdb。或者你看看失忆症。但是自己做这件事将是一项非常艰巨的任务。
标签: architecture erlang real-time erlang-otp fault-tolerance