Migracje bazy danych i gniazda wdrażania platformy Azure

16

Planuję wypchnąć nową aplikację internetową do usługi Azure Web App Service (poprzednia witryna Azure). Chciałbym skorzystać ze szczelin wdrożeniowych, aby móc przetestować moje wdrożenie przed przekazaniem go do produkcji. Wszystko w porządku, o ile nie wymaga zmiany schematu DB. Ale jeśli nastąpi zmiana schematu, nie mogę mieć dwóch wersji oprogramowania działających na tej samej wersji bazy danych. Ponieważ korzystam z migracji EF, wypychanie do gniazda pomostowego natychmiast skutkowałoby aktualizacją bazy danych do najnowszej wersji.

Więc moje pytanie brzmi, czy jest jakieś wykorzystanie miejsc wdrażania, gdy wymagana jest migracja bazy danych?

Jak to się robi dla dużych dostawców SaaS. Czy przeprowadzają migrację bazy danych natychmiast dzięki nowej wersji? To z pewnością spowodowałoby pewne przestoje.

Mogę tylko wymyślić dość złożone rozwiązania tego problemu, czy jest coś prostego?

Sam7
źródło
Więc nie masz bazy danych deweloperów?
JeffO
Tak, mamy system tworzenia i kontroli jakości. System opisany powyżej służy do celów produkcyjnych.
Sam7
@ Sam7 czy udało Ci się znaleźć rozwiązanie tego problemu? Pozdrawiam
WestDiscGolf
Obawiam się że nie. Obecnie testujemy zmiany migracji w osobnym środowisku.
Sam7
@ Sam7: myślę, że możesz to zrobić za pomocą oddzielnego pliku .config z własnym ciągiem połączenia z bazą danych. ale masz rację, kiedy wdrażasz od etapu do produkcji, przywracanie nie działa. zmiany db zostaną zastosowane natychmiast. jestem ciekaw rozwiązania w najbliższej przyszłości ...
Roger S.,

Odpowiedzi:

3

Wydania o zerowym przestoju przy użyciu gniazd usługi Azure App Service i pojedynczej bazy danych udostępnianej przez pomostowe i produkcyjne są możliwe - ale należy upewnić się, że wszystkie zmiany w bazie danych są zgodne wstecz, tak aby bieżąca i nowe wersje aplikacji sieci web mogły działać jednocześnie w miejsca na inscenizację i produkcję.

Niektóre zasady, które zapewniają, że to działa:

  • Wszelkie nowe kolumny bazy danych powinny mieć wartość zerową lub mieć wartości domyślne
  • Zmiana nazw kolumn jest niedozwolona
  • Upuszczanie kolumn jest niedozwolone

Kiedy musisz dokonać destrukcyjnych zmian, takich jak zmiana nazwy lub upuszczenie kolumn, potrzebujesz 2 wydań, aby to zrobić:

  1. Nowa wersja aplikacji internetowej powinna zostać wydana, co usuwa zależność od zmienionych nazw / upuszczonych kolumn
  2. Wprowadzono dodatkowe wydanie, które dokonuje destrukcyjnych zmian

Choć wydaje się to nieco skomplikowane, w praktyce prawdopodobnie nie będziesz często dokonywał destrukcyjnych zmian.

Cocowalla
źródło
0

czy spojrzałeś na elementy konfiguracji specyficzne dla slotów? W obszarze WebApp / Settings / Application Settings możesz określić ustawienia aplikacji internetowej, ale także określić, czy ma ona dotyczyć tylko tego gniazda.

W związku z tym możesz mieć specyficzny dla szczeliny ciąg połączenia dla swojego boksu pomostowego i zastosować migrację również na gniazdach zamiany.

Owain Thomas
źródło
2
Jest to sprzeczne z moim pomysłem, aby strona pomostowa działała na tym samym zestawie danych (-> baza danych), co produkcja.
Sam7