首先明确应用缓存的目的,大部分缓存都是内存数据库,并且可以支持非常高的 QPS,所以缓存应用,可以防止海量业务请求击垮数据库,保护正常的服务运行。
其次,在考虑缓存的稳定性时,要从两个方面展开,第一个是缓存的数据,第二个是缓存容器也就是缓存服务本身的稳定性。
从缓存数据的层面,有一个缓存命中率的概念,是指落到缓存上的请求占整体请求总量的占比。缓存命中率在电商大促等场景中是一个非常关键的指标,我们要尽可能地提高缓存数据的命中率,一般要求达到 90% 以上,如果是大促等场景,会要求 99% 以上的命中率。
从缓存服务的层面,缓存集群本身也是一个服务,也会有集群部署,服务可用率,服务的最大容量等。在应用缓存时,要对缓存服务进行压测,明确缓存的最大水位,如果当前系统容量超过缓存阈值,就要通过其他的高可用手段来进行调整,比如服务限流,请求降级,使用消息队列等不同的方式。
缓存的高可用
- 负载均衡: 是否可以通过加节点的方式水平分担读请求压力。
- 分片: 是否可以通过划分到不同的节点的方式水平分担写压力。
- 数据冗余: 一个节点的数据如果挂掉了,其他节点的数据是否可以直接备份挂掉节点的职责。
- Fail-over: 任何节点挂掉后,集群的职责是否可以重新分配,以此保障集群正常工作。
- 一致性保证: 在数据冗余、failover、分片机制的数据转移过程中,如果某个地方出幺蛾子,能否保证所有的节点数据或节点与数据库之间数据的一致性。(依靠 Redis 本身是不行的。)