#osgi #apache-servicemix
#osgi ( осги ) #apache-servicemix-сервис-микс #osgi #apache-servicemix
Вопрос:
Я подумываю об использовании servicemix для моего производственного сервера, интересно, если я использую сервлеты OSGI, означает ли это, что я могу развернуть новую версию своего приложения без простоев? Если нет, есть ли способ добиться нулевого времени простоя сервера? Спасибо.
Ответ №1:
Динамические службы OSGi могут помочь вам обновить ваш сервер без его перезапуска. Однако это указывает на то, что ваше приложение находится на вершине лестницы OSGi. Динамического получения сервиса недостаточно. Приложение должно сохранять свое состояние при достижении динамичности. Обратитесь к модели зрелости OSGi, разработанной Грэмом Чартерсом. [1]
В реальном мире нулевое время простоя достигается путем репликации / кластеризации. пример настройки похож на два ServiceMix-сервера, интерфейс которых поддерживается балансировщиком нагрузки. Когда мы обновляем один сервер, вы указываете балансировщик нагрузки на другой наоборот. просто пример.
Ответ №2:
Нулевое время простоя невозможно, независимо от того, что вы используете. В реальном мире слишком много внешних факторов. OSGi помогает уменьшить время простоя в сценариях обновления, позволяя запускать разные версии службы одновременно, позволяя соединениям использовать более новую службу, а затем при разрыве последнего активного соединения старый сервлет будет отключен.
Ответ №3:
OSGi может сократить или даже устранить запланированное время простоя на одном сервере. Оно может быть нулевым (или настолько близким к нулю, насколько это не имеет значения), если вы можете развернуть новую версию перед развертыванием старой версии.
Однако проблема, на которую намекают другие комментаторы, заключается в незапланированном простоях: OSGi не может спасти вас от аппаратного сбоя на сервере.
Для обеспечения устойчивости у вас должно быть более одного сервера, например, кластера. Как только у вас это будет, действительно не имеет большого значения, сколько времени потребуется для обновления программного обеспечения на одном конкретном сервере (если это не часы или дни …).
Ответ №4:
Хотя вы можете развернуть несколько версий пакета OSGi в одном контейнере, это действительно не помогает, потому что ваши сервлеты должны будут привязываться к разным URL-адресам, чтобы избежать конфликтов портов. Затем клиенты должны знать, чтобы переключиться на этот новый URL. Это может быть устранено путем динамического обновления конфигурации маршрутизации на прокси-сервере и т.д. В любом случае, это усложняет развертывание, и ваша архитектура по-прежнему ограничена другими способами (HA и т.д.).
Вместо этого лучшим вариантом было бы использовать кластер экземпляров Servicemix (и балансировщик нагрузки) на разных машинах. Затем выполните стандартную остановку / повторное развертывание / запуск на каждом сервере для выполнения обновления. Это также удовлетворяет потребности в высокой доступности и горизонтальной масштабируемости и т.д.