Coinbase hat unseren Benutzerservice so skaliert, dass über 1,5 Millionen Identitätsabfragen pro Sekunde möglich sind. So haben wir es gemacht: - Wir haben das monolithische Benutzerobjekt in unabhängige, logische Gruppen namens "Fragmente" aufgeteilt. - Wir sind von einem einzelnen MongoDB-Cluster zu einem föderierten System gewechselt, das sowohl MongoDB als auch DynamoDB nutzt. - Für gleichzeitige Schreibvorgänge haben wir die Optimistic Concurrency Control (OCC) implementiert, die ein Ressourcenversionsfeld für einen Vergleich-und-Tausch beim Schreiben verwendet, um langsame globale Sperren zu vermeiden. - Für starke Lese-nach-Schreiben-Garantien bei kritischen Abläufen verwenden wir "Frische-Tokens." Diese Tokens werden mit der Leseanfrage übergeben, um zu garantieren, dass die zurückgegebenen Daten mindestens so aktuell sind wie die Version, die mit dem Token verknüpft ist, und umgehen bei Bedarf den Cache. - Wir haben einen Lastabwurfmechanismus eingeführt, der dynamisch einen Teil des eingehenden Verkehrs an eine Dummy-Zielgruppe umleitet, wenn der Dienst eine Überlastung erkennt, um eine MongoDB-Todesschleife zu verhindern und es dem Dienst zu ermöglichen, sich elegant zurückzuziehen. Diese Architektur gibt uns die Skalierbarkeit, um die massiven, unvorhersehbaren Spitzen des Krypto-Marktes zu bewältigen, und die Widerstandsfähigkeit, ein Dienst zu sein, auf den Coinbase mit Vertrauen aufbauen kann.