您的位置:首页 > 其它

全量数据接入——设计方案

2018-03-31 01:18 357 查看
全量数据接入的过程本质上是数据集群件复杂的事件同步与时间相应的过程,涉及到触发、反馈、反馈状态检查、分批等。因此,需要有一个事件控制组件作为基础。

一、事件控制组件

1.1 使用zk同步数据

zk路径规划:

${zk_base}/${event_group}/${date}/${event_name}/${event_version}.info

说明:${event_version}.info可用于传递信息,由脚本自行解析

1.2 行为定义

1、触发事件(trigger)

输入参数:event_group、event_name、date、event_version

输出参数:触发是否成功(true/false)

说明:触发事件

2、删除事件(fade)

输入参数:event_group、event_name、date、event_version

输出参数:删除是否成功(true/false)

说明:删除已发生事件

3、监听事件(listen)

输入参数:监听配置

输出参数:事件是否发生(true/false)

说明:

(1)监听事件是否被触发

(2)监听配置包含:内部事件/外部事件、事件监听脚本(仅外部事件)、{event_group、event_name、date、event_version}(仅内部事件)、timeout、脚本垂直触发/水平触发、正向触发/反向触发、关联响应事件行为、多个被监听事件的OR/AND逻辑等

(3)时间监听脚本输出参数应符合组件框架格式

4、响应事件(respond)

输入参数:事件响应脚本

输出参数:事件响应成功或失败(true/false)

说明:输出参数应符合组件框架格式

1.3 交付形式

以二方库的形式交付,在组件的基础上封装成服务

链式调用:listen(event0/script)->respond(script)->trigger(event1)-> fade(event4)

说明:

(1)通过配置实现热加载

(2)成功则继续,失败则退出

二、数据接入服务

2.1 切换索引

下文outer_listen表示外部监听,inner_listen表示内部监听

1、sn触发“监听开始”事件

定时任务->trigger(${hostname}_want_to_pull)

2、index_server收集sn机器信息

定时任务->inner_listen(${hostname}_want_to_pull)

说明:index_server记录参与分发/切换的机器列表,${hostname}_want_to_pull中携带希望pull的索引版本信息

1、索引构建完成

outer_listen(index_build_done)->trigger(index_data_publish)

2、sn机器拉取数据

inner_listen(index_data_publish)->respond(pull_index_data_script)-> trigger(\${hostname}_pull_done)

说明:每个机器触发和自己机器名相关联的事件,方便index_server处理

3、index_server检查数据分发状态

inner_listen(\${hostname}_pull_done)->respond(check_distribution_condition)

说明:监听所有机器列表中的机器,检查是否合法

4、index_server触发分批切换

接上一步->respond(switch_index)-> trigger(\${hostname0}_switch)-> respond(check_switch_condition)->trigger(\${hostname1}_switch)-> respond(check_switch_condition)->……->done

说明:index_server完成分组等逻辑后,开始切换

2.2 切索引上线

1、sn机器装conf包

说明:conf文件中写明需要的索引版本信息(zk路径表示)

2、重启sn服务

3、sn启动时自动检查本地索引版本是否匹配

4、若不匹配,使用新的conf拉取索引,并触发切换

三、问题汇总

1、需要索引目录中携带版本信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: