Thursday, October 03, 2024

Как кэшировать базы данных

Схема, которую использует UBER в своей высоконагруженной системе:

Uber построил CacheFront — интегрированное решение для кэширования с Redis, Docstore и MySQL. Чтение и запись файлов с использованием CDC (Change Data Capture). Реализация состоит из 3 основных частей:

1. Чтение и запись с CDC
Вместо микросервиса, механизм запросов Docstore взаимодействует с Redis для запросов на чтение. При попадании в кэш механизм запросов извлекает данные из Redis. При промахах кэша запрос отправляется в механизм хранения и базу данных. В случае записи служба CDC Docstore (Flux) делает записи в Redis недействительными. Она отслеживает события binlog MySQL, чтобы инициировать аннулирование.

2. Разогрев кэша в нескольких регионах с помощью потоковой передачи Redis
Отказ региона может привести к промахам кэша и перегрузке базы данных. Чтобы справиться с этим, инженерная группа Uber использует репликацию Redis между регионами. Это делается путем отслеживания потока записи Redis для репликации ключей в удаленный регион. В удаленном регионе потребитель потока отправляет запросы на чтение в механизм запросов, который считывает базу данных и обновляет кэш.

3. Redis и шардинг Docstore
Все команды в Uber используют Docstore, при этом некоторые генерируют огромное количество запросов. Экземпляры Redis и Docstore шардированы или разделены для обработки нагрузки. Но один кластер Redis, выходящий из строя, может создать горячий шард БД. Чтобы предотвратить это, инженеры разделили кластер Redis, используя схему, отличную от шардинга БД. Это гарантирует равномерное распределение нагрузки.

/via bytebytego.com и Uber

No comments: