美文网首页轻巧
分布式支撑平台 elastic-platform

分布式支撑平台 elastic-platform

作者: 中间件XL | 来源:发表于2022-07-08 10:34 被阅读0次

    分布式是重要的,分布式开发是困难的。

    分布式是重要的,随着请求,数据的规模越来越来大,单节点已不可能处理,需要大量的节点合力共同完成,分布式系统协调管理大规模节点集合,使用分片,分片容错等机制实现请求的分片分流处理,满足大规模请求,大规模数据的处理性能

    分布式开发是困难的,分片,分片容错,节点管理(服务节点上下线),不一致处理,监控等,每一项都是复杂的课题

    分布式支撑平台封装分布式开发需要的服务,大大降低开发难度

    2. 参考和术语

    分布式

    分布式协调/zookeeper

    3. 分布式支撑服务

    分布式开发平台为开发分布式服务提开箱即用的服务组件,下图是分布式服务全家福

    下面每一个服务详细介绍

    3.1 命名约定

    1 服务类 Service后缀

    2 znode类 Node/Path后缀,封装zk节点管理,zk节点路径

    3 监听管理器类 ListenerManager 管理各服务监听器

    4 监听器类 NodeListener 核心服务大多使用监听服务监听zk变化实现分布式协调

    3.2 上下文

    应用(RegistryInstance)启动时注册到上下文,缓存应用运行状态

    RegistryInstance格式:ip@-@jvm Id

    3.3 znode结构

    平台使用zookeeper分布式协调,znode结构设计是关键,通过持久节点,临时节点,监听等机制实现分布式协调

    * 表示该节点是集合,与父节点是一对多关系

    ** 表示该节点的值可多个,以”;”分隔

    3.4 znode服务

    znode服务负责znode读写,znode监听器注册

    RegistryCenter/CoordinatorRegistryCenter 底层分布式节点(znode)读写封装,抽象为接口,但按照zookeeper模式设计,事实上只有zookeeper实现

    ZNodeService znode”业务”方法

    executeInLeader 主节点选举,封装curator

    addDataListener 注册 znode监听

    executeInTransaction znode读写事务

    AbstracNodeListener znode 事件监听器基类

    LeaderExecutionCallback 主节点选举后回调

    TransactionExecutionCallback znode事务操作,配合executeInTransaction的回调接口,应用实现该接口实现znode读写事务

    3.5 监听管理服务

    监听管理服务,统一管理监听管理器,启动和初始化;用户开发的监听器,监听管理在此接入

    ListenerController 监听器控制,开启和初始化监听管理器

    AbstractListenerManager监听管理器实现基类,负责管理监听器

    AbstractNodeListener监听器实现基类

    RegistryCenterConnectionStateListener zk client断连/连上监听器,支持用户自定义回调

    Ø 关联znode

    N/A

    Ø 依赖服务

    znode服务 设置监听器,监听znod变更

    Ø 被依赖服务

    绝大部分服务

    3.6 选主服务

    主节点执行是分布式系统协调的关键手段,保证集群同一实际只有一个节点执行

    ElectionListenerManager 监听管理器

    LeaderElectionJobListener 监听服务器(server)节点,若变更为”enabled”,发起选主LeaderAbdicationJobListener 自身disabled,主动退位

    LeaderElectionExecutionCallback 选主后的回调,判断自身是否选手,是,写入自己的instanceId

    Ø 关联znode

    A)

    latch 选主节点

    instance 成为主节点的运行实例,写入实例Id

    B) 监听服务器使能状态变更,发起选主或退位

    Ø 依赖服务

    znode服务

    监听服务

    Ø 被依赖服务

    分片服务

    失效转移

    3.7 实例服务

    运行实例注册,实例是进程级,实际执行应用的分片

    InstanceDownStatusJobListener 实例下线监听器,用户实现

    *实例下线分片转移,放在失效转移模块

    Ø 关联znode

    实例注册,写入如instanceId,临时节点

    3.8 节点服务

    服务器节点服务,注册服务节点,服务使能,获取可用运行实例,可用运行实例是分片目标

    一个服务器可有多个运行实例,服务器的disabled,该服务器上的运行实例也不可用

    Ø 关联znode

    3.9 分片服务

    分片是分布式任务不可或缺的特性,应用分片待处理资源,多实例并行执行,提高整体处理能力,分片伴随弹性计算,节点发现,分片容错等能力,是分布式系统的核心体现

    elastic-platform分片服务动态按需分片,起始分片按batchSize分配,后续运行实例执行分片完成再触发分配,这样好处:

    1. 弹性计算,新上线的实例立即参与计算

    2. 防止分配倾斜,有些分片耗时间,其他实例执行完,有些实例还剩大量分片,大大降低整体处理时间

    *延时分配,分批写入分片,减少分片节点

    ShardingService 分片/分片分配

    ShardingExecutionService 辅助/协调分片执行

    WriteShardingTransactionExecutionCallback 初始写入分片,主节点事务执行

    AssignShardTransactionExecutionCallback 分配分片,支持全运行实例,指定运行实例

    ShardCompletedNodeListener 监听分片完成状态,触发实例再分片

    Ø 关联znode

    3.10 失效转移服务

    失效转移在实例下线后,注销该实例未完成的分片,等待重新分配

    InstanceCrashNodeListener 实例奔溃(下线)监听器

    FailoverService 失效转移在主节点执行

    Ø 关联znode

    失效转移记录

    监听实例,触发失效转移

    3.11 诊断服务

    分布式环境复杂性,监听失效,出现无法自行修复的问题,需要额外诊断检查和修复

    1. 离线实例分配了分片

    2. 有空闲实例

    3.12 配置服务

    配置服务写入配置,监听配置变化(热配置)

    XxxConfigChangeNodeListener 应用实现,监听配置变化

    ConfigurationService 写入配置

    3.13 设置服务

    SetupService 初始化环境和设置其他服务

    3.14 快照/摘要服务(TODO)

    zookeeper快照,展示应用注册状态,分片状态,分片执行状态

    快照服务是socket服务,接受命令行打印zookeeper节点信息

    快照服务输出为字符串,不方便业务使用,需要改为json

    3.15 metrics服务(TBD)

    引入metrics-exporter,

    输出度量指标:以作业为单位,分片燃烧进度,聚合

    代码库

    TBD

    附录

    Ø zk主节点执行

    1. ZNodeStorage.executeInLeader

    2. LeaderService.isLeaderUntilBlock

    平台有两种模式的主节点执行,前者排队进入,即,可多个调用进入;后者只有一个调用者进入

    Ø zk事务执行

    平台支持zk事务写入znode

    nodeStorage.executeInTransaction(

    new TransactionExecutionCallback());

    其中TransactionExecutionCallback用户实现

    相关文章

      网友评论

        本文标题:分布式支撑平台 elastic-platform

        本文链接:https://www.haomeiwen.com/subject/junmbrtx.html