分布式计算设计

计算流程

  • liberator datasource获取用户订阅的subject发布到kafka
  • task订阅kafka的subject
    1. 调用DS进行分组服务
    2. 调用DS分组计算服务
    3. 调用DS所有分组服务,获取未订阅组
      1. 计算订阅比例
      2. 查询redis上次计算未订阅的时间,满两小时则计算
      3. 如果没有订阅,计算所以分组
  • DS将用户订阅的所有subject
    1. DS提供将subject分组服务
      1. bond按国家分组,USD这种特别多的按个数分组USD_1/2/3/...
    2. DS提供获取所有分组服务
    3. DS提供分组计算服务

详解

  • 解决多个liberator datasource重复发布subject的订阅和退订
    1. task认为每次订阅推定都有效,忽略个别不匹配情况
  • 计算间隔
    1. 每30秒调用一次,如果正在计算则马上返回,sleep 1s重新寻找,直道找到
      1. 如何在计算的时候打开断路器,这样就不会得到正在计算的服务了?
    2. DS每次计算sleep 5s,释放cpu
  • 周末重启默认重新订阅,所以无需存储订阅信息
  • task不存在kafka消费者增加和减少重新分组问题

订阅与退订

使用Liberator

使用WebScoket

  • 前台捕捉用户行为进行unsubscribe
    1. 条件切换
    2. portlet 切换
    3. page切换
    4. 关闭page
  • 心跳维护
    1. 用户订阅subject,后台返回GUID
    2. 用户每5分钟发送GUID维护订阅心跳
    3. 一段时间心跳失败则删除订阅