Проблемы и лучшие практики для обработки отказа сервисов

Я использовал NuSOAP в прошлом. Мне понравился он, потому что это - просто ряд файлов PHP, которые можно включать. Нет ничего для установки на веб-сервере и никаких опциях конфигурации измениться. Это имеет поддержку WSDL также, которая является премией.

7
задан John 18 November 2009 в 20:30
поделиться

5 ответов

Вот что у меня сработало.

С точки зрения инфраструктуры вам потребуется 2 кластерных сервера Windows. (Подойдут 2 стандартных окна Windows Server, часть кластеризации может быть установлена ​​и настроена, большинство системных администраторов должны знать, как это сделать.) Затем установите службу на обоих узлах кластера, выключите их и установите в РУЧНОЙ запускать. Затем добавьте кластерный ресурс в Windows Cluster Administrator для вашей службы, который будет управлять включением и выключением вашей службы на любом активном узле. Позвольте кластеру Windows управлять тем, когда ваша служба работает и на каком узле. Это простая часть кластеризации вашего сервиса.

С точки зрения сервиса, вы захотите спроектировать свою службу так, чтобы она могла быть как можно более не имеющей состояния. Это неубедительный совет, но на самом деле он зависит от того, чем занимается ваша служба. При проектировании просто предположите, что в какой-то момент времени жизни кода он остановится в самый неподходящий момент. Как служба на node2 узнает, где продолжить, где остановился node1? Это сложная часть, для которой нужно проектировать. В зависимости от того, что делает ваша служба, вы можете оставить последнюю выполненную задачу в таблице базы данных или общем файле данных. Вы также можете запустить его с самого начала и дважды проверить, была ли эта задача выполнена или нет, прежде чем действовать в соответствии с ней.

Опять же, это действительно будет зависеть от того, что служба должна выполнить. Надеюсь, это поможет.

Как служба на node2 узнает, где продолжить, где остановился node1? Это сложная часть, для которой нужно проектировать. В зависимости от того, что делает ваша служба, вы можете оставить последнюю выполненную задачу в таблице базы данных или общем файле данных. Вы также можете запустить его с самого начала и дважды проверить, была ли эта задача выполнена или нет, прежде чем действовать в соответствии с ней.

Опять же, это действительно будет зависеть от того, что служба должна выполнить. Надеюсь, это поможет.

Как служба на node2 узнает, где продолжить, где остановился node1? Это сложная часть, для которой нужно проектировать. В зависимости от того, что делает ваша служба, вы можете оставить последнюю выполненную задачу в таблице базы данных или общем файле данных. Вы также можете запустить его с самого начала и дважды проверить, была ли эта задача выполнена или нет, прежде чем действовать в соответствии с ней.

Опять же, это действительно будет зависеть от того, что служба должна выполнить. Надеюсь, это поможет.

это действительно будет зависеть от того, чего должна достичь служба. Надеюсь, это поможет.

это действительно будет зависеть от того, чего должна достичь служба. Надеюсь, это поможет.

3
ответ дан 7 December 2019 в 16:43
поделиться

Постоянная работа обоих - это, вероятно, самое простое решение, но вам нужно убедиться, что вы никогда не превышаете 50% нагрузки, иначе при выходе из строя одного из них произойдет перегрузка другого и, возможно, произойдет сбой. .

Для синхронизации используйте базу данных транзакций. Попытка написать собственную синхронизацию обычно приводит к ошибкам.

0
ответ дан 7 December 2019 в 16:43
поделиться

Если у вас могут работать обе службы - лучше. вам нужно убедиться, что они не имеют состояния или знают, как справиться с проблемой состояния, и база данных будет синхронизироваться между ними. Отсутствие единой точки отказа - вы перенесете проблему в БД, и там у вас будет активный активный кластер с двумя узлами, и позволить производителю БД решать проблемы синхронизации.

0
ответ дан 7 December 2019 в 16:43
поделиться

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

В случаях, когда вы должны обрабатывать аварийное переключение в коде:

  1. Тестовое соединение / вызов службы
  2. Если тест не пройден, отправка предупреждений
  3. Переход к следующей "зарегистрированной" конечной точке службы
0
ответ дан 7 December 2019 в 16:43
поделиться

Существует два основных подхода.

  1. клиенты знают о разных адресах конечной точки и переключаются по мере необходимости или в соответствии с указаниями другой службы или механизма конфигурации. (например, демонстрационное приложение stocktrader делает это.)

  2. Клиенты не знают, и вы используете стандартный подход балансировки сетевой нагрузки, который также может обеспечить аварийное переключение. F5 - это один продукт. Есть много других. Это в основном похоже на NAT для служб, все запросы проходят через ваш NLB, и он отправляет их на сервер и пересылает ответ обратно вызывающему. Эти продукты отслеживают сервисы и используют только те, которые работают. Также вы можете часто настраивать его с помощью правил, чтобы он назначал новые запросы серверам в зависимости от их рабочих нагрузок. Сервер Windows имеет эту функциональность в некоторой степени встроенной.

Как бы то ни было, гораздо проще, если ваши служебные вызовы не имеют состояния.

0
ответ дан 7 December 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: