Migrasi DB dan slot penyebaran Azure

15

Saya berencana untuk mendorong aplikasi web baru ke Layanan Aplikasi Web Azure (sebelumnya Situs Web Azure). Saya ingin memanfaatkan slot penempatan untuk dapat menguji penempatan saya sebelum mendorongnya ke produksi. Tidak masalah selama tidak ada perubahan skema DB yang diperlukan. Tetapi jika ada perubahan skema saya tidak bisa memiliki dua versi perangkat lunak yang beroperasi pada versi db yang sama. Karena saya menggunakan Migrasi EF, dorongan ke slot pementasan akan langsung menghasilkan pembaruan DB ke versi terbaru.

Jadi pertanyaan saya adalah, apakah ada penggunaan slot penempatan saat migrasi db diperlukan?

Bagaimana ini dilakukan untuk penyedia SaaS besar. Apakah mereka melakukan migrasi DB secara instan dengan versi baru? Itu pasti akan menyebabkan beberapa downtime.

Saya hanya bisa memikirkan solusi yang agak rumit untuk masalah ini, adakah yang sederhana?

Sam7
sumber
Jadi, Anda tidak memiliki database dev?
JeffO
Ya, kami memiliki sistem dev dan QA. Sistem yang dijelaskan di atas adalah untuk tujuan produksi.
Sam7
@ Sam7 apakah Anda berhasil menemukan solusi untuk masalah ini? Cheers
WestDiscGolf
Aku takut tidak. Kami sedang menguji perubahan migrasi di lingkungan yang terpisah.
Sam7
@ Sam7: saya pikir Anda dapat mengelola ini dengan file .config yang terpisah dengan string koneksi sendiri ke db Anda. tetapi Anda benar, ketika Anda menggunakan dari tahap ke produksi, manfaat dari rollback tidak berfungsi lagi. perubahan db akan berlaku secara instan. Saya ingin tahu untuk solusi dalam waktu dekat ...
Roger S.

Jawaban:

3

Rilis zero-downtime menggunakan slot Azure App Service dan satu database tunggal yang dibagikan oleh Staging dan Production dimungkinkan - tetapi Anda perlu memastikan bahwa semua perubahan database kompatibel dengan mundur, sehingga versi aplikasi web saat ini dan baru dapat berjalan secara bersamaan di slot Pementasan dan produksi.

Beberapa aturan yang memastikan ini berfungsi:

  • Setiap kolom database baru harus nullable atau memiliki nilai default
  • Mengganti nama kolom tidak diizinkan
  • Kolom menjatuhkan tidak diizinkan

Saat Anda perlu melakukan perubahan yang merusak, seperti mengganti nama atau menjatuhkan kolom, Anda perlu 2 rilis untuk melakukan ini:

  1. Versi baru aplikasi web harus dirilis, yang menghilangkan ketergantungan pada kolom yang diganti namanya / dijatuhkan
  2. Rilis tambahan dibuat yang melakukan perubahan destruktif

Walaupun ini terdengar agak rumit, dalam praktiknya Anda tidak akan sering melakukan perubahan destruktif.

Cocowalla
sumber
0

sudahkah Anda melihat item konfigurasi khusus slot? Di bawah WebApp / Pengaturan / Pengaturan Aplikasi Anda dapat menentukan pengaturan untuk aplikasi web tetapi juga menentukan apakah itu hanya berlaku untuk slot ini.

Karenanya, Anda dapat memiliki string koneksi spesifik slot untuk slot staging Anda dan menerapkan migrasi pada slot swapping juga.

Owain Thomas
sumber
2
Itu bertentangan dengan ide saya memiliki situs pementasan bekerja dari dataset yang sama persis (-> database) sebagai produksi.
Sam7