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

全量数据接入的过程本质上是数据集群件复杂的事件同步与时间相应的过程,涉及到触发、反馈、反馈状态检查、分批等。因此,需要有一个事件控制组件作为基础。
一、事件控制组件
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、需要索引目录中携带版本信息

如果感兴趣,欢迎关注微信技术公众号
全量数据接入——设计方案_第1张图片

你可能感兴趣的:(方法沉淀)