全量数据接入——设计方案
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、需要索引目录中携带版本信息
一、事件控制组件
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、需要索引目录中携带版本信息
相关文章推荐
- 数据字典项 设计实现方案
- Atitit.数据操作dsl 的设计 ---linq 方案
- 应用开发中数据字典项设计实现方案
- 以XML为数据传输格式的Web service设计方案
- 数据仓库中,缓慢变化维的一种设计方案
- Atitit.数据操作dsl 的设计 ---linq 方案
- 中国联通北京公司数据机房UPS系统设计方案
- 关于流程年度数据结转方案与设计
- 一次oracle数据库大数据表的分区方案设计,以及所踩的坑
- 审批流程设计方案-数据(二)
- Atitit.数据操作dsl 的设计 ---linq 方案
- 流数据缓冲库设计方案
- 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
- 上拉显示更多,下拉显示最新数据设计方案
- 以XML为数据传输格式的Web service设计方案示列
- 胖子哥的大数据之路(12)-三张图告诉你大数据安全方案设计
- 数据库同步中差异数据捕获方案设计与实现
- 数据共享方案设计
- 关于项目中的DAL数据接入层架构设计
- 行政区划数据方案设计