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