Highload-шардирование - WTF?!
👁 582
Да ладно, все просто, если можно так сказать, суть в том, чтобы масштабировать систему горизонтально.
Шардированием называем процесс разбиения данных на отдельные части, эти части в итоге распределяются на несколько серверов.
А шардом называем сервер, который содержит фрагмент этих данных.
Вообще шардирование принято относить к базам данных, но в целом этот термин можно применить к любой системе выполняющей обработку или хранение данных. Например распределение запросов между серверами, микросервисами и тд.
Для чего это шардирование нужно?
Это позволяет распределять нагрузку на несколько серверов и повышать производительность приложения, обрабатывающего эти данные.
Также это повышает доступность системы, ведь распределение данных или запросов между серверами в случае отказа одного сервера могут быть обработаны другими серверами.
Один из моих коллег говорил: Шардирование - это плохо! Не шардирование - тоже плохо!
В целом процесс шардирования это достаточно трудоемкая задача, которая требует тщательного планирования и проектирования. Нужно учитывать типы запросов, распределение данных, количество серверов, доступность и так далее.
Поэтому в некоторых случаях это может быть неэффективным, например когда у нас в запросах используется пересечение шардов, как в случае запроса пользователей и заказов. Хранить эти данных в разных базах не рекомендуется, так как это может замедлить обработку. Для этого обычно используют другие методы масштабирования.
Многие базы данных дают возможность настроить шардирование из встроенных инструментов, MongoDB, Cassandra, CockroachDB.
В общем и целом, шардирование - это инструмент оптимизации, но как известно _преждевременная оптимизация ведет к усложнению. Поэтому использовать инструменты нужно осознано, а не так чтобы влепить в “проекте с нуля” shards = n_ и все сделается само. 💪
421