分享实时最近 60 秒曲线存储与前端展示的经验

2016-03-06 12:03:16 +08:00
 lianghui
前段时间在 V2EX 上请教过这个实现的一些方案

链接
https://v2ex.com/t/236160#reply17

问题前景可以描述如下:

有 100 个产品,需要知道每个产品最近 60 秒的每秒请求负载数,并且可以看全国 400 个主要城市下以及华北,华东等聚合大区的负载指标。

分产品和城市储存的话 400*100 = 4w 个 k/v 数据 每秒写入 4w 条数据,对于任何数据库都是非常有挑战的 (放弃)

分产品存储,把同一时间戳各个大区和城市的指标聚成一条记录: 400 条每秒的记录量,数据库写入毫无压力。

为什么放弃 list 或者 有序集合, 因为需要多余的机制保证删除过期的数据,而使用 redis 过期 k/v 存储策略 ( 120 秒过期)能更好完成这项需求实现。(这些数据也会实时落地插入到 mysql 等备份)。

当展示最近 60 秒的数据时,我们发现可以在服务层缓存使用前 59 秒从 redis 已经拉取的数据。所以只要在服务后端加上一个内部缓存就可以加速数据的前端展示,因为后面的前端发请求带上时间戳,只要给时间戳后到现在时间几秒的数据(主要考虑到用户的网络延迟,大多数时间都是下一秒的数据)。最后当用户首次打开前端时,在网络正常的情况下,展示 60 秒数据也不到 0.03s 。 已经很好的满足用户的刷屏感。


核心部分还是服务内部缓存,其实如果使用数据直接存 mysql 在比较少用户时同样可以达到每秒刷新展示性能,但因为考虑到高峰期负载问题,所以使用 redis.
1707 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/261462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX