随着互联网应用的飞速发展,在线存储系统面临着极其严峻的挑战,尤其是在低延迟、高并发读写需求的背景下。作为全球领先的出行平台,优步在其庞大的业务体系中,对数据存储和访问的性能要求极为苛刻。为了满足微服务架构下日益增长的访问量,优步提出并实现了独特的数据存储和缓存解决方案,成功支撑了每秒超过4000万次的在线数据读取。本文将深入探讨优步如何利用其自主研发的分布式数据库Docstore以及集成缓存CacheFront,构建高性能、可扩展且成本高效的在线存储体系。 优步的Docstore数据库是建立在MySQL基础之上的分布式数据库系统,专门针对支持微服务调用及海量数据量而设计。自2020年推出以来,Docstore已经历了持续的扩展和优化,存储规模达到数十PB,处理请求量已经攀升至数千万每秒级别。
Docstore体系结构包括无状态查询引擎层和有状态存储引擎层两大核心部分。查询引擎负责请求的解析、路由、分片管理和身份验证等功能,而存储引擎则通过Raft协议实现数据一致性、复制、事务和并发控制。数据被分割成多个分区,每个分区采用一个主节点和两个从节点的布局,利用NVMe SSD实现高吞吐和低延迟的磁盘访问。 然而随着业务的复杂性增加以及读请求量的激增,基于磁盘的存储已经逐渐暴露出瓶颈。单纯依赖垂直扩展(提升硬件性能)和水平扩展(增加分区数和节点数)都面临成本高昂、运维复杂以及响应速度提升有限的挑战。此外,读请求往往远超写请求的数量,导致数据库节点在处理热门热点数据时负载不均。
传统的微服务缓存方案虽然部分缓解了压力,但由于各团队分散管理缓存,缓存失效逻辑不统一以及跨区域故障恢复难以保证缓存热度,这些问题逐渐积累,影响系统的整体效率。 针对上述难题,优步设计并推出了集成缓存解决方案CacheFront,专门针对Docstore数据库的读取操作进行加速。CacheFront旨在降低数据库层负载,减少对存储引擎的垂直或水平扩容需求,同时保证缓存的一致性和高效性。该缓存方案与Docstore查询引擎无缝集成,既不增加应用层的复杂度,也支持按数据库、表甚至单个请求灵活开启或关闭缓存策略,充分满足不同业务场景对数据一致性强弱的需求。 CacheFront采用缓存旁路策略,先尝试从Redis缓存获取请求的数据,如果缓存命中则快速返回,未命中部分则回源查询Docstore,再异步更新缓存,确保后续请求能够加速响应。为了应对数据写入带来的缓存失效问题,优步利用Docstore的变更数据捕获机制Flux,从MySQL二进制日志(binlog)中获取事务变更事件,及时通知缓存更新。
这样不仅避免了缓存和数据库的不一致,还缩短了缓存失效检测时间至秒级。 由于读写操作可能会并发对缓存造成写入冲突,优步设计了基于时间戳的版本控制机制,使用Redis Lua脚本对写入进行原子性判断,确保缓存中始终存放最新数据版本。此外,CacheFront提供了强一致性API接口,支持某些业务场景实现读写后立刻刷新缓存,满足关键数据的“读写自洽”需求。 CacheFront还面临跨地域高可用与缓存热备的挑战。Docstore采用两地多活的部署架构,当一地失败时,另一地必须无缝承担全部请求。为此,优步创新性地实现了缓存预热机制,将Redis写事件跨区域复制,但不直接写入远端缓存,而是通过触发缓存穿透到数据库的读请求,惰性填充远端缓存。
此策略保证了数据的地域一致性,避免同时存在多套独立复制机制引发的数据不一致,同时通过只复制缓存键而非值,极大减少跨区网络带宽消耗。 在负面缓存方面,CacheFront同样实现了非存在数据的缓存,避免大量读取不存在的数据而频繁访问数据库,进一步优化系统性能。 针对Redis集群可能的节点故障,CacheFront引入了基于滑动窗口的熔断器机制,监控节点错误率,当超过阈值时自动短路请求,快速失败避免额外延时和压力扩散。此举保障了缓存层的稳定性和响应速度,同时配合自适应超时策略,动态调整Redis请求的超时阈值,兼顾高缓存命中率和尾延时控制。 CacheFront在设计上还充分考虑了分布式缓存的扩展性,对多个Redis集群进行了分片管理,并在分片规则上与Docstore数据库分片方案错开,通过分区键控制访问,避免某单一Redis集群故障时使数据库单点负载激增,提升系统抗压和容错能力。 实践证明,CacheFront使得以往需要超大计算资源的数据库集群负载得以显著下降。
通过缓存命中率达到99.9%,优步某大型业务场景可以用3千个Redis CPU核心承载600万请求每秒,显著节约了至少20倍的计算资源。整体上,CacheFront已经支撑了超过4000万的每秒缓存读取请求,显著降低了响应延迟。根据测量数据,使用缓存后P75延迟下降了75%,P99.9延迟降低逾67%,同时有效稳定了延迟峰值。 CacheFront的成功标志着现代大规模分布式在线存储系统发展的一大进步:将缓存层的高性能与存储层的一致性紧密结合,实现了灵活且透明的缓存加速方案。与此同时,优步将缓存的维护和管理工作统一交由核心存储团队负责,极大提升了各业务线开发的效率,也缩短了新功能的迭代周期。 替代传统的分散缓存部署方案,CacheFront 通过集成、透明和智能的设计,解决了缓存失效、容量扩展、跨区域多活和一致性保证等复杂问题,助力优步应对日益严苛的数据服务需求。
面向未来,随着数据规模和服务复杂度的不断扩大,优步仍将持续优化缓存与存储体系,探索更为高效可靠的分布式数据库技术,以满足全球千万级用户的实时数据访问需求。 这套集成缓存架构不仅在优步内部获得了显著成效,也为广大分布式系统开发者提供了宝贵的思路与借鉴。它展示了如何通过技术创新与架构优化,实现高性能、低成本且易维护的分布式数据服务,推动整个行业迈向更智能、更高效的数据管理新时代。