Распределение данных
Логическое и физическое распределение данных по узлам.
Логическое распределение данных определяет, как данные организованы и доступны на уровне логической структуры, например, как таблицы, индексы и представления. Физическое распределение данных определяет, как данные размещаются и хранятся на физическом уровне, например, на разных узлах в сети или на разных дисковых устройствах.
Ссылки для изучения
Какие методы распределения данных вы используете в распределенных системах?
Методы распределения данных в распределенных системах включают:
-
Hash Partitioning:- Распределение данных на основе хэш-функции для равномерного распределения.
-
Range Partitioning:- Распределение данных по диапазонам значений для оптимизации запросов по диапазонам.
-
List Partitioning:- Распределение данных по списку значений для оптимизации запросов по конкретным значениям.
-
Composite Partitioning:- Использование комбинации нескольких методов распределения для более гибкого распределения данных.
Ссылки для изучения
Как вы обеспечиваете согласованность данных в распределенных системах?
Для обеспечения согласованности данных в распределенных системах используются следующие методы:
-
Использование транзакций:
- Поддержка ACID-транзакций для обеспечения атомарности, согласованности, изоляции и долговечности данных.
-
Репликация данных:
- Синхронная или асинхронная репликация данных между узлами для обеспечения целостности и доступности данных.
-
Консенсусные алгоритмы:
- Использование алгоритмов консенсуса, таких как Raft или Paxos, для согласования состояния данных между узлами.
-
Кворумные операции:
- Использование кворумных операций для чтения и записи данных, чтобы обеспечить согласованность в условиях разделенного кластера.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- Мок-собеседование на Middle Python-разработчика: архитектура и асинхронность · 31:05–31:46Мок-собеседование · Ответ кандидата
Кандидат объясняет transactional outbox: событие записывается в одной транзакции с изменением данных, затем повторно отправляется брокеру; возможные повторы нужно дедуплицировать. Явно оговаривает допустимость eventual consistency.
Какие алгоритмы распределения данных вы считаете наиболее эффективными?
Эффективные алгоритмы распределения данных включают:
-
Consistent Hashing:- Обеспечивает равномерное распределение данных по узлам и минимизирует перераспределение данных при добавлении или удалении узлов.
-
Range Partitioning:- Эффективен для запросов по диапазонам значений и обеспечивает хорошую производительность для операций поиска и агрегации.
-
Random Partitioning:- Прост в реализации и обеспечивает равномерное распределение данных, но может привести к неэффективному использованию ресурсов.
-
Hybrid Partitioning:- Комбинация нескольких методов распределения для оптимизации производительности и масштабируемости.
Ссылки для изучения
Как Spark выбирает партицию при shuffle?
После shuffle partitioner вычисляет номер output partition: обычно hash ключа modulo число партиций, range partitioner использует диапазоны. Каждая shuffle partition затем обрабатывается отдельной task. Она не закреплена навсегда за конкретной нодой: scheduler размещает task по доступным executors и locality. Число партиций влияет на размер task и параллелизм, а плохой ключ создает skew независимо от числа узлов. Равномерность проверяют по фактическим размерам партиций и длительности tasks, особенно для горячих ключей.
Ссылки для изучения





