Geo*_*ge2 6 architecture design-patterns
我的应用程序有几个工作人员(作为不同的进程处理不同的事情)和一些资源(工作单位).不同的工人需要处理所有工作单位.例如,我有像W1,W2和W3这样的工人,工作单位U1和U2.然后W1需要处理U1和U2,与W2和W3相同.限制是不同的工人不能同时在同一个工作单位工作.
我有两个设计,想要求一个更好的建议.
我想知道每个设计的优缺点.我的一个主要问题是 - 寻找松散耦合的设计(这是我的主要目标之一,但不是唯一的目标).我不确定推模型或轮询模型是否具有更好的可扩展性(选项1是否更松散耦合)?
乔治,提前谢谢
“拉”模型的优点是每个工作人员在本地知道它加载了多少,因此可以管理其负载。
此外,“拉”模型可能更加“解耦”,因为“负载”变量保留在工作人员本地,而在“推”模型中,需要通信协议(和开销)来传达此状态。
想想汽车行业“拉动”模式的成功:它从库存难以跟踪且需要大量反馈的传统“推”模式转变为现在成功且无处不在的“拉”模式。
当涉及到扩展时,您可以有一个中间层的“调度程序”,用于从上面的层“轮询”作业。基础工作人员现在可以以分区的方式与中间层进行交互。
请注意,在任一模型中都需要协调通信协议:不同的是协调协议的性质。在“推送模型”中,需要一个额外的控制循环来报告/轮询每个工作人员的“负载系数”。随着系统规模的扩大,需要更多的带宽、调度程序端的更多状态、产生更多的延迟等。