2017-01-03 2 views
0

Прежде всего я новичок в Орлеане, но я уже прочитал часть документации, и я должен сказать, что проект выглядит очень многообещающим. У меня есть вопрос о том, как обновить код зерен на силосах в производственной среде.Обновления на лету кода orleans

Я знаю, что у Эрланга есть актерская модель, и в Whatsapp они могут выполнять onthefly обновления кода. Возможно ли, что что-то возможно в Орлеане или мне нужно остановить силосы и развернуть новый код? Если это можно сделать программно?

Спасибо!

ответ

1

Я не думаю, что вы можете развернуть код на лету, как вы говорите. Зерна - это классы, и они могут зависеть от других классов, и все эти классы находятся в DLL. Если вы добавляете новый класс, например, вы должны развернуть эту DLL на все ваши силосы.

Примечание: Я использую здесь «сервер» и «силос».

Что вы можете сделать, чтобы избежать простоев, это развернуть часть ваших серверов, переключить трафик на них и затем развернуть остальные серверы. Развертывания в Орлеане поддерживают DeploymentId, который является уникальным для кластера. Если вы развертываете свои силосы с новым DeploymentId, они не присоединятся к старому кластеру.

Описание в предыдущем абзаце может показаться немного абстрактным, поэтому давайте рассмотрим практический пример. У вас есть 5 серверов, все в одном кластере с DeploymentId 123, а балансировщик нагрузки пересылает трафик каждому из них в круговом стиле.

  1. Вы выключаете первые 3 силоса. Кластер замечает отклонение узлов и настраивает. Балансировщик нагрузки также уведомляет и перенаправляет трафик только на последние 2 узла (которые все еще имеют DeploymentId 123).
  2. Разверните обновленный код на первых 3 силосах с помощью DeploymentId 456 и включите их. DeploymentId отличается, поэтому они не присоединятся к старому кластеру.
  3. Вы указываете балансировщик нагрузки на первые 3 силоса. Теперь вы эффективно запускаете новый код, так как последние 2 силоса не будут получать никаких запросов.
  4. Вы выключаете последние 2 силоса и развертываете их с помощью нового DeploymentId (456). Когда вы включаете их, они присоединяются к новому кластеру.
  5. Вы настраиваете балансировщик нагрузки, чтобы указать на все 5 узлов.
+0

Спасибо за ответ. Могут ли все шаги, которые вы делаете, сделать с C#? И может ли пересылка трафика с 5 силосов в 2 получить их вниз? – toroveneno

+0

Не могли бы вы объяснить использование балансировки нагрузки в этом решении? Обычно клиент orleans имеет подключения ко всем (по крайней мере, большинству) силосов в кластере. Эти соединения находятся непосредственно в бункере и обычно не через балансировщик нагрузки. Кроме того, клиенту необходимо будет обновить новый вариант развертывания, который требует перезапуска. – BozoJoe

+1

@BozoJoe балансировщик нагрузки позволяет абстрагировать связь между внешними клиентами и силосами. Если клиент может напрямую разговаривать со всеми силосами, тогда у вас нет способа контролировать, будет ли он разговаривать с новым кластером или старым, когда вы развертываете. – Gigi

Смежные вопросы