面试系列——直播间消息组件优化

Posted BridgeGeorge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试系列——直播间消息组件优化相关的知识,希望对你有一定的参考价值。

背景

早期业务扩展快,短平快无法 代码耦合度高,自研IM组件 和国外版本的开发 导致切换成本过高 需要重构;
直播间 人数较多时,用户反馈 较为明显的卡顿和不问题,一些中低端机明显;

IM 消息组件优化

定位问题,CPU Profile 发现存在的明显的内存抖动 线下压测不够充分;
IM 消息体 属于大对象,持有用户对象实体和各种附加信息,而且不能简单做精简,然后在高频场景下内存需要频繁申请内存;
针对此条件做对象池缓存,对象复用,用完立即回收,解决内存抖动问题;

线下制作做压测工具

  1. 开发帧率监控模块
  2. 自动消息生成器 mock 消息 定时器产生消息

消息策略优化

  1. 定时刷新策略可控 文本消息 避免消息风暴 每秒最多50条 ,淹没不影响。
  2. 端上限制发送发言频率 服务端丢弃无效消息(低等级不活跃用户) 保证到端上消息可控 保证 瞬间消息 不超过500条 10s 可以处理完。
  3. 高优消息优先级排序 优先级一致 按照发送时间,返回端上 。
  4. 设计一个生产者消费者阻塞队列 IM 消息组件作为生产者 有一个 消息 disptacher 作为消费者 定时去取。

消息展示控件优化

  1. 优化层级 采用自定义 组合view;
  2. 去除没必要的重复 merge 标签;
  3. 避免过度绘制,红色背景–> 转为绿色;
  4. getView 中 一些复杂判断逻辑 没必要每次调用的 放到外部;
  5. 删除无效的逻辑和旧版本的过时逻辑代码;

以上是关于面试系列——直播间消息组件优化的主要内容,如果未能解决你的问题,请参考以下文章

面试系列——直播模块设计总结和思考

iOS直播Liveroom组件,游客,用户多次切换登录同一直播间,消息出现多次重复问题解决

面试系列——直播模块设计总结和思考

Java面试——RabbitMQ系列总结

Java面试——RabbitMQ系列总结

大牛剖析分布式消息队列Kafka