"本文主要介绍了国美在线架构部开发的高性能缓存系统——Gcache,该系统基于Redis构建,适用于大规模集群环境,提供高可用性和伸缩性。Gcache的关键特性包括业务隔离、读写分离、主从模式以及多主模式,通过Zookeeper进行路由管理和配置信息存储。"
Gcache是一个针对大规模业务场景设计的高性能缓存解决方案,它在国美在线的架构中扮演着重要角色。系统的出色性能体现在其高QPS(每秒查询率)峰值,如在2014年11月11日达到了157.5万次/s。Gcache支撑的日均访问量超过100亿,而在促销期间,如11.11活动,访问量更是高达578亿。
在总体架构上,Gcache由多个组件构成,包括客户端(Client)、代理(Proxy)、Redis副本集(RedisGroup)、监控(Monitor)以及Zookeeper。客户端通过Proxy访问Redis服务,Proxy负责将请求分发到相应的RedisGroup。RedisGroup是基于Redis的副本集,可以是M-M(多主)或M-S(主从)模式,确保数据的冗余和可用性。Monitor用于监控Redis的状态,而Zookeeper则存储路由信息和配置参数。
Gcache的高可用性体现在即使在Proxy节点或Zookeeper全部故障的情况下,系统仍能保持运行。Proxy可以动态添加或减少,且会缓存路由信息;而RedisGroup只要有一个节点存活,就可以继续提供服务。此外,Monitor采用双机热备策略,确保监控的连续性。
系统的伸缩性主要通过Proxy和RedisGroup的动态扩展来实现。Proxy可以随时增加机器,客户端通过Zookeeper自动感知变化;RedisGroup可以根据需求增加新的副本集或扩展现有副本集内的Redis节点,特别适合处理读多的业务场景。
在特性方面,Gcache支持业务隔离,通过不同的dbindex将不同业务的数据隔离开。读写分离机制使得写操作在Redis主节点进行,读操作在从节点进行,提高系统并发能力。多主模式允许并行的写入操作,牺牲了一致性但增强了可用性,适合无并发写入的场景。主从模式则保证了数据的一致性,当主节点故障时,可以从节点接管,但可能会有短暂的不可写时间。
Zookeeper在Gcache中起到关键作用,它不仅登记了可用的Redis列表,还存储了如步长、取值范围、异步取ID的阀值等重要配置。Redis生成的ID按其数量错开,这样即使某个Redis节点挂掉,客户端也能无缝切换到其他Redis节点获取ID。
客户端在访问Gcache时,可以选择Redis节点并默认每次取1000个ID,同时支持在ID耗尽时自动切换到其他节点,确保服务的连续性。
Gcache是一个设计精良、性能卓越的分布式缓存系统,通过高效的架构设计和灵活的特性,满足了大规模集群环境中对数据缓存的高要求。