Geode 使用 TCP 和 UDP 单播和多播的组合进行成员之间的通信。 您可以更改默认行为以优化系统通信。
客户端/服务器通信和网关发送方到网关接收方的通信使用 TCP/IP 套接字。 服务器在发布的地址侦听客户端通信,客户端建立连接,发送其位置。 类似地,网关接收方侦听网关发送方通信并在站点之间建立连接。
在对等系统中,对于一般消息传递和区域操作分发,Geode 使用 TCP 或 UDP 单播。 默认值为 TCP。 您可以将 TCP 或 UDP 单播用于所有通信,也可以将其用作默认值,但可以针对特定区域使用 UDP 多播进行操作分发。 安装的最佳组合在很大程度上取决于您的数据使用和事件消息传递。
TCP
TCP(传输控制协议)提供系统消息的可靠有序传递。如果数据是分区的,如果集群很小,或者如果网络负载不可预测,TCP 比 UDP 更合适。在较小的集群中,TCP 比 UDP 单播更可取,因为它在操作系统级别实现了比 UDP 更可靠的通信,并且其性能比 UDP 快得多。然而,随着集群规模的增加,UDP 相对较小的开销使其成为更好的选择。 TCP 向每个成员添加新的线程和套接字,随着系统的增长导致更多的开销。
注意:即使 Geode 配置为使用 UDP 进行消息传递,Geode 在尝试检测失败成员时也会使用 TCP 连接。此外,TCP 连接的 ping 不用于保持活动状态;它仅用于检测失败的成员。
UDP 单播和多播
UDP(用户数据报协议)是一种无连接协议,它使用的资源比 TCP 少得多。 将另一个进程添加到集群会产生很少的 UDP 消息开销。 然而,UDP 本身并不可靠,并且消息的大小被限制在 64k 字节或更少,包括消息头的开销。 大消息必须分段并作为多个数据报消息传输。 因此,UDP 在许多情况下比 TCP 慢,如果网络流量不可预测或严重拥塞等情况下无法使用。
UDP 在 Geode 中用于单播和多播消息传递。 Geode 实施重传协议以确保通过 UDP 正确传递消息。
UDP单播
UDP 单播是用于一般消息传递的 TCP 的替代方案。 当集群中有大量进程,网络不拥塞,缓存对象很小,应用程序可以给缓存足够的处理时间从网络读取时,UDP 比 TCP 更适合用于单播消息传递。 如果禁用 TCP,Geode 将使用 UDP 进行单播消息传递。
对于每个成员,Geode 为 UDP 单播通信选择一个唯一的端口。 您可以通过在 gemfire.properties 文件中设置 members-port-range 来限制用于选择的范围。 例子:
membership-port-range=1024-60000
注意:除了 UDP 端口配置之外,membership-port-range 属性还定义了用于故障检测的 TCP 端口。 有关 Geode 属性的说明,后面会有详细稳定说明。
UDP多播
一般消息和默认区域操作消息的选项是在 TCP 和 UDP 单播之间。您可以选择将默认设置替换为 UDP 多播,以用于部分或所有区域的操作分发。对于要使用多播的每个区域,您可以在该区域本身上设置一个附加属性。
为区域启用多播后,集群中的所有进程都会接收该区域的所有事件。每个成员都会收到该区域的每条消息,并且必须对其进行解包,安排处理,然后对其进行处理,所有这些都在发现它是否对该消息感兴趣之前进行。因此,多播适用于集群中普遍感兴趣的区域,其中大多数或所有成员都定义了区域,并且有兴趣接收该区域的大部分或所有消息。组播不应用于集群中没有普遍兴趣的区域。
当集群中的大多数进程使用相同的缓存区域并需要为它们获取更新时,多播最合适,例如当进程定义复制区域或将其区域配置为接收所有事件时。
即使您对一个区域使用多播,Geode 也会在适当的时候发送单播消息。如果数据被分区,多播就不是一个有用的选项。即使启用了多播,分区区域仍然使用单播用于几乎所有目的。