之前

image.png

难点

  • 业务层面:1.课程小节类型多 2.涉及业务广:C端课程进度、完成情况、学习记录;B端课程、计划学习数据统计
  • 技术层面:数据更新频繁(单机150qps,8服务)

重构:

image.png

image.png

1.LearnDurationConsumer(写缓存)

  • 业务层面:1.从使用频率低的文章小节入手;2.特殊场景处理:观看跨小时问题,课程完成判定等
  • 技术层面:LinkedHashMap localDataMap(作为LRU,设置accessOrder=true,重构removeEldestEntry)

2.生产者(数据同步至db)

采用部分同步+全同步的机制,同步时清理localDataMap

  • 部分同步的取数逻辑:1.轮询集合中最新的350个元素,从中筛选cost>60s的50个元素 2.50个超过150s的老元素(全同步时,策略变为500个老元素)
  • 全同步的触发时机:1. localDataMap数据超限,执行removeEldestEntry 2.tomcat服务结束回调 3.部分执行时有3%概率
  • 同步db时由异步线程统一执行(子、主表一条sql)

重构2.0(构想):

image.png


青鱼
268 声望25 粉丝

山就在那里,每走一步就近一些