Наскільки подібними повинні бути середовища PreProd та Prod?


10

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

Ми підозрюємо, що Prod має деякі користувацькі дозволи у своєму обліковому записі чи налаштування IIS, які відрізняються, тому ми працюємо над цим зараз.

Тому я думаю, що все це було для мене досвідом навчання, і я не хочу, щоб те саме повторювалося знову. Я хотів би запитати, наскільки різними повинні бути ці середовища? Я завжди вважав, що PreProd має бути ідентичною копією середовища Prod, використовуючи копію тієї ж бази даних, використовуючи копію одного і того ж облікового запису користувача, слід встановлювати на тих же серверах і т.д.

Але як далеко я повинен це взяти? Якщо веб-сайт має зовнішню сторону, чи повинен PreProd бути зовні? Що робити, якщо на веб-сайті є компоненти, які не потребують облікового запису користувача або пароля для навігації? Чи все-таки добре це піддавати зовнішньому світу?


Скрізь, де я працював, Pre-Prod була прямою копією виробництва, за винятком випадків, коли база даних буде тижневою.
Нікз

@ Nick: Я не маю на увазі лише базу коду, я маю на увазі як цілий набір цілого середовища.
RoboShop

Відповіді:


6

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

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

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

Я не бачу проблеми з компонентами, які не потребують облікового запису та пароля. Якщо він не потребує пароля, він не є життєво важливим / чутливим, якщо він чутливий, то чому він не отримав пароль?


Нічого собі, це дурна відповідь. Отже, у вашому тестовому середовищі, якщо ви робите покупку, вона повинна стягнути кредитну карту та відправити придбане? Якщо середовище prod складається з 150 серверів, тест env також повинен? Я б сказав "очевидно", що між продуктом і тестом повинні бути відмінності, але для ChrisF це було не очевидно.
Мальволіо

@Malvolio - ні. Я зовсім цього не мав на увазі. Я думав більше про питання, порушені у питанні, з дозволами, зв’язками тощо.
ChrisF

11

Я вважаю, що найкращою практикою для цього є підхід Blue Green Deployment, сформований Джезом Хемблом та Девідом Фарлі в їхній книзі «Постійна доставка» та описаний Мартіном Фаулером у своєму дописі в блозі Blue Green Deployment .

Приміщення дуже просте. З поста Мартіна Фаулера:

Синьо-зелений розгортання

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

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

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


1+ для крутої діаграми
Nickz

ммм не впевнений у синхронізації бази даних. Це було б важко. Що робити, якщо транзакція відбулася через ваш попередній сервер? Це буде відображено у виробництві db?
RoboShop

Написано, це дуже дорого. Ви повинні дублювати все обладнання, необхідне для живого виробництва лише для тестування. Але так, крута схема.
Мальволіо

1
ТЕХНІЧНІСТЬ, н. В англійському суді чоловіка на ім'я Хоум судили за наклеп у звинуваченні сусіда у вбивстві. Його точні слова були: "Сер Томас Холт взяв сечечку і вдарив кухаря по голові, так що одна сторона голови впала на одне плече, а інша на інше плече". Підсудного було виправдано за дорученням суду, вчені судді вважали, що слова не звинувачували в убивстві, оскільки вони не стверджували смерть кухаря, що було лише висновком. - Амвросій Бірс
Мальволіо

1
Так, технічно мені не потрібно дублювати апаратне забезпечення, але навіть якщо ви ухиляєтесь від цієї вимоги, обдуривши віртуалізацію тощо, ви або (a) важко розподіляєте ресурси, такі як пропускна здатність та процесор, для кожного середовища, яке б мало така ж вартість, як дублювання апаратного забезпечення або (b) використання ресурсів, що означає, що ваші тестові проблеми можуть збити вашу виробничу систему.
Мальволіо

3

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


1

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

Однак точний тираж може бути неможливим у вашому поточному бюджеті. Чим ближче це, тим ефективніше буде тестування і тим менш ймовірні проблеми підкрадаються під час поштовху до виробництва.

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


1
Якщо ви робите тестування безпеки, то я погоджуюся, що це не повинно бути загальнодоступним, але, можливо, ви хочете, щоб це було для остаточного тестування прийняття (наприклад).
ChrisF

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

Так, у нас був конкурент, який перевіряв би всі свої речі на публічному комп’ютері протягом тижня або близько того, перш ніж виходити наживо. Вони ніколи не з'ясовували, як у нас завжди з'являються функції прямо до цього ...
Мальволіо,

1

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

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


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