- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大数据下的状态机实现
⼤数据下状态机实现
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
• 部署的⼏个关键点 (
文档评论(0)