Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор и архитектура
Каталог зерна в Orleans — хранилище типа "ключ-значение", где ключ является идентификатором зерна, а значением является регистрационная запись, указывающая на активный силос, который (потенциально) размещает зерно.
Хотя Orleans предоставляет реализацию распределенного каталога по умолчанию (описанную в этой статье), система зернового каталога разработана с возможностью подключения. Вы можете создать собственный каталог, реализовав интерфейс IGrainDirectory и зарегистрировав его в коллекции служб силоса. Это позволяет использовать пользовательские реализации каталога, которые могут использовать разные бэкэнды хранения или модели согласованности для лучшего соответствия конкретным требованиям приложения. Поскольку введение нового каталога строгой согласованности снижает необходимость в реализации внешних каталогов, API остается для обеспечения обратной совместимости и гибкости. Вы можете настроить каталог для каждого типа зерна.
Чтобы оптимизировать производительность, Orleans кэширует запросы каталогов локально в каждом силоне. Это означает, что потенциально удалённое чтение каталога необходимо только в том случае, если запись локального кэша отсутствует или недействительная. Этот механизм кэширования снижает нагрузку на сеть и задержку, связанную с поиском расположения зерна.
Изначально Orleans реализовала структуру каталога, в конечном итоге согласованную, в виде распределенной хэш-таблицы. Это было заменено строго согласованным каталогом в версии 9.0, на основе двухфазной методологии виртуальной синхронности. Она также структурирована как распределенная хэш-таблица, но обеспечивает улучшенную балансировку нагрузки через виртуальные узлы. В этой статье описывается последняя, более новая реализация каталога зерна.
Распределенный каталог зерна
Распределенный каталог зерна в Orleans обеспечивает надежную согласованность, даже балансировку нагрузки, высокую производительность и отказоустойчивость. Реализация следует двухэтапному проектированию на основе методологии виртуальной синхронизации со сходством с вертикальным Paxos.
Секции каталогов имеют два режима работы:
- Обычная операция: локальные запросы процесса секционирования без координации с другими узлами.
- Изменение представления: узлы координируется друг с другом для передачи владения диапазонами каталогов.
В каталоге используется система членства в кластере жёсткого согласования Orleans, в которой конфигурации, называемые «представлениями», имеют монотонно увеличивающиеся номера версий. При присоединении к кластеру и выходе из кластера создаются последовательные представления, что приводит к изменению владения диапазоном.
Все операции каталога включают координацию представлений:
- Запросы содержат номер представления вызывающего абонента.
- Ответы содержат номер представления раздела.
- Несоответствия в числах просмотров вызывают синхронизацию.
- Запросы автоматически повторяются при изменениях в представлении.
Это обеспечивает, что правильный владелец раздела каталога обрабатывает все запросы.
Стратегия секционирования
Каталог секционируется с помощью согласованного хэш-кольца с диапазонами, назначенными активным силосам в кластере. Идентификаторы зерна хэшируются, чтобы найти силос, являющийся владельцем раздела кольца, который соответствует его хэшу.
Каждый активный silo владеет предварительно настроенным числом диапазонов, по умолчанию — 30 диапазонов на сило. Это похоже на схему, используемую Amazon Dynamo и Apache Cassandra, где для каждого физического узла (хоста) создается несколько "виртуальных узлов" (диапазонов).
Размер раздела определяется расстоянием между хэшом и хэшом следующего раздела. Можно разделить диапазон между несколькими силосами во время изменения представления. Это усложняет процедуру изменения представления, так как каждая секция должна потенциально координироваться с несколькими другими секциями.
Просмотр процедуры изменения
Секции каталогов (реализованные в GrainDirectoryPartition) используют версионные блокировки диапазона, чтобы предотвратить недействительный доступ к диапазонам во время изменений представления. Блокировки диапазона создаются во время изменения представления и выпускаются при завершении изменения представления. Эти блокировки аналогичны "клиньям", используемым в методологии виртуальной синхронизации.
При изменении представления секция может увеличиваться или сжиматься:
- Если новый модуль присоединяется к кластеру, существующие разделы могут уменьшиться, чтобы освободить место.
- Если хранилище покидает кластер, остальные секции могут увеличиться, чтобы взять на себя потерянные диапазоны.
Регистрация каталогов должна передаваться от старого владельца новому владельцу перед отправкой запросов. Процесс передачи выполняет следующие действия.
- Предыдущий владелец запечатывает диапазон и создает моментальный снимок записей каталога этого диапазона.
- Новый владелец запрашивает и применяет снимок.
- Новый владелец начинает обслуживание запросов, связанных с диапазоном.
- Предыдущий владелец уведомляется и удаляет моментальный снимок.
Процесс восстановления
Если хост завершает работу без правильной передачи разделов каталога, последующие владельцы разделов должны выполнить восстановление. Это включает в себя:
- Запрос всех активных силосов в кластере для регистрации зерна.
- Перестроение состояния каталога для затронутых диапазонов.
- Обеспечение отсутствия повторяющихся активаций зерна.
Восстановление также необходимо при быстром изменении членства в кластере. Хотя членство в кластере гарантирует монотонность, отдельные системы могут пропускать промежуточные представления членства. В таких случаях:
- Передача моментальных снимков прекращена.
- Восстановление выполняется вместо обычной передачи между разделами.
- Система поддерживает согласованность, несмотря на отсутствие промежуточных состояний.
Дальнейшее улучшение членства в кластере может уменьшить или устранить эти сценарии, гарантируя, что все силосы видят все представления.