📜  分布式系统中的进程寻址

📅  最后修改于: 2022-05-13 01:56:12.468000             🧑  作者: Mango

分布式系统中的进程寻址

在本文中,我们将详细介绍分布式系统中涉及通信的寻址过程的概念。

在基于消息的通信系统中,另一个重要问题是命名或解决通信中涉及的进程。以下是这两个 消息处理寻址支持的寻址方案类型:

  • 显式寻址
  • 隐式寻址

显式寻址:在显式寻址方案中,有一个明确的过程规范,作为所使用的通信原语中的参数。显式寻址中使用的原语如下:

  • Send(process_id, message):将消息发送到 process_id 被指定为参数的进程。
  • Receive(process_id, message):从 process_id 指定为参数的进程接收消息。

隐式寻址:在隐式寻址方案中,不需要在使用的通信原语中明确指定要与另一个进程通信的进程作为参数,而是指定 service_id。隐式寻址中使用的原语如下:

  • send_any(service_id, message):将向任何提供service_id类型对应服务的进程发送消息。在这个原语中,发送者命名一个服务来代替进程。它在客户端-服务器通信中找到了它的应用,在这种通信中客户端最不关心提供服务的一组服务器中的哪一个服务器。
  • Receive_any(process_id, message):它接收来自任何发送进程的消息,然后返回发送该消息的进程的process_id。在这个原语中,接收者可以从任何进程接收消息。它在客户端-服务器通信中找到它的应用程序,在这种通信中,所有授权的客户端都从服务器接收服务。

进程寻址的方法:

machine_id@local_id:此方法使用机器和本地 id 来识别进程。 machine_id 是指接收方机器的地址,用于发送机器发送消息,local_id 是指接收进程的process_id 或端口标识符或名称。

示例:Berkeley Unix 提供 32 位 IP 地址和 16 位 process_id 或 local_id(IP 地址、端口号)。

优势:

  • 为了解决这些过程,这种方法不需要全局协调。

坏处:

  • 此方法不允许迁移进程。

machine_id1@local_id@machine_id2:此方法为迁移的进程提供了一个额外的 machine_id 字段。这就是它被称为基于链接的寻址的原因。 machine_id1 识别创建进程的节点或机器,local_id 由创建进程的机器生成。这里 machine_id2 指的是创建进程的最后一个已知位置。它用于进程迁移的情况下,因为当一个进程迁移到另一台机器时,它会留下由当前机器迁移到的节点的machine_id组成的链接信息。此链接信息的目的是在任何时候都可以将需要的消息转发到迁移的进程。

优势:

  • 它允许进程迁移。

缺点:

  • 由于进程的多次迁移,它变成了位置开销。如果由于进程执行的原因导致机器停机,则很难找到进程。

位置透明进程寻址:

在位置透明进程寻址机制中,当一个进程愿意向另一个进程发送消息时,只需给该进程一个高级名称,然后由名称服务器将其映射到其低级名称。为了将来参考,发送内核也可以缓存映射,从而消除再次联系名称服务器的需要。

寻址过程中的一个重要目标是提供位置透明度。实现这一目标最常用的方法是使用进程的两级命名方案和名称服务器将高级的、与机器无关的进程名称映射到它们的低级、与机器相关的名称。在 DEMOSIMP 和 Charlotte 中使用了这种进程寻址方法的变体。尽管这种进程寻址方法支持进程迁移工具,但它存在两个主要缺点:

  • 如果进程在其生命周期内迁移了多次,则定位进程的过载可能会很大。
  • 如果进程在其生命周期内曾经驻留的中间节点出现故障,则可能无法定位进程。