分布式支撑平台 elastic-platform

1. 背景

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

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

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

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

2. 参考和术语

分布式

分布式协调/zookeeper

3. 分布式支撑服务

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

分布式支撑平台 elastic-platform

下面每一个服务详细介绍

3.1 命名约定

1 服务类 Service后缀

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

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

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

3.2 上下文

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

分布式支撑平台 elastic-platform

RegistryInstance格式:ip@-@jvm Id

3.3 znode结构

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

分布式支撑平台 elastic-platform

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

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

/regname 应用根节点,支持多租户;可设置disabled值,通知应用各实例应用停止

/regname/config 配置域,应用写入配置 (如果有)

/regname/leader 主节点域,需要分布协调的事,如,分片服务,实例下线,调解服务

/election 选主域

/instance 主节点Id 格式 ip@-@jvmId

/latch 选主节点

/sharding 分片标记

/processing 分片处理中标记

/regname/instances 运行实例

/instanceId 参与任务的实例,格式 ip@-@jvmId

/regname/servers 节点(服务器)域,

/serverIp 参与分布式任务的机器ip,值:”enabled”:”disabled”,该节点是否参与regname的应用

/regname/sharding 分片域,分片/分片分配/分片状态

/{itemNum} 分片,编号,值:字符串,分配内容

/instance 分片分配给实例

/running 分片执行状态

/failovered 记录失效转移,值:instanceId;… 多个实例Id,分号分隔

/misfired 错过调度,用户应用写入和使用,平台只辅助记录

/completed 分片完成标记

3.4 znode服务

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

分布式支撑平台 elastic-platform

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

ZNodeService znode”业务”方法

executeInLeader 主节点选举,封装curator

addDataListener 注册 znode监听

executeInTransaction znode读写事务

AbstracNodeListener znode 事件监听器基类

LeaderExecutionCallback 主节点选举后回调

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

3.5 监听管理服务

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

分布式支撑平台 elastic-platform

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

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

AbstractNodeListener 监听器实现基类

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

Ø 关联znode

N/A

Ø 依赖服务

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

Ø 被依赖服务

绝大部分服务

3.6 选主服务

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

分布式支撑平台 elastic-platform

ElectionListenerManager 监听管理器

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

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

Ø 关联znode

A)

分布式支撑平台 elastic-platform

latch 选主节点

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

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

分布式支撑平台 elastic-platform


Ø 依赖服务

znode服务

监听服务

Ø 被依赖服务

分片服务

失效转移

3.7 实例服务

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

分布式支撑平台 elastic-platform

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

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

Ø 关联znode

分布式支撑平台 elastic-platform

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

3.8 节点服务

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

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

分布式支撑平台 elastic-platform

Ø 关联znode

分布式支撑平台 elastic-platform

3.9 分片服务

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

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

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

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

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

分布式支撑平台 elastic-platform

ShardingService 分片/分片分配

ShardingExecutionService 辅助/协调分片执行

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

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

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

Ø 关联znode

分布式支撑平台 elastic-platform

3.10 失效转移服务

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

分布式支撑平台 elastic-platform

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

FailoverService 失效转移在主节点执行

Ø 关联znode

失效转移记录

分布式支撑平台 elastic-platform

监听实例,触发失效转移

分布式支撑平台 elastic-platform

3.11 诊断服务

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

1. 离线实例分配了分片

2. 有空闲实例

3.12 配置服务

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

分布式支撑平台 elastic-platform

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

ConfigurationService 写入配置

3.13 设置服务

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

分布式支撑平台 elastic-platform

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用户实现

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章