Jakie powinny być środowiska PreProd i Prod?

10

Niedawno byłem przy projekcie i podczas premiery zdaliśmy sobie sprawę, że nie działał on w produkcji. Działa we wszystkich innych środowiskach, ale ponieważ mamy oddzielny zespół wydający i nie możemy sami skonfigurować serwerów i środowisk, nie mamy widocznej konfiguracji na nich.

Podejrzewamy, że Prod ma pewne uprawnienia użytkownika na swoim koncie lub w ustawieniach IIS, które są różne, więc pracujemy nad tym teraz.

Myślę więc, że to wszystko było dla mnie doświadczeniem uczenia się i nie chcę, aby to samo się powtarzało. Chciałbym zapytać, jak różne powinny być te środowiska? Zawsze myślałem, że PreProd powinien być identyczną kopią środowiska Prod, używając kopii tej samej bazy danych, używając kopii tego samego konta użytkownika, powinien być zainstalowany na tych samych serwerach itp.

Ale jak daleko mam to zrobić? Jeśli strona internetowa jest skierowana na zewnątrz, czy PreProd powinien być skierowany na zewnątrz? Co się stanie, jeśli witryna zawiera komponenty, do których nawigacji nie wymaga konta użytkownika ani hasła? Czy nadal można wystawiać go na działanie świata zewnętrznego?

RoboShop
źródło
Wszędzie, gdzie pracowałem, Pre-Prod był bezpośrednią kopią Produkcji, z tą różnicą, że bazy danych miałyby tydzień.
Nickz
@Nick: Nie mam na myśli tylko podstawy kodu, mam na myśli całą konfigurację całego środowiska.
RoboShop

Odpowiedzi:

6

Z pewnością powinieneś testować środowisko, które jest identyczne z serwerami produkcyjnymi, o ile jest to możliwe. Jeśli tego nie zrobisz, nie będziesz testować, z czego będą korzystać Twoi klienci. Jeśli nic więcej nie potrzebujesz takiego środowiska do testowania raportów o błędach.

Oczywiście będą rzeczy, których nie chcesz, aby były identyczne - na myśl przychodzą linki do systemów płatności, ale należy je wyśmiewać, jakby były prawdziwe . Są też rzeczy, których nie można powielić - skala systemu.

Możesz przetestować za pomocą zewnętrznego adresu URL - ponownie testujesz to, co zobaczą Twoi użytkownicy. Również testowanie za pomocą zewnętrznego adresu URL będzie wykorzystywać sieć w inny sposób niż wewnętrzne użycie systemu. Uprawnienia (na przykład) będą odgrywać rolę, podobnie jak dostępna przepustowość, zapory ogniowe itp. Wszyscy użytkownicy będą musieli stawić czoła, ale pominiesz je, jeśli uzyskasz bezpośredni dostęp do systemu.

Nie widzę jednak problemu ze składnikami, które nie wymagają konta i hasła. Jeśli nie potrzebuje hasła, to nie jest istotne / wrażliwe, jeśli jest wrażliwe, to dlaczego nie ma hasła?

ChrisF
źródło
Wow, to głupia odpowiedź. Więc w swoim środowisku testowym, jeśli dokonasz zakupu, powinien obciążyć kartę kredytową i wysłać to, co kupiłeś? Jeśli środowisko prod składa się ze 150 serwerów, środowisko testowe również powinno? Powiedziałbym „oczywiście”, że muszą istnieć różnice między prod a testem, ale dla ChrisF nie było to oczywiste.
Malvolio
@Malvolio - nie. Wcale nie miałem tego na myśli. Myślałem więcej o kwestiach poruszonych w pytaniu z uprawnieniami, połączeniami itp.
ChrisF
11

Myślę, że najlepszą praktyką jest podejście Blue Green Deployment, ukute przez Jez Humble i David Farley w ich książce Continuous Delivery i opisane przez Martina Fowlera w jego blogu Blue Green Deployment .

Założenie jest bardzo proste. Z postu Martina Fowlera:

Wdrożenie niebiesko-zielone

Niebiesko-zielone podejście do wdrażania ... [zapewnia], że masz dwa środowiska produkcyjne, możliwie identyczne. W dowolnym momencie jeden z nich, powiedzmy na przykład niebieski, jest aktywny. Przygotowując nową wersję oprogramowania, przeprowadzasz ostatni etap testowania w zielonym środowisku. Gdy oprogramowanie działa w zielonym środowisku, przełączasz router, aby wszystkie przychodzące żądania trafiały do ​​zielonego środowiska - niebieskie jest teraz bezczynne.

Wdrożenie niebiesko-zielone daje również szybki sposób na wycofanie - jeśli coś pójdzie nie tak, przełącz router z powrotem na niebieskie środowisko.

Takie podejście rozwiązałoby problem braku identycznych środowisk przedprodukcyjnych i produkcyjnych, a także optymalizacji strategii wdrażania.

