繁体   English   中英

使用Erlang / OTP构建容错的软实时Web应用程序

[英]Building a fault-tolerant soft real-time web application with Erlang/OTP

我想为比萨饼送货店建立一个容错的软实时网络应用程序。 它应该有助于披萨店接受来自客户的电话,将它们作为订单放入系统(通过CRM网络客户端),并帮助调度员将订单分配给送货司机。

这些目标并不罕见,但我希望每周7天每天24小时提供服务,即使其具有容错能力。 此外,我希望它能够非常快速地工作并且非常敏感。

下面是这种应用程序的一个非常简单的架构视图。

比萨饼送货店订单系统

问题是我不知道如何使用所有Erlang / OTP优点来使应用程序具有响应性和容错性。

这是我的问题:

  1. 应该复制哪些系统元素以提供容错,我应该如何做? 我知道我可以在复制的Mnesia数据库中存储每辆车的状态(坐标,分配的订单等)。 这是一个正确的方法吗?
  2. 哪些数据存储服务应该是传统的基于SQL的(例如基于boss_db ),哪些应该在Mnesia上完成以提供非常快速的响应? 是否可以使用传统的SQL数据库将客户记录和历史记录存储在这样的容错和响应速度快的应用程序中?
  3. 我是否应该尝试将所有服务(客户,车辆状态等)的所有数据存储在RAM中,以使应用程序具有高响应性?
  4. 我应该将持久性车辆数据(id,容量等)存储在传统的SQL数据库中,并将实时数据(坐标,分配的订单,主干中的订单等)存储在Mnesia数据库中,以使应用程序更多实时响应?

首先,这是一个很大的问题,但我会尝试将其分解。 让我们先看一下事实。 它是一个Web服务。 这意味着我们拥有这些层: Web ServerMiddle ware application ,然后是Data Storage 在大多数高可用性应用程序中,数据存储层必须通过replication实现冗余,并通过Distribution管理负载。 在大多数实际应用程序中,除非应用程序实际上是实时的,否则您不需要在RAM中存储任何内容,例如Multi-player Game ServerA telecom Switch 所以,你的应用程序,在这种情况下真的,不需要RAM存储(也许在这里和那里进行某种caching ,正如我们将要看到的那样。)

现在,这种应用程序涉及不同类型的数据,任何时候都不能具有相同形式的信息,因此,使用RDMS将迫使您以相同的方式安排所有内容。 我的建议是你学会使用任何document oriented databaseNoSQL DBkey-value system因为它们很好地模拟了现实世界的复杂性。 有关任何类型存储的更多信息,请参阅此pdf 我建议您使用Couch基本服务器 ,您的数据将只是JSON documentsschemaless并且可以随着应用程序的增长而发展。 它配备了分发和复制,就像任何应用程序需要它一样。 您可以在运行时添加服务器或删除服务器,整个系统只需保持自我平衡。 它还内置了用于缓存的memcached ,因此对于你所讨论的IN-Memory部分,缓存将为你做所有事情。

在存储之后,让我们谈谈中间件。 我想谈谈Web服务器作为中间件的一部分。 您将需要一个非常稳定的Web服务器,具体取决于负载,并且您想要使用Erlang,我建议使用appmods yaws web server并学习使用它来做RESTFUL服务 使用Proxies sunch作为Web服务器集群前面的Nginx可能有助于负载管理。 至少有几种方法可以对Web服务器进行负载均衡。 在此之后,您将需要一个OTP应用程序。 OTP应用程序不一定必须有gen_servers 但是,正如您将要学习的那样,您将真正发现需要并行化的位置或需要顺序代码的位置。 然而,它担心你想要使用你还没有掌握的东西。 请按照这本网页和这本Orielly书来帮助您掌握Erlang的所有内容。 你会发现尝试Chicago BossMochiwebMisultin Http服务器库很有用。

关于在Erlang中执行此操作,我应该提到的另一件事是,您需要掌握数据结构以及使用它们的有效方法。 数据结构选择不当可能会导致问题。 在每一步测试和测试一切。 尽可能在任何地方使用records并检查每个阶段的内存消耗。 关于这个问题还有很多话要说,但希望其他人也会发表他们的想法。

破解这个游戏: https//github.com/synrc/games所有实时,低延迟,发布/订阅,数据库,架构问题都在那里,作为最先进的软件编写。 我建议使用gen_fsm控制你的应用程序中的状态,就像'好'的主管一样。 riak与kvs lib集成,对社交更新也有很好的支持。 n2o选择了牛仔服务器,在我看来,是最好的服务器。 http://www.ostinelli.net/a-comparison-between-misultin-mochiweb-cowboy-nodejs-and-tornadoweb/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM