我已经问过一个关于披萨外卖店的简单容错软实时 Web 应用程序的问题。
我在那里得到了非常好的评论和答案,但我不同意它是一个真正的网络服务。它不是一个网络服务,它更像是一个实时系统,用于接受客户的订单,控制这些订单的调度,并控制实时交付这些订单的车辆。
此外,与“真正的”网络服务不同,该系统并不打算拥有很多用户——它只是几个调度员(电话接线员)和几个送货司机将使用它(目前我不需要提供直接访问到实际客户的服务;只有调度员和送货司机才能直接访问)。
因此,这个问题更笼统。
我发现,为了为此应用程序的 NoSQL 数据存储选项做出正确的选择,我要做的第一件事就是根据CAP 定理在和CA
之间做出选择。PA
CP
现在,《用 Erlang 构建 Web 应用程序》一书说“虽然它 [Mnesia] 不是 SQL 数据库,但它是一个类似于 SQL 数据库的 CA 数据库。它不会处理网络分区”。同一本书说 CouchDB 数据库是一个PA
数据库。
考虑到这一点,我认为我需要对我的应用程序做的第一件事是确定“容错”一词对于 CAP 的含义。
我的简单要求是让应用程序 24/7(R1) 可用。另一个是不需要扩展,应用程序的用户数量非常有限(可能不可能有数千个调度程序)(R2)。
现在,R1 是否要求应用程序提供一致性、可用性和分区容错性以及哪些优先级?
哪种类型的数据存储选项将更好地处理以下问题:
- 为调度员(接听客户电话并使用 CRM 的人)提供 24/7 全天候可用性,以查找客户记录并将订单输入系统;
- 实时查看当前正在进行的服务订单及其状态(下达、烘焙、派送、交付、交付);
- 实时跟踪所有工作车辆的位置及其有效载荷;
- 在系统崩溃或网络崩溃后恢复系统的任何部分以继续提供1,2和3;
总结一下:哪种数据存储(CA、PA 或 CP)更适合上述系统?什么样的数据存储能更好地满足 R1 的要求?