
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
11.07.2012, 19:29:31
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
А кто как организует у себя процесс непрерывного развертывания приложений? Сейчас у нас на работе развита такая система, что если идет обновление приложения, то бизнес дает нам время на остановку серверов, затем идет накат новой версии, он может касаться как кода так и структуры БД, затем небольшой тестинг, затем бизнес снова получает приложение в боевом виде. Понятно, что бизнес желает подсунуть технарям время для даунтайма между 1-3 ночи. Понятно что технари против. Отсюда и рождается вопрос. Возможно ли обойтись вообще без downtime? Так чтобы и манагеры не плакали и так чтобы деплой делался днем. Да, простые выкладки проходят и днем без проблем. Сложности возникают как правило при деплое завязанном на изменение схемы БД. Там часто бывает так что не только схема меняется, но и сами данные, что занимает время. Часы. Сейчас на ум приходит только вариант с копией базы и переключением на нее во время деплоя. Неужели из-за каждого наката делать копию терабайтной бздюхи? Либо копией изменяемых таблиц, но тогда придется это и в коде учитывать. А не хотелось бы. Кто какие схемы применяет? Какие встречал подводные камни? Есть готовые решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.07.2012, 20:06:33
|
|||
|---|---|---|---|
|
|||
Непрерывный деплой приложений |
|||
|
#18+
Я бы на вашем месте полностью заскриптовал процесс деплоя. Затем, я бы тестировал деплой каждого нового апдейта в тестовом окружении на тестовой базе. Если достичь высокого качества всего процесса, то в принципе можно ставить протестированный деплой скрипт в назначенные задания, чтобы он выполнился ночью без участия человека, или с минимальным участием человека (чтобы человек из дома за 5-10 минут проконтролировал, что все ок и лег спать). Можно предусмотреть автоматический откат на предыдущую версию в случае сбоя (многие базы поддерживают транзакционный DDL в той или иной степени, например Postgres(там весь DDL транзакционный) или Oracle (см create schema)). Если вам надо одновременно менять схему и данные без даунтайма, то вам надо использовать крутую функциональность СУБД. Например, Oracle Editions: http://docs.oracle.com/cd/E11882_01/appdev.112/e10471/adfns_editions.htm If other users must be able to change data in the tables while you are changing their structure, you also use forward crossedition triggers. If the pre- and post-upgrade applications will be in ordinary use at the same time (hot rollover), you also use reverse crossedition triggers. Crossedition triggers are not a permanent part of the application—you drop them when all users are using the post-upgrade application. Ваш вариант с копией будет работать только если во время апдейта вы не пишете в базу, а только читаете. В противном случае вам надо будет как-то переносить изменения из копии в основную базу, что нетривиально. Если вы готовы мириться с тем, что во время апдейта в базу нельзя будет писать, то я предлагаю следующее. У вас наверняка есть hot standby. Возможно, СУБД позволяет временно остановить накатку логов на стендбай на время апдейта (или это можно сделать грубой силой, выключив линк между master и standby). На время апдейта читайте со standby, потом вернетесь на master. Standby со временем догонит мастера. Сам я не уверен в работоспособности такой конструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.07.2012, 20:15:37
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
Пишем код, который патчит базу параллельно вместе с работой приложения. Когда все обновление заканчивается, то удаляем и патчилку и код, который отвечал за работу с данными разных версий, к чертям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.07.2012, 20:43:07
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
Ну смотрите, когда идет накат новой поставки, то от редеплоя приложения никуда не уйти, верно? Верно, то есть даун тайм всегда будет > 0. Совсем другое дело, что вы непонятно зачем гоняете тесты на продакшене - тут то и кроется вся проблема. Продакшн не предназначен для этого, на него надо только ставить стабилизированные версии и все. Возникает вопрос - где их стабилизировать? На предпродакшне (ну или "референс энвайрнмент" - разные названия одного и того же). Это среда, максимально приближенная к боевым условиям. То есть на ней должны стоять те же версии апп сервера и ОС, та же версия СУБД, смотреть на те же веб-сервисы (или максимально точно застабленные), ну и т.д.. Тут гоняйте тесты сколько вашей душе угодно, стабилизируйте, и т.д.. Если ваш заказчик не готов потратить на это ресурсы, то тут вступает действие политика - сможете ли вы грамотно снять с себя ответственность за нестабильные деплои и т.д.., короче это уже вне темы топика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2012, 13:25:12
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
svenom, к сожалению, даже на предпроде не всегда получается получить такую же ситуацию как на боевом. дело в окружении. часто в конфигах и т.д. под тестингом на боевом я имел ввиду только самые необходимые шаги. буквально, что оно встало и пашет. говорят GAE как то умеет обеспечивать версионность приложений. я думал есть инструменты похожие и в Java EE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2012, 13:42:14
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
Ясно, тогда в общем случае решения не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2012, 17:02:45
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
Кореецговорят GAE как то умеет обеспечивать версионность приложений. я думал есть инструменты похожие и в Java EE Я думаю, там только сам war-ник версионируется. Хотя точно не знаю. По схеме версионирования war-ников работает amazon elastic beans. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2012, 17:26:50
|
|||
|---|---|---|---|
|
|||
Непрерывный деплой приложений |
|||
|
#18+
говорят GAE как то умеет обеспечивать версионность приложений. я думал есть инструменты похожие и в Java EE Так же как в GAE вы можете сделать сами за полчаса. Деплоите каждую новую версию в отдельный контекст, например версия XYZ будет деплоиться в http://someapp/versionXYZ. Спереди ставите апач как прокси, чтобы он переадресовывал запросы http://someapp/* на http://someapp/versionXYZ/*. Когда надо переключиться, меняете конфиг апача и делаете SIGHUP. После этого можно удалять старый контекст. Но это будет работать только если у вас голые сервлеты, а не полноценный JavaEE сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.07.2012, 19:20:01
|
|||
|---|---|---|---|
|
|||
Непрерывный деплой приложений |
|||
|
#18+
Кореецговорят GAE как то умеет обеспечивать версионность приложений. я думал есть инструменты похожие и в Java EE http://docs.oracle.com/cd/E13222_01/wls/docs90/deployment/redeploy.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2012, 20:48:45
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
Спасибо. У оракла есть решение на самом сервере приложений. Разные стратегии деплоя. Неплохо. Здорово их описали. Спасибо подумаем)). Осталось только с версионностью базы решить. Есть такая идея. Если изменяется структура БД, то не альтерить текущие таблички. Оставить их в покое. Всегда создавать новые + скрипт копирования данных из старых в новых. Тогда можно начинать деплой БД отдельно от деплоя приложения и к тому же не останавливая работу. Есть только одна проблема - внешние ключи. и запросы к изменяемой табличке. И если запросы легко инкапсулируются в случае использования NamingQuery -JQL + достаточно будет поменять только одну Entity, которая кстати и так и так будет переделана в новую версию как минимум по структуре, то с внешними ключами сложнее. 1. С одной стороны их можно не создавать. но тогда придется этот контроль отдавать в сервер приложений. Довериться ему. А это чревато. Накосячить могут сами прогеры. Работа с ключами, связями, целостностью отлажена в любом движке СУБД до блеска и по скорости и по качеству. 2. А можно применив хук в структуре БД . Как вам такой вариант. Это будет как стратегия создания сущностей с поддержкой реалтайм обновления структур. Определимся что у каждой сущности всегда должен быть первичный ключ. Суррогат. Для каждой сущности, которая может иметь внешние ключи делаем структуру из двух таблиц с идентифицирующей связью 1:1. Первая таблица MasterTable содержит только ПК и никаких других полей. Вторая таблица DetailTable содержит внешний ключ на эту табличку, который в свою очередь тоже ПК. Все атрибуты хранятся в DetailTable. Т.е. условно это как бы одна табличка. что-то типа кластера. Все таблички которым нужен внешний ключ строят его на MasterTable. Т.е. DetailTable всегда свободна от внешних ключей на нее. Теперь если нам нужно дополнить или поменять атрибутивный состав DetailTable мы создаем табличку DetailTable_v2 и для нее накатываем новый Entity. Убедившись что скрипт копирования данных отработал успешно, то удаляем старую DetailTable. Cами по себе Detail могут содержать внешние ключи на другие сущности помимо своей Master. Но эти внешние ключи тоже будут исключительно на их MasterTable_<Other>. Т.е. они тоже всего лишь атрибуты. Про связи многие ко многим не думал пока. Но по сути это всегда тоже отдельная таблица и она сама по себе легко меняется на новую версию. Для таблицу связей M:N мастер не нужен будет. Ну как? Бред? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.07.2012, 20:54:38
|
|||
|---|---|---|---|
Непрерывный деплой приложений |
|||
|
#18+
Кореец, Да. я понимаю что и со связью Master-Detail могут накосячить, но это вылезет сразу. Просто ни один объект сохранный в базе не будет иметь ни одного заполненного атрибута. Либо ваще не выберется если джойн построить без внешнего объединения. т.е. это сразу вылезет. Такие ошибки легко поправятся до тестов. А если совсем уж зафантизироваться то можно в реляционке хранить основные связи, а сами значения атрибутов в KeyValue базе. NoSQL. Понятно что тогда джойнов от внешних ключей с Detail не получится. Ну и не надо. Там простейшими отдельными запросами по этим ключам к тоже NoSQL очень быстро отработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2012, 00:22:35
|
|||
|---|---|---|---|
|
|||
Непрерывный деплой приложений |
|||
|
#18+
КореецНу как? Бред?Да. Нужно просто взять и привыкнуть, что изменения в СУБД всегда проходят долго и болезненно, и слить эти вопросы на специально обученных людей, в противном случае Вы имеете все шансы начитаться на форумах всякой ереси (к примеру 12852967 ) и "внезапно" завалить базу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2131365]: |
0ms |
get settings: |
16ms |
get forum list: |
25ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
84ms |
get topic data: |
22ms |
get forum data: |
6ms |
get page messages: |
99ms |
get tp. blocked users: |
3ms |
| others: | 298ms |
| total: | 565ms |

| 0 / 0 |
