2013-04-17 2 views
0

Моя компания планирует внедрить кластерную систему с множеством услуг, которые будут развернуты автоматически на разных машинах и будут взаимодействовать друг с другом (стиль SOA). Иногда услуги будут иметь взаимозависимости.Управление жизненным циклом распределенных компонентов

Например: Служба B (приложение) может быть запущена только при запуске службы A (База данных).

Каждая услуга планируется запустить как другой Java-процесс, возможно, развернутый как WAR (внутри выделенного tomcat) или даже без Интернета.

На данный момент у нас есть все сервисы в одной и той же WAR и только один tomcat, который развертывает WAR. Все сервисы, определенные Spring и Spring, управляют зависимостями для нас.

Итак, я спрашиваю себя, существуют ли какие-то рамки, которые помогут управлять службами в распределенной среде, как я описал выше?

Заранее спасибо

ответ

2

ZooKeeper.

Исправление, используйте Netflix Куратор, каркас на вершине zookeeper, который упрощает работу с ним.

Где я работаю, я недавно внедренной Coordinator класса, который имеет два метода:

waitForDependencies - синхронном метод, который проверяет живости в dependnecies и блокирует текущий поток текущей службы, пока не уведомлено, что все службы зависимостей, живы , Живучести проверка осуществляется путем проверки наличия узлов, которые создаются с помощью depenedency услуг, в конце их инициализации процесса, позвонив по телефону notifyUp

notifyUp - синхронном метод, который оповещает мир, что в настоящее время услуга, которая требует, что метод жив.Уведомление делается путем создания эфемерного (временного, остается живым до тех пор, пока соединение, в котором оно было создано, является живым) узел в кластере zk, который ищет другие службы, которые зависят от него, с использованием waitForDependencies

2

Netflix выпустили свой инструмент с открытым исходным кодом - Asgard, который управляет и развертывает экземпляры в облаке. Он плотно связан с EC2 (последний раз, когда я проверил). В зависимости от того, развертываетесь ли вы в облаке амазонки, вы можете найти это полезным. Я не знаю, поддерживает ли он зависимости, но управляет развертываниями в распределенной среде. Netflix очень много говорит о зависимостях служб в своем блоге, поэтому решение для развертывания может иметь, чтобы решить эту проблему.

Я не знаю других сервисов/фреймворков, которые это делают. Если вы должны написать это самостоятельно, я думаю, вы можете настроить несколько задач, которые развертывают службы. Одна задача может зависеть от другой, чтобы имитировать зависимость службы. Оконечные точки Pinging URL могут проверить, существует ли служба A до развертывания B.

Есть еще один способ взглянуть на это. Вам не нужно будет проверять зависимость, если вы убедитесь, что ваши службы работают нормально. Инструменты мониторинга, такие как Nagios могут помочь здесь. Поиск и устранение неисправностей сразу же поможет вам сосредоточиться на развертывании службы A вместо проверки ваших зависимостей при каждом развертывании.

+0

Большое спасибо за ценную информацию. 10 баллов от меня здесь без сомнения :) Я проверю netflix, хотя мы не планируем работать на EC2. Я не думаю, что Дженкинс может помочь здесь, потому что я считаю, что его работа заключается в создании проекта, но не в развертывании в производственной среде. Я бы предпочел работать с некоторой услугой, которая (возможно) устанавливает агенты на каждой машине, а затем управляет всем сама по себе (+ обеспечивает мониторинг, если возможно :)) –

+0

Некоторые люди используют Jenkins для развертывания для prod с использованием задач maven, таких как 'tomcat: deploy '. Программное обеспечение, использующее агенты и управление зависимостями, безусловно, будет выглядеть гораздо менее запутанным. Удачи и сообщите нам, найдете ли вы то, что ищете. –

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