Взаимодействие с несколькими кластерами
Сеть должна быть настроена таким образом, чтобы любой Orleans сайлос может подключаться к любому другому Orleans сило через TCP/IP, независимо от того, где находится он в мире. Именно то, как это достигается вне областьOrleans, так как зависит от того, как и где развертываются силосы.
Например, в Windows Azure можно использовать виртуальные сети для подключения нескольких развертываний в регионе и шлюзов для подключения виртуальных сетей в разных регионах.
Идентификатор кластера
Каждый кластер имеет собственный уникальный идентификатор кластера. Идентификатор кластера должен быть указан в глобальной конфигурации.
Идентификаторы кластера не могут быть пустыми и не могут содержать запятые. Кроме того, если используется таблица Azure служба хранилища, идентификаторы кластера могут не содержать символы, запрещенные для ключей строк (/, #, ?).
Мы рекомендуем использовать очень короткие строки для идентификаторов кластера, так как идентификаторы кластера передаются часто и могут храниться в хранилище некоторыми поставщиками представлений журналов.
Шлюзы кластера
Каждый кластер автоматически назначает подмножество его активных силосов для использования в качестве шлюзов кластера. Шлюзы кластеров напрямую объявляют IP-адреса другим кластерам и могут служить "точками первого контакта". По умолчанию в качестве шлюзов кластера назначаются не более 10 силосов (или любое число MaxMultiClusterGateways).
Обмен данными между хранилищами в разных кластерах не всегда проходит через шлюз. После того как silo узнал и кэшировал расположение активации зерна (независимо от того, в каком кластере), он отправляет сообщения в этот silo напрямую, даже если silo не является шлюзом кластера.
Взаимодействие
Gossip — это механизм для кластеров для совместного использования сведений о конфигурации и состоянии. Как говорится в названии, сплетни децентрализованы и двунаправленные: каждый сило взаимодействует напрямую с другими силосами, как в одном кластере, так и в других кластерах, для обмена информацией в обоих направлениях.
Контент. Gossip содержит некоторые или все следующие сведения:
- Текущая конфигурация с меткой времени с несколькими кластерами.
- Словарь, содержащий сведения о шлюзах кластера. Ключ — это адрес сило, а значение содержит метку времени (1) (2) идентификатора кластера и (3) состояние, которое является активным или неактивным.
Быстрое и медленное распространение. При изменении состояния шлюза или при внедрении новой конфигурации эта информация немедленно отправляется во все оси, кластеры и каналы сплетни. Это происходит быстро, но не является надежным. Если сообщение будет потеряно из-за каких-либо причин (например, расы, сломанные сокеты, сбои сило), наши периодические фоновые сплетни гарантируют, что информация в конечном итоге распространяется, хотя и медленнее. Все сведения в конечном итоге распространяются везде и очень устойчивы к случайным потерям сообщений и сбоям.
Все данные сплетни являются метками времени, что гарантирует, что более новые сведения заменяют старые данные независимо от относительного времени сообщений. Например, более новые конфигурации с несколькими кластерами заменяют старые, а более новые сведения о шлюзе заменяют старые сведения об этом шлюзе. Дополнительные сведения о представлении данных сплетни см. в MultiClusterData
классе. Он имеет Merge
метод, который объединяет сплетние данные, разрешая конфликты с помощью меток времени.
Каналы gossip
При первом запуске фрагмента или при перезапуске после сбоя он должен иметь способ загрузки сплетни. Это роль канала gossip, который можно настроить в конфигурации Silo. При запуске silo извлекает все сведения из каналов сплета. После запуска silo периодически продолжает ходить, каждые 30 секунд или что бы ни было настроено как BackgroundGossipInterval
. Каждый раз, когда он синхронизирует свои сведения с партнером, случайным образом выбранным из всех шлюзов кластера и каналов сплетни.
- Хотя и не обязательно, мы рекомендуем всегда настраивать по крайней мере два канала спеси, в разных регионах, чтобы повысить доступность.
- Задержка обмена данными с каналами сплетни не является критической.
- Несколько разных служб могут использовать один и тот же канал gossip без помех, если идентификатор ServiceId
Guid
(как указано в соответствующей конфигурации) отличается. - Нет строгого требования, что все силосы используют одни и те же каналы сплетни, если каналы достаточно, чтобы каналы первоначально связывались с "сплетним сообществом" при запуске. Но если канал gossip не является частью конфигурации silo, и это silo является шлюзом, он не отправляет обновления состояния канала (быстрое распространение), поэтому может потребоваться больше времени, прежде чем они достигают канала через периодические фоновые сплетни (медленное распространение).
Канал gossip на основе таблиц Azure
Мы уже реализовали канал gossip на основе таблиц Azure. Конфигурация задает стандартные строка подключения, используемые для учетных записей Azure. Например, конфигурация может указать два канала gossip с отдельными учетными usa
записями хранения Azure и europe
следующим образом:
var silo = new HostBuilder()
.UseOrleans(builder =>
{
builder.Configure<MultiClusterOptions>(options =>
{
options.GossipChannels.Add(
"AzureTable",
"DefaultEndpointsProtocol=https;AccountName=usa;AccountKey=...");
options.GossipChannels.Add(
"AzureTable",
"DefaultEndpointsProtocol=https;AccountName=europe;AccountKey=...")
});
})
Несколько разных служб могут использовать один и тот же канал gossip без помех, если идентификатор serviceId Guid
, указанный в соответствующей конфигурации, отличается.