我想为披萨外卖店构建一个容错的软实时 Web 应用程序。它应该帮助比萨店接受客户的电话,将它们作为订单输入系统(通过 CRM 网络客户端),并帮助调度员为订单分配送货司机。
这些目标并不稀奇,但我想让服务 24/7 可用,即使其具有容错性。此外,我想让它工作得非常快并且反应灵敏。
下面是这样一个应用程序的一个非常简单的架构视图。
问题是我不知道如何使用 Erlang/OTP 的所有优点来使应用程序非常敏感和容错。
以下是我的问题:
- 为了提供容错,应该复制哪些系统元素,我应该怎么做?我知道我可以将每辆车的状态(坐标、分配的订单等)存储在一个复制的 Mnesia 数据库中。这是正确的方法吗?
- 哪些数据存储服务应该是传统的基于 SQL 的(例如基于boss_db),哪些应该在 Mnesia 上完成以提供非常快速的响应?在这样一个容错和高响应的应用程序中使用传统的 SQL 数据库来存储客户记录和历史记录是否可以?
- 我是否应该尝试将所有服务(客户、车辆状态等)的所有数据存储在 RAM 中,以使应用程序具有高响应性?
- 我是否应该将持久性车辆数据(id、容量等)存储在传统的 SQL 数据库中,并将实时数据(坐标、分配的订单、后备箱中的订单等)存储在 Mnesia 数据库中,以使应用程序更实时响应?