分布式计算设计
计算流程
- liberator datasource获取用户订阅的subject发布到kafka
- task订阅kafka的subject
- 调用DS进行分组服务
- 调用DS分组计算服务
- 调用DS所有分组服务,获取未订阅组
- 计算订阅比例
- 查询redis上次计算未订阅的时间,满两小时则计算
- 如果没有订阅,计算所以分组
- DS将用户订阅的所有subject
- DS提供将subject分组服务
- bond按国家分组,USD这种特别多的按个数分组USD_1/2/3/...
- DS提供获取所有分组服务
- DS提供分组计算服务
详解
- 解决多个liberator datasource重复发布subject的订阅和退订
- task认为每次订阅推定都有效,忽略个别不匹配情况
- 计算间隔
- 每30秒调用一次,如果正在计算则马上返回,sleep 1s重新寻找,直道找到
- 如何在计算的时候打开断路器,这样就不会得到正在计算的服务了?
- DS每次计算sleep 5s,释放cpu
- 周末重启默认重新订阅,所以无需存储订阅信息
- task不存在kafka消费者增加和减少重新分组问题
订阅与退订
使用Liberator
使用WebScoket
- 前台捕捉用户行为进行unsubscribe
- 条件切换
- portlet 切换
- page切换
- 关闭page
- 心跳维护
- 用户订阅subject,后台返回GUID
- 用户每5分钟发送GUID维护订阅心跳
- 一段时间心跳失败则删除订阅
|
|
|