在组播的实现中,为了处理部分失败(partial failure)的问题,实现可靠组播和保证消息序。我们引入组播消息处理中间件,在中间件实现组播算法,同时决定何时将消息交付到应用程序。这里区分接受消息和交付消息,接收信息,是指从网络接收信息,并由中间件组处理,此时应用程序不能获取到消息;交付消息是该中间件将信息传递给应用程序使用。如下图所示
在消息传递过程中,先进先出(FIFO)队列是常用的形式。在组播消息处理中间件接收端,涉及到两个队列暂存队列和交付队列,暂存队列用于存储暂时不能交付到应用程序的消息;交付队列是应用程序接收消息的队列。如下图所示
在接收端中间件收到信息后可执行以下三种操作之一:
-
丢弃信息。如果接收者不再是组的成员,或者信息是重复的,就可以这样做。
-
交付信息。信息被放入FIFO(先进先出)队列,应用程序从中读取传入的组播信息。
-
暂存信息。信息尚未准备好交付给应用程序。
可能因为信息未按预期顺序到达,中间件必须先接收较早的信息。另一种情况是,在将信息传递给应用程序之前,可能需要暂存信息,以获得所有其他成员都已收到信息的反馈。在这种情况下,信息会被放置在后置队列中。当收到下一条信息时,算法可能会检查保持队列,以确定现在是否可以传递或丢弃任何被保持的信息。