LinkedIn引入Couchbase作为集中缓存层以扩展成员档案读取
LinkedIn为了应对不断增长的流量需求,引入了Couchbase作为集中缓存层,以扩展成员档案的读取能力。这一新解决方案实现了超过99%的缓存命中率,帮助减少了超过60%的尾部延迟,并每年降低了10%的成本。
背景与挑战
多年来,LinkedIn一直从其基于MySQL构建的Espresso文档平台直接提供成员档案服务。Espresso平台使用Avro进行序列化,依赖Apache Helix和Databus(LinkedIn的变更捕获系统)来管理数据。Espresso路由器处理档案请求,将读写请求定向到正确的存储节点,并使用离堆缓存(OHC)处理热点数据。
然而,随着存储请求每年翻倍增长,峰值达到每秒超过480万次请求,Espresso集群在扩展性方面遇到了瓶颈。面对这一挑战,团队决定引入Couchbase作为缓存层,而不是重新设计Espresso平台的核心组件。
选择Couchbase的原因
LinkedIn的软件工程师Estella Pham和Guanlin Lu解释了选择Couchbase的原因。Couchbase作为分布式键值缓存,具有数据持久化、节点故障时的数据可用性以及动态扩展等优势。这些特性使其优于传统的memcached缓存。
新缓存层的设计与实现
新的缓存层结合了OHC和Couchbase缓存,并集成到Espresso平台中,以避免客户端更改。设计重点包括:
- Couchbase故障的弹性:Espresso路由器在遇到临时故障时重试请求,并监控Couchbase的健康状态,避免将请求发送到不健康的节点。
- 数据可用性与一致性:档案数据被复制三次,如果主副本不可用,路由器会切换到其中一个从副本。
- 实时缓存更新:所有档案数据在每个数据中心中缓存,并通过Apache Samza作业基于Espresso捕获的写操作进行近实时更新,同时定期基于数据库快照进行更新。所有缓存更新使用Couchbase的CAS机制来检测并发更新,并在必要时重试更新。
后端服务的优化
引入Couchbase后,Profile Backend服务承担了Espresso之前处理的部分操作,包括动态评估字段投影和从缓存中返回部分档案数据。此外,它还处理Avro模式转换,并在运行时从注册表中获取模式版本。
性能提升与成本降低
通过进一步优化,LinkedIn团队实现了从Avro/二进制格式读取数据的效率提升,反序列化时间减少了约30%。新的混合缓存方法使得Espresso节点减少了90%。尽管需要运行Couchbase集群、缓存更新作业以及增加后端服务的计算资源,但整体上,处理成员档案请求的成本每年降低了10%。
总结
LinkedIn通过引入Couchbase作为集中缓存层,成功解决了Espresso平台的扩展性瓶颈,显著提升了系统性能并降低了运营成本。这一解决方案展示了在面对高流量和大规模数据时,合理选择缓存技术的重要性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。