При обновлении приложения до более новой версии необходимо максимально быстро с минимальными задержками и потерями запросов произвести переключение потока пользователей на новую версию. Для решения этой проблемы в разных проектах используются разные подходы. Одним из таких подходов является смена привязки главного домена к окружению с более новой версией приложения.
Как происходит процесс обновления в таком случае? Очень просо — вы настраиваете полноценную работу новой версии приложения в отдельном окружении, а потом производите смену привязки домена к другому IP, или проще говоря переключаете поток пользователей на обновленное окружение. Конечно в этом случае будут возникать
проблемы с кешем DNS серверов. Давайте проанализируем что предлагает Jelastic (Java Elastic Cloud Platform) для решения задачи обновления приложений и как обойти проблему DNS кеша.
Ниже представлена пошаговая инструкция решения подобной задачи с помощью Jelastic.
Первым делом создадим окружение. Назовем его prod-v1. В нашем случае это будет окружение с сервером GlassFish 3.1. Создадим простой проект HelloWorld.war. Загрузим его в Менеджер Деплоя и сделаем деплой этого приложения в наше окружение.
Привяжем к нашему приложению внешний домен. Для примера предположим, что я купил extdomain.org. с привязкой к домену prod-v1.jelastic.com
Теперь припаркуем домен в окружении.
Проверяем привязку домена к окружению
Все прошло удачно.
Мы проделали стандартные операции для привязки внешнего домена к приложению.
Далее начинается самое интересное.
Внесем изменения в наше приложение, создадим его более новую обновленную версию.
Загрузим его в менеджер деплоя. Сделаем клон текущего окружения целиком и назовем его prod-v2.
Задеплоим новую версию нашего приложения в только что склонированное окружение
Проверяем его работоспособность и если все ок, можем приступать к смене основной продуктивной версии. Для этого открываем панель настоек окружения и выбираем в области Swap Domains окружение для смены внешнего домена. В нашем случае это prod-v1
Смена домена происходит практически моментально и одновременно для всех пользователей.
Проблема с кешем DNS в данном случае отсутствует, т.к. используется внутренний резолвер доменов, который обновляется моментально.
Для экономии ресурсов можно выключить предыдущее окружение или просто удалить его.
Далее планируется реализовать постепенное (плавное) введение в строй нового приложения. А именно, балансируя запросы между двумя окружениями, постепенно увеличивая поток пользователей на новое окружение, при этом уменьшая поток на старое, в итоге сведя его полностью к нулю. После чего можно будет «потушить» предыдущее окружение.
P.S.: Завтра планируется выпустить очередное обновление Jelastic, в котором
— поддержка JEE6 на базе GlassFish 3.1.1 (теперь GF будет доступен всем желающим)
— значительно улучшенный менеджер логов
— обновление PostgreSQL до версии 8.4
Возможна временная недоступность панели управления окружениями. Однако, это не касается ваших приложений. Все развернутые приложения будут работать без перебоев.
В скором времени мы выложим очередной апдейт документации и видео.
Оперативно отслеживать наши новости можно в твитере и на странице фейсбука.
Как происходит процесс обновления в таком случае? Очень просо — вы настраиваете полноценную работу новой версии приложения в отдельном окружении, а потом производите смену привязки домена к другому IP, или проще говоря переключаете поток пользователей на обновленное окружение. Конечно в этом случае будут возникать
проблемы с кешем DNS серверов. Давайте проанализируем что предлагает Jelastic (Java Elastic Cloud Platform) для решения задачи обновления приложений и как обойти проблему DNS кеша.
Ниже представлена пошаговая инструкция решения подобной задачи с помощью Jelastic.
Первым делом создадим окружение. Назовем его prod-v1. В нашем случае это будет окружение с сервером GlassFish 3.1. Создадим простой проект HelloWorld.war. Загрузим его в Менеджер Деплоя и сделаем деплой этого приложения в наше окружение.
Привяжем к нашему приложению внешний домен. Для примера предположим, что я купил extdomain.org. с привязкой к домену prod-v1.jelastic.com
Теперь припаркуем домен в окружении.
Проверяем привязку домена к окружению
Все прошло удачно.
Мы проделали стандартные операции для привязки внешнего домена к приложению.
Далее начинается самое интересное.
Внесем изменения в наше приложение, создадим его более новую обновленную версию.
Загрузим его в менеджер деплоя. Сделаем клон текущего окружения целиком и назовем его prod-v2.
Задеплоим новую версию нашего приложения в только что склонированное окружение
Проверяем его работоспособность и если все ок, можем приступать к смене основной продуктивной версии. Для этого открываем панель настоек окружения и выбираем в области Swap Domains окружение для смены внешнего домена. В нашем случае это prod-v1
Смена домена происходит практически моментально и одновременно для всех пользователей.
Проблема с кешем DNS в данном случае отсутствует, т.к. используется внутренний резолвер доменов, который обновляется моментально.
Для экономии ресурсов можно выключить предыдущее окружение или просто удалить его.
Планы на дальнейшее развитие этой функциональности
Далее планируется реализовать постепенное (плавное) введение в строй нового приложения. А именно, балансируя запросы между двумя окружениями, постепенно увеличивая поток пользователей на новое окружение, при этом уменьшая поток на старое, в итоге сведя его полностью к нулю. После чего можно будет «потушить» предыдущее окружение.
P.S.: Завтра планируется выпустить очередное обновление Jelastic, в котором
— поддержка JEE6 на базе GlassFish 3.1.1 (теперь GF будет доступен всем желающим)
— значительно улучшенный менеджер логов
— обновление PostgreSQL до версии 8.4
Возможна временная недоступность панели управления окружениями. Однако, это не касается ваших приложений. Все развернутые приложения будут работать без перебоев.
В скором времени мы выложим очередной апдейт документации и видео.
Оперативно отслеживать наши новости можно в твитере и на странице фейсбука.