Паттерны
Масштабирование чтения
Узнайте, как масштабировать чтение на интервью по System Design
📖 Масштабирование чтения помогает обрабатывать большой объем операций чтения, когда приложение вырастает от сотен до миллионов пользователей. Записи создают данные, а чтения их потребляют, и трафик чтения часто растет быстрее трафика записи. Этот паттерн описывает архитектурные подходы, которые позволяют выдерживать большую нагрузку на чтение и не перегружать основную базу данных.
Проблема
Представим ленту Можнограм. Когда мы открываем приложение, нужно сразу загрузить десятки фотографий, и для каждой из них требуется несколько запросов к базе: метаданные изображения, информация о пользователе, число лайков, превью комментариев. В сумме это легко может быть больше 100 операций чтения только для одной загрузки ленты. При этом мы можем публиковать всего одну фотографию в день, то есть делать одну запись.
Такой перекос встречается постоянно. На каждый опубликованный твит приходится тысячи чтений. На каждый товар, который добавляют на Озон, приходится сотни просмотров. YouTube ежедневно обслуживает миллиарды просмотров видео, хотя загрузок намного меньше. Стандартное соотношение чтений к записям начинается с 10:1, но для приложений с контентом легко доходит до 100:1 и выше.
По мере роста числа чтений базе данных все труднее выдерживать нагрузку.
Чаще всего это не та проблема, которую можно исправить программно. Это физика. CPU может выполнить только ограниченное число инструкций в секунду, память может держать только ограниченный объем данных, а дисковый ввод-вывод ограничен скоростью дисков и SSD. Когда мы упираемся в эти физические пределы, еще немного "умного кода" уже не помогает.
Что с этим делать? Давайте разберем.
Решение
Масштабирование чтения обычно развивается по естественной траектории: от простых оптимизаций к более сложным распределенным системам.
- Оптимизировать чтение внутри базы данных
- Масштабировать базу данных горизонтально
- Добавить внешние слои кэширования
Вот как работает каждый из этих шагов.
Перейдите на Premium, чтобы продолжить
Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium
Перейти на Premium