http知识点整理
目录
[TOC]
从注册中心到 IGMP:集群构建方式的演进与实践
一、集群的构建方式
传统的注册中心方式
原理
传统的注册中心方式存在一个中心化服务,像 ZooKeeper、Etcd 等。节点启动时向注册中心注册自身信息(如 IP 地址、端口、服务名称等),同时从注册中心获取其他节点信息以完成节点发现和集群构建。
优点
- 易于管理:注册中心作为集中管理点,能方便查看和管理集群所有节点信息。
- 可靠性高:借助注册中心的监控和故障转移机制,可保障集群高可用性。
- 解耦服务:服务提供者和消费者通过注册中心交互,无需直接知晓对方信息,降低服务间耦合度。
缺点
- 单点故障:注册中心是系统单点,若出现故障,可能致使整个集群无法正常工作。
- 性能瓶颈:集群规模较大时,注册中心可能成为性能瓶颈,影响系统响应速度。
- 复杂度高:需额外维护注册中心,增加系统复杂度和运维成本。
TCP 模式
原理
TCP 模式下,节点要预先配置种子节点列表。新节点启动后尝试连接种子节点,通过种子节点获取集群中其他节点信息来加入集群。
优点
- 不受网络限制:不依赖网络多播功能,适用于各种网络环境。
- 精确控制:可精确控制节点加入顺序和集群规模,便于管理。
缺点
- 配置复杂:需预先知晓种子节点信息,配置相对复杂。
- 种子节点故障影响大:若种子节点出现故障,可能影响新节点加入。
组播方式
原理
组播方式基于 IGMP(Internet Group Management Protocol,互联网组管理协议)。节点通过向特定多播组地址和端口发送、接收消息实现节点发现和集群构建。新节点启动时向多播组发送宣告消息,其他节点接收后将其加入集群。
优点
- 配置简单:无需预先知道其他节点信息,新节点可自动发现集群中的其他节点。
- 自动扩展:新节点加入集群无需人工干预,系统可自动扩展。
缺点
- 网络依赖:依赖网络多播功能,部分网络环境(如云环境、部分企业网络)可能不支持多播。
- 网络流量问题:多播消息在网络中传播,可能产生大量网络流量,影响网络性能。
二、再谈节点发现的组播和 TCP 模式
组播模式(IGMP 实现)
启动
当节点启动并配置为组播模式时:
- 加入多播组:操作系统层面,节点网络接口通过 IGMP 协议向本地路由器发送加入特定多播组请求。
- 监听多播端口:节点在配置的多播端口监听针对该多播组的消息。
发现
- 发送宣告消息:新节点启动后,构造含自身信息(如 IP 地址、端口等)的宣告消息,封装成网络数据包,目的地址设为配置的多播组 IP 地址,源地址为自身 IP 地址,端口号为配置的多播端口,然后发送到本地网络。
- 接收消息并处理:其他节点在监听端口接收到新节点宣告消息后,根据目的地址和端口号过滤,将符合条件的数据包传递给框架(如 Hazelcast)解析,提取关键信息,将新节点加入本地集群节点列表。
数据同步
节点通过组播消息进行数据同步。如节点状态变化时,向多播组发送状态更新消息,其他节点接收后更新本地集群状态信息,保证各节点对集群状态认知一致。
消息处理
- 消息封装与解析:框架(如 Hazelcast)将需发送信息封装成特定格式消息,含元数据标识消息类型和用途;接收消息后进行解析提取关键信息。
- 业务逻辑处理:依据消息类型和内容执行相应业务逻辑,如接收新节点宣告消息将其加入集群,接收状态更新消息更新本地集群状态。
错误处理和重试机制
- 错误检测:框架监控组播消息发送和接收过程,检测错误,如多次发送失败或消息格式错误,触发错误处理逻辑。
- 重试机制:出现错误时,尝试重新发送消息或采取其他恢复措施,确保消息正常传递和处理,保证集群稳定性和一致性。
健康检查
节点间定期通过点对点方式发送心跳消息进行健康检查。若一定时间未收到某节点心跳消息,认为该节点故障,将其从集群节点列表移除。
TCP 模式
启动
节点启动后读取配置的种子节点列表。
发现
- 连接种子节点:新节点尝试与种子节点建立 TCP 连接,成功后向其发送请求获取集群其他节点信息。
- 获取节点信息:种子节点收到请求后,将自身维护的集群节点列表发送给新节点。
- 加入集群:新节点收到列表后,尝试与其他节点建立连接,完成节点发现和集群加入过程。
数据同步、消息处理、错误处理和重试机制、健康检查
与组播模式类似,但消息通过 TCP 连接传递,而非组播。
三、引入 Hazelcast 框架和 Vert.x 实现一个简单的分布式系统
原理
Hazelcast 是开源的分布式内存数据网格,提供分布式数据结构和集群管理功能。Vert.x 用于在 JVM 上构建响应式、分布式和高性能应用程序。结合二者可实现简单分布式系统,利用 Hazelcast 集群管理功能实现节点发现和数据同步,用 Vert.x 构建业务逻辑。
示例代码
1 | import io.vertx.core.Vertx; |
代码解释
- 配置 Hazelcast:创建 Hazelcast 配置对象,禁用 TCP 发现机制,启用多播发现机制,配置多播组 IP 地址和端口。
- 创建 Hazelcast 集群管理器:用配置好的 Hazelcast 配置对象创建集群管理器。
- 配置 Vert.x 选项:将 Hazelcast 集群管理器设置到 Vert.x 选项中。
- 创建集群化的 Vertx 实例:调用
Vertx.clusteredVertx方法创建实例,根据结果处理。
四、总结
本文介绍了传统注册中心方式、TCP 模式和组播方式三种集群构建方式,分析了各自优缺点。重点阐述组播模式下基于 IGMP 协议的节点发现过程,涵盖启动、发现、数据同步、消息处理、错误处理和重试机制及健康检查等方面。还引入 Hazelcast 框架和 Vert.x 实现简单分布式系统并给出示例代码。
不同集群构建方式适用于不同场景,传统注册中心方式适用于对管理和可靠性要求高的场景;TCP 模式适用于网络环境复杂、需精确控制的场景;组播方式适用于配置简单、自动扩展需求高的场景。实际应用中,需根据业务需求和网络环境选择合适方式。结合 Hazelcast 和 Vert.x 可方便构建分布式系统,利用其功能实现节点发现、数据同步和业务逻辑处理。