tgoop.com/system_design_world/83
Last Update:
📗 Книгу "Web scalability for startup engineers" советуют как более лёгкую, в сравнение с Клеппманом.
Встретил её совсем недавно.
Давайте по ней изучим Шардирование. Сделал перевод начала раздела стараясь выразить суть и уложится в формат поста телеграмма.
Сценарий
📈 Возрастают нагрузки на 1 сервер с Базой Данных. Необходимо разделить данные по серверам.
Проблема
➡️ Для получения данных, нужно не опрашивать все сервера, а пойти на целевой - где эти данные находятся.
Решение
🔑 Использовать ключ шардирования - сущность, которая позволит определить целевой сервер.
Пример
📦 Онлайн магазин. Сервис изначально имел одну Базу Данных. Для горизонтального масштабирования необходимо распределить данные по серверам.
Необходимо понять, по какому признаку произвести распределение. Поскольку пользователи в магазине не взаимодействуют друг с другом, можно распределить по пользователям.
Тогда при необходимости обновления или получения данных о пользователе запрос пойдёт в определенный инстанс БД.
Пользователя можно идентифицировать по полю user_id - уникальному идентификатору пользователя. Такой id и будет называться ключом шардирования.
Алгоритм шардирования
⚙️ Осталось понять какой user_id к какому серверу будет отнесен. Для этого выбирается алгоритм маппинга/роутинга/маршрутизации/распределения.
Для простоты, у нас есть 2 сервера БД == 2 шарда. В качестве алгоритма будет определение чётности.
Его можно реализовать с помощью операции взятия остатка от деления: user_id % 2 => 1, 0
Получаем распределение данных по признаку "чётности".
Шардировать можно средствами самой БД. Или же создать дополнительный слой/сервис для маршрутизации.
#Books #Sharding
BY System Design World
Share with your friend now:
tgoop.com/system_design_world/83