新枝科技工作总结

springboot整合druid并开启监控

原因在于项目上线之后,通过了内部小范围测试,但是在面对庞大的用户市场的时候需要记录每个接口的响应速度以及健康状况,所以就需要一个接口流量信息及健康情况的监控平台。于是采用了SpringBoot整合Druid的方案。

  • durid

springboot整合Swagger2组建文档

原因在于公司扩张了前后端的队伍之后,采用原始的电子文档前后端交付的方式不足以满足开发合作的需求,于是采用了SpringBoot整合Swagger2组建文档的方案,使得前后端交付更加便捷且适合大范围的协作。

  • Swagger2

采用OSS策略减轻服务器压力

原因在于服务器储存了大量的图片,且由于服务器的带宽有限,严重影响了用户体验,所以讨论采用图片服务器分离的方式,减轻服务器压力,于是使用了OSS服务改善了用户体验。

  • OSS

采用Redis重构红包池

红包池作为降噪核心算法,其原理为将每个用户的发帖对应一个Redis中的键值对,其键为可唯一标识一篇文章的string,值为当前红包剩余个数,当用户发出文章时,将Redis初始红包数量对应于该用户的影响力。之后若有用户进行文章拉取,则从红包池里寻找有余量的红包,并按照指定数量抽取文章,被抽取到的文章红包数量减一,当用户看过这篇文章并对这篇文章进行点赞时,该文章对应的红包数量加预设值,这样即可使得劣质的信息自然淘汰,使优质的信息更广泛的传播。

Redis格式:文章ID :红包余量

而当我们进入市场的检验时出现了如下的问题:

  • 抽取红包时由于采用的是完全随机算法,使得一篇文章即使是很久远前的,只要有余量,也可能被用户抓取到。这使得用户获取文章的质量下降了。
  • 大量的红包已经没有了余量但是仍然存在于红包池中,使得红包池中存在大量的冗余。
  • 若删除红包会造成这篇文章再次被点赞时出现空指针错误,并且逻辑上红包的生命周期应同步于文章的生命周期。
  • 于是我们更改了Redis的储存格式 Redis格式:发帖时间+文章ID :红包余量。
  • 并采用分代算法,为了平衡新信息与老信息之间的传播效率,我们将红包池逻辑上划分为年轻代与老年代。
  • 当红包池中的新红包数量达到预设值便会统一对红包余量为0的红包进行双清即Redis中删除,并在数据库中为这篇文章添加删除标记。
  • 删除标记的需求来源于对旧信息、垃圾信息的隐藏显示,提升了用户体验,同时也配合红包池机制,防止出现空指针错误,不直接删除是为了用户对创作内容具有所有权利。
  • 完成清除后将这一批文章置于逻辑上的老年代,并对包括这一批在内的所有老年代红包数减去预设值,在用户抓取文章的时候按预设比例抓取年轻代与老年代的文章。
  • Redis中记录了当前红包个数,以及老年代的划分时间。

  • Redis

采用Redis储存热点数据

原因在于对接口的监控过程中,发现部分接口等待时间太长,然后通过分析发现,部分数据被大量使用且每次需要时直接从数据库拉取,为了加快响应速度,减轻数据库查询压力,对热点数据进行缓存处理。

  • Redis