集群实现细节(3)-DB 集群
文章目录
纯 Redis 集群
如果 Redis 不止做 Cache,也做持久化,那就得好好算算我们的业务规模需要多少台机器来支撑。1000w 注册玩家,每台机器 16G 内存(为了保证效率取 3/4 为可用,即 12G)。
如果每个玩家 1M 数据,总约 9765G,不算热备,需要 814 台机器。每台机器存储 1.2w 人。
如果每个玩家 16k 数据,总约 153G,不算热备,需要 13 台机器。每台机器存储 77w 人。
如果每个玩家 1k 数据总约 9.5G,不算热备,需要 1 台机器。每台机器存储 1000w 人。
注册玩家会越来越多的……
MySQL 做持久化,Redis 做 Cache
只说存储,一个 MySQL 支持几 T 数据没什么问题。例如上边 1000w 注册玩家,每个玩家 1M 数据,总数据近 9.5T,存一个 MySQL 足够。但是如果高峰在线玩家并发到 100w,需要将大部分操作规划到 Redis 这个 Cache上。否则 MySQL 仍然因磁盘 IO 太多吃不消。
与纯redis集群相比的劣势
- 好友需要看离线玩家的信息,而离线玩家在 MySQL 里,如果频繁? 把离线玩家可能被别人查看的信息不存 MySQL 了,改用 Redis 做持久化。
- GM 工具改玩家消息,需要改 MySQL 和 Redis 的 Cache 里。会不会容易出问题?
优势
- Redis 只做 Cache 集群了,用 Twemproxy 管理就行了。如果 Redis 做持久化,还是需要自己来分片,且早期就要规划好。
- 单个玩家的数据涨到 1M 的时候,总用户涨到 2000w~3000w,再加两个 MySQL。
Redis 做 Cache + 热数据持久化,MySQL 做冷数据持久化
这里其实就是将二里边的每个玩家的部分很热的数据从 MySQL 移到 Redis 里做持久化。但是玩家在线时,他的数据基本都算是热的。所以这个方案不是很好设计。
参考
- Redis 官方关于分片的文章:
http://redis.io/topics/partitioning
- Twemproxy文章:
http://antirez.com/news/44