ska*_*tek 7 architecture erlang fault-tolerance real-time erlang-otp
我想为比萨饼送货店建立一个容错的软实时网络应用程序.它应该有助于披萨店接受来自客户的电话,将它们作为订单放入系统(通过CRM网络客户端),并帮助调度员将订单分配给送货司机.
这些目标并不罕见,但我希望每周7天每天24小时提供服务,即使其具有容错能力.此外,我希望它能够非常快速地工作并且非常敏感.
下面是这种应用程序的一个非常简单的架构视图.

问题是我不知道如何使用所有Erlang/OTP优点来使应用程序具有响应性和容错性.
这是我的问题:
首先,这是一个很大的问题,但我会尝试将其分解.让我们先看一下事实.它是一个Web服务.这意味着我们必须在这些层:Web Server,Middle ware application然后Data Storage.在大多数高可用性应用程序中,数据存储层必须具有冗余replication和负载管理Distribution.在大多数实际应用程序中,您不需要在RAM中存储任何内容,除非应用程序本质上是实时的,例如a Multi-player Game Server或A telecom Switch.所以,你的那种应用程序,在这种情况下真的,不需要RAM存储(也许某种在caching这里和那里,正如我们将要看到的那样.)
现在,这种应用程序涉及不同类型的数据,信息不能在任何时候都有相同的形式,因此,使用RDMS将迫使您以相同的方式安排所有事情.我的建议是你学习使用任何document oriented database,NoSQL DB或者key-value system因为它们很好地模拟了现实世界的复杂性.有关任何类型存储的更多信息,请参阅此pdf.我建议您使用Couch基本服务器,您的数据将简单地存在JSON documents,schemaless并且可以随着应用程序的增长而发展.它配备了分发和复制,就像任何应用程序需要它一样.您可以在运行时添加服务器或删除服务器,整个系统只是保持自我重新平衡.它还memcached内置了缓存功能,因此对于您所谈论的IN-Memory部分,缓存将为您完成所有工作.
在存储之后,让我们谈谈中间件.我想谈谈Web服务器作为中间件的一部分.您将需要一个非常稳定的Web服务器,具体取决于负载,并且您想要使用Erlang,我建议使用yaws Web服务器并学习使用它来执行RESTFUL服务appmods.使用Proxies sunch作为NginxWeb服务器集群的前沿可能有助于负载管理.至少有几种方法可以对Web服务器进行负载均衡.在此之后,您将需要一个OTP应用程序.OTP应用程序不一定非必需gen_servers.但是,正如您将要学习的那样,您将真正发现需要并行化的位置或需要顺序代码的位置.然而,它担心你想要使用你还没有掌握的东西.请按照这本网页和这本Orielly书来帮助您掌握Erlang的所有内容.你会发现尝试Chicago Boss和/ Mochiweb或MisultinHttp服务器库很有用.
关于在Erlang中执行此操作,我应该提到的另一件事是,您需要掌握数据结构以及使用它们的有效方法.数据结构选择不当可能会导致问题.在每一步测试和测试一切.records尽可能在任何地方使用并检查每个阶段的内存消耗.关于这个问题还有很多话要说,但希望其他人也会发表他们的想法.
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |