Що ви можете зробити, щоб зменшити кількість помилок розгортання активного веб-сайту?


11

Я впевнений, що багато хто з вас відчули цю проблему. Веб-сайт або веб-додаток запущено та розповсюджується. Ви хочете завантажити наступну версію, але ви все не з'ясували, як-от встановити значення false у файлі конфігурації, вставити інший запис у базу даних і зробити багато незначних речей, які іноді можуть нараховувати до 20 і більше параметрів.

Як тільки ви завантажите нову версію, все зламається. Зараз виправлення проблеми може зайняти лише 20 хвилин, але загальний стрес, який ви терпите, та фінансовий збиток та шкоду доброї волі компанії іноді не можна забути.

Які способи зменшити такі типи помилок, які виникають при початковій конфігурації розгортання нової версії?

PS: Будь ласка, не зазначайте контрольні списки, тому що вони вже є. Проблема з контрольними списками полягає в тому, що вони завжди повинні оновлюватися, але вони не будуть.


6
Ви не повинні порушувати свій веб-сайт під час оновлення. Якщо ви ... то ваша процедура неправильна.
Рамхаунд

10
"Проблема з контрольними списками полягає в тому, що вони завжди повинні оновлюватися, але вони не будуть" У цьому випадку ви приречені. Ми можемо сказати вам добрі справи, і - як і контрольний список - цього не вийде зробити. Якщо ви не можете постійно оновлювати контрольні списки, вам слід розглянути можливість пошуку іншого виду роботи, якщо помилки і неохайність переносяться краще. Можливо, державна служба.
S.Lott

5
Якщо ви все не з'ясували, не слід розгортатися.
HLGEM

Якщо розгортання не вдається, вам доведеться повернути його назад.
Тулен Кордова

Відповіді:


28

Дві речі:

  • Постановочне середовище, на зразок схожому на тестування, де ви проводите тестові розгортання.
  • Проведення достатнього тестування цього середовища після розгортання. Автоматизовані та неавтоматизовані.

Є й інші речі, які можна зробити.

Я пропоную прочитати серію блогів із 5 частин про автоматизоване розгортання Троя Хант. Інструментарій, який він використовує, є специфічним для стеку MS, але поняття універсальні.


ви маєте на увазі, що на всіх веб-сайтах по всьому світу є постановочне середовище .
Saeed Neamati

15
Не всі вони. Ось чому вони мають такі проблеми з розгортанням. Будь-який сайт значного розміру, з яким я працював, має його.
Oded

@Saeed Neamati - Звичайно, це не є точною причиною, тому багато веб-сайтів насправді не працюють так, як слід (тобто, веб-сайт з оплати зовнішніх навантажень моїх кредитних спілок), коли трапляється, що ваші клієнти з цього місця лише сміються з вас. У моєму випадку у мене є вибір, ніж використовувати веб-сайт своїх кредитних спілок.
Рамхаунд

6
@saeed: Я не можу говорити за світ, але все моє прокляття точно.
Wyatt Barnett

1
@saeed все хороше.
HLGEM

13

Цікаво, чому ніхто не згадав про управління версіями - це один з найважливіших способів врятувати вас від неприємностей під час оновлення / оновлення.

По-перше, ваше розгортання має бути лише клоном стабільної гілки вашого сховища. Все, включаючи конфігураційні файли, файли SQL, сценарії встановлення / оновлення, ОБОВ'ЯЗКОВО контролювати версію

По-друге, вам потрібно мати "якусь" область постановки - це може бути все, що завгодно - локальний сервер, тимчасовий віртуальний хмарний сервер, який ви тільки що породили, дуже просте налаштування віртуального хоста або повноцінний спеціальний додаток, який ви підтримуєте разом з основним додатком. Різниця між цією "місцем постановки" та вашою "областю розвитку" полягає в тому, що попередні більш тісно моделюють (або імітують) ваше фактичне середовище розгортання. Наприклад, ви можете розвиватись на PHP 5.3.x за допомогою модуля Apache, але оскільки ваш хост PHP 5.2.x з FCGI, область постановки повинна бути однаковою.

