Coinbase масштабувала нашу службу користувачів, щоб підтримувати понад 1,5 млн читань ідентичності на секунду. Ось як: - Ми розділили монолітний об'єкт користувача на незалежні, логічні групи, які називаються «Фрагменти». - Міграція з одного кластера MongoDB до федеративної системи, що використовує як MongoDB, так і DynamoDB. - Для одночасних записів ми реалізували Optimistic Concurrency Control (OCC), який використовує поле версії ресурсу для порівняння та обміну при записі, уникаючи повільних глобальних блокувань. - Для сильних гарантій читання після запису на критичних потоках ми використовуємо «Freshness Tokens». Ці токени передаються під час запиту на читання, щоб гарантувати, що повернені дані будуть принаймні такими ж свіжими, як і версія, пов'язана з токеном, обходячи кеш за потреби. - Ми впровадили механізм зниження навантаження, який динамічно перенаправляє частину вхідного трафіку до фіктивної цільової групи, коли сервіс виявляє перевантаження, запобігаючи циклу смерті MongoDB і дозволяючи сервісу плавно деградувати. Ця архітектура дає нам масштабованість для впорання з величезними, непередбачуваними піками крипторинку та стійкість бути сервісом, на якому Coinbase може будувати з довірою.