34 lines
5.6 KiB
Markdown
34 lines
5.6 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
- Шардинг
|
|||
|
tags:
|
|||
|
- зрелость/🌱
|
|||
|
date:
|
|||
|
- - 2024-03-12
|
|||
|
zero-link:
|
|||
|
- "[[00 HighLoad]]"
|
|||
|
parents:
|
|||
|
linked:
|
|||
|
---
|
|||
|
Шардирование — это метод разделения и распределения больших объёмов данных по разным базам данных или узлам в рамках одной распределённой системы, чтобы облегчить их управление, обеспечить масштабируемость и повысить производительность. Каждая часть данных, или "шард", функционирует как отдельная база данных, и все шарды вместе образуют логически единую базу данных.
|
|||
|
|
|||
|
Основные принципы шардирования включают в себя:
|
|||
|
- **Горизонтальное разделение данных**: Вместо того чтобы хранить все данные в одной таблице или базе данных, они разделяются на меньшие, более управляемые части. Каждый шард содержит часть данных, например, пользователей с идентификаторами от 1 до 1000 в одном шарде и от 1001 до 2000 в другом.
|
|||
|
- **Распределение нагрузки**: Поскольку запросы к данным могут обрабатываться параллельно разными шардами, это способствует балансировке нагрузки и увеличению производительности системы.
|
|||
|
- **Масштабируемость**: По мере роста объёмов данных новые шарды могут быть добавлены в систему, что позволяет масштабировать приложение горизонтально.
|
|||
|
- **Локализация данных**: Шардирование может быть использовано для локализации данных, чтобы уменьшить задержки, связанные с географическим расположением пользователей и баз данных.
|
|||
|
|
|||
|
**Плюсы:**
|
|||
|
- **Масштабируемость**: Шардирование позволяет системе расти горизонтально, добавляя больше шардов для управления увеличивающимися объемами данных, что делает его эффективным решением для крупных и растущих систем.
|
|||
|
- **Улучшение производительности**: Разделение данных на шарды позволяет распределить нагрузку между серверами, что снижает задержки и увеличивает скорость обработки запросов за счет параллельной обработки.
|
|||
|
- **Высокая доступность и устойчивость к отказам**: Отказ одного шарда не приводит к полному сбою системы. Данные в остальных шардах остаются доступными, что повышает общую устойчивость системы к отказам.
|
|||
|
- **Географическое распределение данных**: Шардирование позволяет располагать данные ближе к пользователям, что может снижать задержки и улучшать взаимодействие с приложением.
|
|||
|
|
|||
|
**Минусы:**
|
|||
|
- **Сложность управления**: Управление множеством шардов и обеспечение их синхронизации может быть сложной задачей, требующей продвинутых решений для мониторинга, резервного копирования и восстановления.
|
|||
|
- **Сложность проектирования**: Приложениям, использующим шардированные базы данных, часто требуется более сложная архитектура и дизайн базы данных, а также изменения в логике приложения для эффективного распределения и доступа к данным.
|
|||
|
- **Трудности с транзакциями и согласованностью**: Шардирование может затруднить обеспечение атомарности и согласованности транзакций, охватывающих несколько шардов, что может потребовать дополнительных усилий для поддержания целостности данных.
|
|||
|
- **Перераспределение данных**: В случае добавления или удаления шардов может потребоваться перераспределение больших объемов данных, что может быть ресурсоемкой операцией и повлиять на производительность системы.
|
|||
|
|
|||
|
**Проблемы**
|
|||
|
- [Согласованное префиксное чтение](Согласованное%20префиксное%20чтение.md)
|