Потім ви спочатку пишете та перевіряєте свої оновлення щодо свого середовища розробки. Об’єднайте ці зміни у сховищі області постановки та повторіть тест. У цей момент ви можете внести будь-які зміни у ваш конфігурацію відповідно до вашого розгортання - оскільки це версія контролюється, нічого не втрачається, і ви завжди можете повернути назад у разі проблем.

Нарешті з’єднайте зміни області постановки на вашій реальній копії розгортання.

Складність вашої області постановки повинна відображати складність та масштабність вашої програми. Але в будь-якому випадку контроль версій незамінний.

Звичайно, якщо ви не використовуєте контроль версій - нічого з цього не застосовується - але тоді це так само наївно, як писати базу даних в логотип.


3
+1, але я не згадував це, тому що я просто припустив, що контроль над версіями зрозумів ...
maple_shaft

3
Так, дивно, скільки людей лише soucre контролюють код, який їм важливий, а не такі речі, як конфігурації, SQl тощо.
HLGEM

1
@HLGEM, Ти маєш рацію, я все контролюю, у мене навіть є сервер підривної роботи, який працює вдома за документами НЕ РОЗВИТКУ, які я маю вдома, як мої резюме та кулінарні рецепти. :)
maple_shaft

2
@maple_shaft, Ohhhh, я ніколи не думав контролювати версію свого резюме, яка чудова ідея.
HLGEM

3
Безумовно, чудова ідея - одного дня ви подивитеся на журнал і побачите, що ви дізналися і як ставали все більш досвідченими з часом. І якщо ви здійснюєте один раз на місяць-два, ваш журнал через 25 років буде дуже цікавим.
treecoder

6

Як запропоновано, використовуйте систему постановки . Це дає вам можливість перевірити свої зміни в живому середовищі.

Це викликає ще один момент: мати тестерів . Тестуючи речі, які я написав, я не знаходжу стільки помилок, як коли хтось інший тестує мою програму.

Інша справа: автоматизувати процес розгортання . Проводите міграції db з мурахами, автоматично розгортайте найновішу версію зі svn через capistrano тощо. Коли ви щось розгортаєте, вам не доведеться робити більше, ніж лише клацання, і все автоматично. Особливо для веб-сайтів, які потребують певної настройки конфігурації, необхідні кроки, необхідні для розгортання, - це кошмар і можливість того, що щось піде не так вже й величезне.


6

Що-небудь абсолютно позитивно не повинно порушувати систему A і B і використовувати балансир навантаження для маршрутизації всіх запитів до A під час оновлення та тестування B, а потім перенаправляти все до B під час оновлення A.

Щоб отримати бонусні бали, додайте С та переконайтесь, що ваші системи географічно розділені, щоб землетрус не забрав 2 з них одночасно.

Для багатьох застосувань я визнаю, що це надмірно.

Це також ускладнює будь-яке управління транзакціями, що вам потрібно зробити, але проблеми не є непереборними.


1
Це правильна відповідь

2
Дякую. Але також важливі варіанти версій, постановочні системи та розгортання.
Білл Мішель

5

Так, вам потрібне середовище для тестування або постановки, коли ви проходите всі етапи, але зберігати окремі файли конфігурації для окремих середовищ є обов'язковим.

Environments
|_property_files
    |_ dev
        |_ com.bla.util
        |    |_ example.properties
        |_ com.bla.beans
        |    |_ someconfig.xml
    |_ test
        ....
    |_ production
        ....
|_database_updates
    |_ dev
        |_ insert_new_static_data.sql
        |_ ...

...

В основному в своїх сценаріях побудови та розгортання я приймаю властивість навколишнього середовища, яке отримає специфічні для металевих файлів метадані, такі як XML-файли, і замінить їх у своєму місці складання перед упаковкою. Далі у своїх скриптах розгортання я шукатиму будь-які файли SQL у оновленнях баз даних, а також виконуватиму їх у налаштованій базі даних для цього середовища.

