Coinbase 扩展了我们的用户服务,以支持超过 150 万次身份读取/秒。 以下是我们的做法: - 我们将单一的用户对象拆分为独立的、逻辑上的组,称为 "Fragments"。 - 从单一的 MongoDB 集群迁移到一个使用 MongoDB 和 DynamoDB 的联合系统。 - 对于并发写入,我们实施了乐观并发控制(OCC),它使用资源版本字段进行写入时的比较和交换,避免了缓慢的全局锁。 - 对于关键流程的强读后写保证,我们使用 "Freshness Tokens"。这些令牌在读取请求中传递,以确保返回的数据至少与令牌关联的版本一样新,如有必要则绕过缓存。 - 我们引入了一种负载削减机制,当服务检测到过载时,动态地将一部分传入流量转移到一个虚拟目标组,防止 MongoDB 死循环,并使服务能够优雅降级。 这种架构使我们能够处理加密市场巨大的、不可预测的峰值,并具备成为 Coinbase 可以信赖的服务的韧性。