系统该怎样架构才能处理实时热点数据?
关注者
101被浏览
12,81211 个回答
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. 更新淘汰的话
- 缓存设置过期时间,但不建议-会引起雪崩。
- 后台开线程定时或通知清理,更新缓存内容。
- 根据热点数据自动缓存置换。