Я міг би це зробити за допомогою спеціального завдання зібрати, але я фактично використовую деякі тести JUnit, щоб зробити це для мене. Якщо виникають будь-які винятки SQL, тест завершується невдало, і, таким чином, розгортання не вдається. Взагалі, сценарії SQL мають інтелект, якщо необхідні дані вже існують у середовищі, вони пропускають вставку або оновлення.

У мене також є аналогічний каталог для пакетних або оболонок скриптів, який мені потрібно запустити для конкретного середовища.

Повідомте все у вашому запитанні так: вони завжди повинні оновлюватися, але вони не будуть.

Ці конфігурації керують вашими автоматизованими збірками та розгортаннями, тому якщо ви НЕ ОНОВЛЮЙТЕ їх, то ваші збірки виходять з ладу, і ваш менеджер отримує електронне повідомлення про це. Це так само важливо, як для команди підтримувати конфігурації збирання та розгортання для конкретного випуску, як і для них перевірити код, який компілюється. Будь-яке порушення порушує збірку.

Коротше кажучи, більш широке прийняття принципів безперервної інтеграції (КІ) допоможе зняти біль виробничих випусків.


4

1) Спершу розгорніть тестовий майданчик і протестуйте зміни

2) мати всю конфігурацію у файлі конфігурації (веб-конфігурація чи подібне). Потім ця конфігурація повинна бути специфічною для програми та ніколи не перезаписувати. Будь-які зміни тоді сприймають, а не забувають змінити щось, що повинно відрізнятися від тесту.


І переконайтеся, що хтось перегляне цю конфігурацію для кожного коду.
HLGEM

4

На додаток до відмінних пропозицій створити попереднє виробниче середовище та скористатися автоматизованим тестуванням:

Зменшити складність бази даних. Менше коду, як правило, означає менше помилок і простіший час їх пошуку. Це філософія, що стоїть за рефакторингом, розділенням проблем та інше.

Сегментуйте кодову базу . Один загальний підхід - розділити його на:

  • декілька основних частин, які повільно змінюються та діляться на сайті
  • багато листових частин, які можуть змінюватися швидше, але кожна впливає лише на меншу частину ділянки

Таке розуміння вашої кодової бази дозволяє зосередити свою розробку та тестування на основних частинах, оскільки помилки там матимуть найбільш різкий ефект.


3

Добре виконаний реліз стосується планування та спілкування. Тому перед проведенням релізу врахуйте ці питання:

  1. Скільки часу може зайняти випуск, і чи існують якісь ризики для того, щоб люди продовжували взаємодіяти з моїм продуктом, поки випуск є Якщо є ризик для системи, подумайте про відключення системи в режимі офлайн та встановлення на її місце повідомлення "Система, яка зараз знаходиться на технічному обслуговуванні".

  2. Чи є клієнти, які вам можуть знадобитися сповістити про випуск достроково? Чи потрібно мені розповідати їм про можливі перебої в службі або погіршення продуктивності під час випуску? Особисто я завжди помиляюся над тим, що надмірно спілкуватися та розповідати всім клієнтам про майбутнє вікно випуску чи обслуговування в публічному блозі чи подібному місці.

  3. Які мої плани на випадок надзвичайних ситуацій повинні вийти з ладу? Наприклад, якщо випуск поганий, ми повинні повернутись назад і відновити систему таким чином, щоб мінімізувати будь-який час, коли ми перебуваємо в офлайні? І якщо так, чи добре задокументовані кроки щодо відколу випуску? Або я повинен мати потрібних людей за викликом або під рукою, щоб допомогти у вирішенні проблем у разі їх виникнення. Особисто я думаю, що найкращий спосіб підійти до планування будь-якого випуску - припустити, що з випуском щось піде не так. Таким чином я змусив себе продумати деякі з цих питань достроково.

