内容提要
JunoDB是PayPal用于各种应用程序的分布式键值存储。它提供可扩展性、高可用性、性能和安全性。JunoDB设计用于处理数十万个连接,并在PayPal每天提供近3500亿个请求。它用于缓存、幂等性、计数器和延迟桥接。JunoDB通过加密和TLS确保数据安全。它提供快速响应时间,并能够以6个九的可用性运行。
延伸解读
从C++到Go:多核支持的技术抉择
JunoDB最初是单线程C++程序,但PayPal需要多核支持以处理高并发连接。由于Redis等内存数据库无法充分利用多核,PayPal将JunoDB重写为Go,以发挥多核优势。这一转变使JunoDB能高效处理数十万连接,并支撑每天3500亿请求。技术选型需权衡性能与需求,Go的并发模型适合此类场景。
代理架构:简化客户端与避免单点故障
JunoDB采用代理架构,客户端通过代理与存储服务器交互,代理负责路由请求并感知分片映射。这简化了客户端库的复杂性,但代理可能成为单点故障。为此,代理部署多个实例并通过负载均衡分发请求,确保高可用性。这种设计在分布式系统中常见,但需注意代理层的扩展性和延迟影响。
法定人数协议:平衡一致性与可用性
JunoDB使用法定人数协议实现数据复制,要求读法定人数和写法定人数之和大于区域数,且写法定人数超过半数,以避免脏读和写冲突。生产环境中配置5个区域、读写法定人数均为3,确保强一致性。这种机制在分布式数据库中至关重要,但可能增加延迟,需根据业务需求调整。
安全设计:传输与静态加密
JunoDB通过TLS加密传输数据,并在客户端或代理层进行负载加密,存储服务器也加密所有数据。密钥管理模块负责证书和密钥轮换。这种端到端安全设计适合支付场景,但加密操作可能增加CPU负载,需在性能与安全间取得平衡。
Q&A
JunoDB是什么类型的数据库?
JunoDB是PayPal的分布式键值存储。
JunoDB每天处理多少个请求?
JunoDB每天处理近3500亿个请求。
JunoDB如何确保数据安全?
JunoDB通过TLS加密和在存储过程中的数据加密确保数据安全。
JunoDB的可用性有多高?
JunoDB的可用性高达六个九(99.9999%),每天仅有86.40毫秒的停机时间。
JunoDB的主要用例有哪些?
JunoDB的主要用例包括缓存、幂等性、计数器和延迟桥接。
JunoDB是如何实现高可用性的?
JunoDB通过复制和故障转移策略来实现高可用性。