【发布时间】:2010-09-30 16:54:45
【问题描述】:
我正在使用 Perl 设计一个多层应用程序,我想知道我可以使用的各种 IPC 机制的优缺点。我正在研究处理中等大小的数据,通常为几十 KB,但最多可达几兆字节,并且负载非常轻,每分钟最多几百个请求。
我主要关心的是可维护性和性能(按此顺序)。我认为我不需要扩展到一台以上的服务器,或者从我们的主平台 (RHEL) 移植,但我认为这是需要考虑的事情。
我可以想到以下选项:
- 临时文件 - 过于简单,在速度和存储要求方面可能是最差的选择
- UNIX 域套接字 - 不可移植,不可扩展
- Internet 套接字 - 便携、可扩展
- 管道 - 便携,不可扩展 (?)
考虑到可扩展性和可移植性不是我最关心的问题,我需要了解更多信息。什么是最好的选择,为什么?如果您需要更多信息,请发表评论。
编辑:我将尝试提供更多详细信息以回复 ysth's questions(警告,文字墙如下):
- 读者/作者是一对一的关系,还是更复杂的关系?
- 如果读者不在或忙,您希望作者怎么办?
- 反之亦然?
- 您还有哪些其他有关您希望使用的信息?
此时,我正在考虑采用三层方法,但我不确定每一层有多少进程。我认为我需要在左侧有更多的流程,在右侧有更少的流程,但也许我应该有相同的数字:
.---------。 .---------。 .--------。 |请求 | -----> |商业 | -----> |数据 | |经理 |这些名称仍然是通用名称,可能不会以这些形式进入实现。
请求管理器负责监听来自不同接口的请求,例如 Web 请求和 CLI(响应时间很重要)和电子邮件(响应时间不太重要)。它执行日志记录并管理对请求的响应(以适合请求类型的格式呈现)。
它将有关请求的数据发送到业务逻辑,该业务逻辑根据业务规则执行日志记录、授权等。
然后,业务逻辑(如果需要)从 数据层 请求数据,该数据层可以与(最常见的)内部 MySQL 数据库或我们团队无法控制的其他数据源通信(例如,我们组织的主要 LDAP 服务器,或我们的 DB2 员工信息数据库等)。这主要是一个简单的包装器,它以统一的方式格式化数据,以便在业务逻辑中更容易处理。
然后信息流回请求管理器进行展示。
如果,当数据向右流动时,阅读器很忙,对于交互式请求,我想简单地等待一段合适的时间,如果我没有获得该数量的访问权限,则返回超时错误时间(例如“稍后再试”)。对于非交互式请求(例如电子邮件),轮询系统可以简单地退出并在下一次调用时重试(可能每 1-3 分钟一次)。
当数据流向另一个方向时,不应该有任何等待情况。如果在尝试返回左侧时其中一个进程已经死亡,我真正能做的就是登录并退出。
无论如何,这很冗长,而且由于我仍处于早期设计阶段,因此我可能仍有一些混乱的想法。我提到的一些内容可能与使用哪个 IPC 系统的问题无关。我对设计的其他建议持开放态度,但我试图将问题限制在范围内(例如,也许我应该考虑分解为两层,这对于 IPC 来说要简单得多)。你有什么想法?
【问题讨论】: