大数据下的状态机实现.pdf
文本预览下载声明
⼤数据下状态机实现
Lotuseed-AIDA(⾸席架构师)
背景
常⻅的场景
• 实时流计算
• 批处理的中间结果
• 有上下⽂关系的中间态
• 字典数据
常⻅的痛点
• 回滚⾄某个时间点(BUG)
• 性能
• 不能查询历史
• 丢失部分状态数据
设计思路
缓存思路
• 读写⾼效
• 热点数据
• 允许core
• 定期清理
存储思路
• 全量存储
• 周期内变更明细
• 明细查询
• merge
实现
逻辑结构(⼀)
• cache_state管理服务
ClientsLib
• 从队列获取数据批量的存储
到存储服务器
caches queues
• 管理数据的merge
• ClientsLib库 cache_state
• 从性能⾓度出发
data storage
• 为了更好的兼容性,可以独⽴
成⼀个proxy的服务
逻辑结构(⼆)
• Caches
ClientsLib
• memcached、redis, etc.
caches queues
• Queues
• redis、kafka、zeromq, etc. cache_state
• data storage
data storage
• postgresql, etc.
ClientLib
• state_cache_query
• ⾸先查cache
• 缓存⽆时查db的状态总表
• state_cache_update
• 更新缓存
• push to queue
cache_state(⼀)
• batch insert to table
• 从分组队列中批量获取数据
• 批量的insert到指定的tmp表
• switch
• 定时的对临时表进⾏切换
• 在下次切换前,需检查之前的切换后的临时表是否已merge到总表
• merge
• 对已切换后的临时表中的数据,把最新的数据更新到总表
cache_state(⼆)
• loader
• 缓存异常情况
• 服务重启
• cache2db
• queue异常情况,把cache⾥最新的state数据
insert到db的临时表
部署结构
app service
• 部署的⼏个关键点 (
显示全部