系统该怎样架构才能处理实时热点数据?

后端有大量数据,以1-10k的文件形式存储。其中一部分可以理解为实时热点数据,需求量很大,而且实时性很强,如果只用单机用户的请求将会压垮机器。 现在存…
关注者
101
被浏览
12,812

11 个回答

1. 服务器用 SSD, 不要用 SATA

2. 用 memcache 做缓存层, 更新文件后删除 memcache 缓存即可。

3. 压力继续升高的情况下,通过文件名 hash 到不同的服务器

4. 注意文件打开数,另外,同一个目录下不要放太多的文件。

这个是在不改架构的情况下,如果可以改架构的话 1-10k 的文件,我会直接扔到 mongodb 数据库,然后搭配 memcache 来搞定,前端仍然用 nginx,中间用 go 或者其他语言写一个胶水层即可。

当然也欢迎直接放到七牛云存储。 :)

LRU、LRU-K、2Q、MQ等算法,应该可解决你的两个问题。

====补充===

1. 确定热点数据? 可以根据命中率实现。

2. 热点数据存储建议缓存在本机内存。

3. 如果热点数据较大,用memcache/Redis 存储。

4. 普通文件IO较小,可以不理它。

5. 超热点数据,在redis之上, 加层本机内存缓存(多级缓存设计)。

6. 更新淘汰的话

  • 缓存设置过期时间,但不建议-会引起雪崩。
  • 后台开线程定时或通知清理,更新缓存内容。
  • 根据热点数据自动缓存置换。