PayPal 开源 JunoDB,支持 3500 亿次日请求的键值存储

PayPal 开源 JunoDB,支持 3500 亿次日请求的键值存储
最新回答
孤我为王

2020-09-27 20:40:51

PayPal 开源的 JunoDB 是一个基于 RocksDB 存储引擎的分布式键值存储系统,采用 Golang 编写,支持每日 3500 亿次请求,具备高可用性、数据安全性和线性扩展能力。

JunoDB 的核心架构与组件
  • JunoDB 客户端库提供多语言支持(如 Golang、Java 等),允许应用程序直接与数据库交互,封装底层通信逻辑。
  • JunoDB 客户端代理作为负载均衡器,连接存储服务器并管理数据分片。采用一致性哈希算法对数据进行分区,减少集群扩展或收缩时的数据迁移量,支持连接的线性横向扩展。
  • JunoDB 存储层基于高性能嵌入式数据库 RocksDB,支持内存和磁盘持久化存储。默认启用磁盘加密和 TLS 传输加密,提升数据安全性。

图片来源:
https://medium.com/paypal-tech/unlocking-the-power-of-junodb-paypals-key-value-store-goes-open-source-ee85f935bdc1
关键技术特性
  • 高可用性与故障转移

    通过数据中心内和跨数据中心复制实现冗余,结合基于仲裁的协议和两阶段提交确保数据一致性。

    自动化即时故障转移功能避免集群领导重新选举或数据重新分配,保障服务连续性。

  • 性能优化

    Golang 重写:利用 Golang 的并发性和多核能力,从单线程 C++ 程序演变为高并发系统,支持多核友好性。

    线性扩展:基于代理的设计允许通过增加节点横向扩展,处理能力随集群规模增长。

  • 数据安全

    默认启用磁盘加密(存储层)和 TLS 传输加密(网络层),满足金融级安全要求。

应用场景
  • 缓存加速:存储频繁访问的数据(如用户首选项、账户详情),降低关系型数据库负载。
  • 幂等性保障:确保操作唯一性,消除重复处理风险。
  • 延迟桥接:解决跨区域分布式数据库的复制延迟问题,提升全局数据一致性。
  • 持久化存储:支持长 TTL(生存时间)数据存储,突破传统内存数据库的容量限制。
演进历程
  • 初期阶段:单线程 C++ 程序,仅支持短 TTL 内存存储。
  • 优化阶段:为提升并发能力,用 Golang 重写代码,并引入 RocksDB 实现磁盘持久化。
  • 成熟阶段:扩展为支持长 TTL 的持久化数据库,强化安全特性(加密、TLS),成为 PayPal 核心后端服务的依赖项(如登录、风险控制、交易处理)。
社区反馈与对比
  • 性能讨论:Hacker News 用户提出需公开基准测试数据,以对比 TiKV 等同类项目(如 TiKV 在 200+ 节点集群中的部署经验)。
  • 技术选择:Mercado Libre 工程师 Nahim Felicito Gomez 肯定 Golang 的并发优势,认为其适合构建客户端库。
  • 功能对比:部分用户将 JunoDB 与 FoundationDB 比较,关注其在扩展性和一致性模型上的差异。
开源与生态
  • 许可证:遵循 Apache 2.0 协议,允许自由使用、修改和分发。
  • 学习资源:PayPal 发布服务器设置和客户端构建视频教程,降低上手门槛。
  • 未来规划:开发 Golang 客户端和 Kubernetes 操作符,简化云原生环境部署。
总结

JunoDB 是 PayPal 为应对高并发金融场景设计的键值存储系统,通过 Golang、RocksDB 和一致性哈希等技术实现性能与可靠性的平衡。其开源为社区提供了金融级分布式数据库的实践范本,尤其适合需要处理海量请求、保障数据安全且具备弹性扩展能力的业务场景。