Далі, коли мова йде про виконання випуску, один з найкращих способів забезпечити його безперебійне виконання - це практикувати, практикувати, практикувати та документувати все, що ви зустрінете на цьому шляху.. Отже, заздалегідь до розгортання нового коду у виробництві спочатку практикуйте розгортання коду у захищеному та належним чином середовищі інсталяції. Попросіть особу, яка буде відповідати за розгортання у виробництві, виконати тестове розгортання до постановки. Подумайте про це на своїй генеральній репетиції та поводьте себе так, як ви хочете, якщо це справжня річ. Документуйте все, що ви робите на кожному кроці; документуйте кожну команду, яку виконуєте, будь-який запущений SQL-код, будь-які файли, які ви модифікували, і те, як ви їх змінили, і для кожного кроку документуйте те, що ви очікуєте побачити, чи правильно виконана процедура. Якщо ви зіткнулися з якоюсь проблемою, задокументуйте, що ви зробили для її вирішення.

Тоді розгортання практики завершено, перегляньте свої замітки та перевірте, чи можете ви вдосконалити процес, щоб усунути помилки. Потім зробіть це все заново . Продовжуйте практикувати, поки виконання випуску не стане настільки ж рутинним, як слідування простим аркушам інструкцій, наприклад "увійдіть у цю машину, виконайте цю команду; потім увійдіть до бази даних та виконайте цю команду SQL; потім ..."

Перелічені вище - це те, що може зробити команда з управління операціями або випуском, щоб легко здійснити випуск. Але що може зробити інженерія, щоб мінімізувати ризики у випуску?

  1. Тримайте випуски невеликими. Простіше кажучи, чим складніший набір змін коду, що містяться у випуску, тим більш ризикованим стане випуск. Зробіть команду операції прихильністю, плануючи мати більшу кількість невеликих випусків, а не меншу кількість великих релізів за той самий період часу.

  2. Тест, тест, тест. Не випробовуйте свій код у вашому середовищі якості, а також використовуйте постановочне середовище для тестування програмного забезпечення. Часто трапляються помилки, які мають мало або нічого спільного з самим кодом, але, скоріше, мають першопричину, яка криється в конфігурації самого середовища (або деякої суміші двох). Щоб знайти ці проблеми, вам потрібно протестувати свій код у середовищі, яке тісно відображає виробництво, так само інсценізацію.

І як останнє слово, іноді найважливішим є не те, що ми робимо, щоб не допустити того, щоб справи пішли не так, а це те, як ми ведемо себе, коли вони йдуть не так. Тому я думаю, що важливо формувати культуру у вашій компанії на основі операційної прозорості. Не намагайтеся приховувати проблеми від клієнтів, будьте найближчі. Використовуйте Twitter активно, щоб повідомити клієнтам, чи є проблеми, про які ваша команда операторів зараз знає та працює над їх вирішенням ( Маяк в цьому дивний!). Подумайте про публікацію сторінки "статусу" для вашої послуги, на яку клієнти можуть посилатися, щоб дізнатися, чи щось не так ( TypePad пропонує чудовий приклад цього). Підсумок, завжди помиляється на стороні надмірного спілкування. Ваші клієнти будуть вдячні вам за це.


1

Багато відповідей тут уже розповідають, як реалізувати своє конкретне рішення проблеми, але, наскільки я можу сказати, справжня проблема полягає не в належній міграції / оновлення веб-сайту. Можливо, дизайн / архітектура позаду нього неміцна.

Якщо це правда, вам доведеться налаштувати архітектуру вашої системи таким чином, щоб вона була достатньо надійною, щоб продовжувати функціонувати належним чином, навіть якщо налаштування конфігурації змінилися або не було встановлено належним чином, і таким чином, що воно витончено погіршиться, якщо вони відбудуться. В ідеалі, якщо ви додали новий функціонал або змінили стару функціональність способами, які потребують нового стовпця бази даних, ваш сайт буде працювати, навіть якщо стовпець відсутній (можливо, без нової функціональності або з деградованою формою старого функціоналу) . Ваш клієнт не повинен втрачати гроші - в гіршому випадку він може не отримувати нові гроші від покращених вами вдосконалень.

Якщо ваша система досить неміцна, що параметри конфігурації можуть спричинити такі серйозні проблеми, оновлення програм не стане єдиним джерелом проблем - і вияснення, як зробити оновлення безпечно, лише збільшить шкоду, який ви відчуєте, коли вийде з ладу інше джерело.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.