【发布时间】:2011-12-22 04:33:58
【问题描述】:
假设我们有以下问题:
- 我们有执行对我们软件的请求的 http 客户端。因此,我们有一个始终可供他们使用的进程,并将他们的请求存储在一个队列中。
- 我们需要将这些请求分派到我们内部网络中的一台机器上(同样通过 HTTP)。
- 这种机器并不总是可用的。它由我们的软件按需启动(并在队列为空时停止)(再次向“管理器”机器发出 HTTP 请求)。
- 我们有几个(或很多)上述情况。
所以基本上,我们有一个逻辑实体,为了便于论证,我们将其称为“作业队列”。 每个作业队列都由几个(异构)进程组成。一种实现实际队列并且始终可用(不阻塞)的方法。管理工作机器的一种。我们还有几个(按需生成的)worker,它们从队列中取出条目,尝试将它们发送到worker机器,解决错误;可能会返回(不成功)尝试到队列(将被重试)等。而且我们可能还有一个“管理器”进程来协调上述工作。而且我们有很多“作业队列”,它们都由很多进程组成。
注意:这可能不是这个确切问题的完美解决方案,但让我们假设它是。我的问题不是关于如何解决问题,而是如何管理代表逻辑实体的此类进程“组”。
那么,您如何在 OTP 中表示这一点?您有多少监督树,您是否在“作业队列”实体之间共享监督者,或者每个逻辑实体都有一个监督者。 另外,您如何管理整个事情。
我有一个猜测,但这是一个相当棘手的问题(因为我已经尝试以几种不同的方式实现它),所以我不会(现在)分享我的(也许不是那么糟糕)的想法。
【问题讨论】:
标签: erlang erlang-otp