Paddyslacker
źródło
1+ za fajny schemat
Nickz
mmm nie jest pewien synchronizacji bazy danych. Byłoby trudne Co się stanie, jeśli transakcja zostanie przeprowadzona za pośrednictwem Twojego serwera przedprodukcyjnego? Czy znalazłoby to odzwierciedlenie w db produkcji?
RoboShop
Jest napisane, to bardzo drogie. Musisz zduplikować cały sprzęt niezbędny do produkcji na żywo tylko w celu przetestowania. Ale tak, fajny schemat.
Malvolio
1
TECHNICZNOŚĆ, n. Na angielskim sądzie oskarżony o morderstwo osądzony był mężczyzna o nazwisku Home. Jego dokładne słowa brzmiały: „Sir Thomas Holt wziął tasak i uderzył kucharza głową w głowę, tak że jedna strona głowy spadła na jedno ramię, a druga na drugie ramię”. Oskarżony został uniewinniony z polecenia sądu, uczeni sędziowie utrzymywali, że słowa nie oskarżają o morderstwo, ponieważ nie potwierdzili śmierci kucharza, co jest jedynie wnioskiem. - Ambrose Bierce
Malvolio
1
Tak, technicznie rzecz biorąc, nie muszę powielać sprzętu, ale nawet jeśli unikniesz tego wymogu, wygłupiając się dzięki wirtualizacji i tak, albo (a) mocno alokujesz zasoby, takie jak przepustowość i procesor, do każdego środowiska, które miałoby taki sam koszt jak powielanie sprzętu lub (b) współdzielenie zasobów, co oznacza, że ​​problemy z testem mogą obniżyć system produkcyjny.
Malvolio
3

Nasze końcowe środowisko przedprodukcyjne to po prostu jeden z serwerów działających na żywo wyjęty z modułu równoważenia obciążenia. Wdrażamy naszą kompilację przedprodukcyjną (która jest zasadniczo identyczna z kompilacją na żywo, z wyjątkiem parametrów połączenia z bazą danych i kilku innych zmian konfiguracji) i testujemy ją. Jeśli to pójdzie dobrze, wdrażamy kod na żywo, a na koniec, jeśli okaże się, że jest to w porządku, zwracamy serwer do modułu równoważenia obciążenia i wdrażamy wersję produkcyjną na pozostałych serwerach jeden po drugim.

FinnNk
źródło
1

Powinny być jak najbardziej podobne, aby można było zidentyfikować problemy w dowolnym punkcie systemu, z możliwym wyjątkiem niemożności skalowania. Jeśli to w ogóle możliwe, jedyną różnicą między środowiskiem produkcyjnym a środowiskiem przedprodukcyjnym / testowym / testowym byłby rozmiar - oczekiwałbym, że środowisko produkcyjne będzie się składać z wielu innych maszyn w środowisku na dużą skalę. Powinieneś nawet odzwierciedlić przeznaczenie posiadanych maszyn, takich jak serwery baz danych, serwery WWW i tak dalej.

Jednak dokładna replikacja może nie być możliwa w ramach obecnego budżetu. Im bliżej, tym bardziej skuteczne będą testy i tym mniej prawdopodobne problemy pojawią się podczas popychania do produkcji.

Zajmuję inne stanowisko niż ChrisF, jeśli chodzi o to, aby środowisko to było dostępne publicznie. Mówię, że nie powinno tak być. Zdecydowałbym się uruchomić na kopii rzeczywistych baz danych lub przynajmniej kopii podzbioru rzeczywistych baz danych i środowiska skierowanego do wewnątrz. W ten sposób możesz przetestować rzeczywiste i realistyczne dane i nie martwić się lukami bezpieczeństwa prowadzącymi do wycieku. Możesz oczywiście zdezynfekować dane, ale może to usunąć niektóre „brudne dane” ze środowiska, które mogą prowadzić do wykrycia defektu w aktywnym systemie.

Thomas Owens
źródło
1
Jeśli przeprowadzasz testy bezpieczeństwa, zgadzam się, że nie powinno to być publiczne, ale możesz chcieć, aby było to na przykład końcowe testy akceptacyjne (na przykład).
ChrisF
To także jest ważny punkt. Zazwyczaj bardziej skupiam się na bezpieczeństwie niż na użyteczności, ale jeśli chcesz udostępnić nową wersję swojego systemu do testów akceptacyjnych (być może przez klientów lub w ramach publicznej wersji beta), to tak, publicznie środowisko byłoby wymagane.
Thomas Owens
Tak, mieliśmy konkurenta, który testowałby wszystkie swoje rzeczy na ogólnodostępnym komputerze przez około tydzień przed rozpoczęciem transmisji. Oni nigdy nie zorientowali się, jak my zawsze mieliśmy możliwości na prawo przed zrobili ...
Malvolio
1

Wszędzie, gdzie pracowałem, banki, telekomunikacja itp. Pre-prod był bezpośrednią kopią produkcji, z tym że baza danych miałaby około tygodnia. To był ogromny proces utrzymywania danych w całym przedprodukcie, ale został uznany za niezbędny dla firm, dla których pracowałem, dla których wdrożyłem przedprodukcję.

W sekcji dotyczącej bankowości w UA rząd nakłada grzywny na banki za awarie usług, np. Bankomaty internetowe itp. Są co minutę niedostępne. Często zdarza się, że zespół projektowy / testujący został zwolniony z powodu incydentu. Pre-prod nie jest dla każdej firmy lub procesu rozwoju, ale dla niektórych jest niezbędny.

Nickz
źródło
3
„Nierzadko słyszy się o zespole programistów / testujących zwolnionych z powodu incydentu” - tak, to pomoże. Bicie będzie trwało, dopóki nie poprawi się morale.
Malvolio