Untuk menggunakan versi baru situs web kami, kami melakukan hal berikut:
- Zip up kode baru, dan unggah ke server.
- Di server langsung, hapus semua kode langsung dari direktori situs web IIS.
- Ekstrak kode file zip baru ke direktori IIS yang sekarang kosong
Semua proses ini ditulis dalam skrip, dan terjadi dengan sangat cepat, tetapi masih ada downtime 10-20 detik ketika file lama dihapus, dan file baru sedang digunakan.
Adakah saran tentang metode downtime 0 detik?
asp.net
iis
deployment
redundancy
Karl Glennon
sumber
sumber
Jawaban:
Anda membutuhkan 2 server dan penyeimbang beban. Berikut ini langkah-langkahnya:
Masalahnya, bahkan dalam hal ini Anda masih akan memiliki aplikasi restart dan kehilangan sesi jika Anda menggunakan "sesi lengket". Jika Anda memiliki sesi database atau server negara, maka semuanya akan baik-baik saja.
sumber
The Microsoft Web Deployment Alat mendukung ini untuk beberapa derajat:
Tampaknya transaksi ini untuk seluruh sinkronisasi. Selain itu, TxF adalah fitur Windows Server 2008, jadi fitur transaksi ini tidak akan berfungsi dengan versi sebelumnya.
Saya percaya mungkin untuk memodifikasi skrip Anda untuk downtime 0 menggunakan folder sebagai versi dan metabase IIS:
Metode ini menawarkan manfaat berikut:
sumber
Anda dapat mencapai penerapan downtime nol pada server tunggal dengan memanfaatkan Penelusuran Permintaan Aplikasi di IIS sebagai penyeimbang beban perangkat lunak antara dua situs IIS lokal pada port yang berbeda. Ini dikenal sebagai strategi penyebaran biru hijau di mana hanya satu dari dua situs tersedia di penyeimbang beban pada waktu tertentu. Menyebarkan ke situs yang "turun", menghangatkannya, dan membawanya ke penyeimbang beban (biasanya dengan melewati pemeriksaan kesehatan Permintaan Aplikasi Routing), kemudian mengambil situs asli yang naik, keluar dari "kolam" (lagi dengan membuat pemeriksaan kesehatannya gagal).
Tutorial lengkap dapat ditemukan di sini.
sumber
Saya telah melalui ini baru-baru ini dan solusi saya datang dengan memiliki dua situs yang didirikan di IIS dan untuk beralih di antara mereka.
Untuk konfigurasi saya, saya memiliki direktori web untuk setiap situs A dan B seperti ini: c: \ Intranet \ Live A \ Interface c: \ Intranet \ Live B \ Interface
Di IIS, saya memiliki dua situs identik (port yang sama, otentikasi dll) masing-masing dengan kumpulan aplikasi mereka sendiri. Salah satu situs sedang berjalan (A) dan yang lainnya dihentikan (B). yang live juga memiliki header host langsung.
Ketika datang untuk menyebarkan untuk hidup, saya cukup mempublikasikan ke lokasi situs STOPPED. Karena saya dapat mengakses situs B menggunakan port-nya, saya dapat melakukan pra-pemanasan situs sehingga pengguna pertama tidak menyebabkan aplikasi mulai. Kemudian menggunakan file batch saya salin header host langsung ke B, berhenti A dan mulai B.
sumber
Menggunakan kelas ServerManager dari Microsoft.Web.Administration Anda dapat mengembangkan agen penempatan Anda sendiri.
Caranya adalah dengan mengubah PhysicalPath dari VirtualDirectory, yang menghasilkan pergantian atom online antara aplikasi web lama dan baru.
Ketahuilah bahwa ini dapat menghasilkan AppDomains lama dan baru yang dieksekusi secara paralel!
Masalahnya adalah bagaimana menyinkronkan perubahan ke database dll.
Dengan polling untuk keberadaan AppDomains dengan PhysicalPaths lama atau baru dimungkinkan untuk mendeteksi kapan AppDomain lama dihentikan, dan jika AppDomain baru telah dimulai.
Untuk memaksa AppDomain untuk memulai Anda harus membuat permintaan HTTP (IIS 7.5 mendukung fitur Autostart)
Sekarang Anda perlu cara untuk memblokir permintaan untuk AppDomain baru. Saya menggunakan mutex bernama - yang dibuat dan dimiliki oleh agen penempatan, menunggu oleh Application_Start dari aplikasi web baru, dan kemudian dirilis oleh agen penempatan setelah pembaruan database telah dibuat.
(Saya menggunakan file penanda di aplikasi web untuk mengaktifkan perilaku menunggu mutex) Setelah aplikasi web baru berjalan saya menghapus file penanda.
sumber
OK jadi karena semua orang downvoting jawaban yang saya tulis jauh di tahun 2008 * ...
Saya akan memberi tahu Anda bagaimana kami melakukannya sekarang pada tahun 2014. Kami tidak lagi menggunakan Situs Web karena kami menggunakan ASP.NET MVC sekarang.
Kami tentu tidak memerlukan penyeimbang beban dan dua server untuk melakukannya, tidak apa-apa jika Anda memiliki 3 server untuk setiap situs web yang Anda pelihara, tetapi itu adalah jumlah total yang harus dibayar untuk kebanyakan situs web.
Selain itu, kami tidak mengandalkan penyihir terbaru dari Microsoft - sihir yang terlalu lambat, dan terlalu banyak tersembunyi, dan terlalu rentan untuk mengubah namanya.
Inilah cara kami melakukannya:
Kami memiliki langkah pembuatan pos yang menyalin DLL yang dihasilkan ke folder 'bin-pub'.
Kami menggunakan Beyond Compare (yang luar biasa **) untuk memverifikasi dan menyinkronkan file yang diubah (melalui FTP karena didukung secara luas) hingga server produksi
Kami memiliki URL aman di situs web yang berisi tombol yang menyalin semua yang ada di 'bin-pub' ke 'bin' (mengambil cadangan terlebih dahulu untuk mengaktifkan rollback cepat). Pada titik ini aplikasi restart sendiri. Kemudian ORM kami memeriksa apakah ada tabel atau kolom yang perlu ditambahkan dan membuatnya.
Itu hanya downtime milidetik. Restart aplikasi dapat memakan waktu satu atau dua detik tetapi selama permintaan restart buffered sehingga tidak ada downtime yang efektif.
Seluruh proses penyebaran memakan waktu mulai dari 5 detik hingga 30 menit, tergantung berapa banyak file yang diubah dan berapa banyak perubahan untuk ditinjau.
Dengan cara ini Anda tidak perlu menyalin seluruh situs web ke direktori yang berbeda tetapi hanya folder bin. Anda juga memiliki kontrol penuh atas proses dan tahu persis apa yang berubah.
** Kami selalu melakukan pengamatan cepat terhadap perubahan yang kami lakukan - sebagai pemeriksaan menit terakhir, jadi kami tahu apa yang harus diuji dan jika ada yang rusak, kami siap. Kami menggunakan Beyond Compare karena ini memungkinkan Anda dengan mudah membedakan file melalui FTP. Saya tidak akan pernah melakukan ini tanpa BC, Anda tidak tahu apa yang Anda timpa.
* Gulir ke bawah untuk melihatnya :( BTW Saya tidak akan lagi merekomendasikan Situs Web karena mereka lebih lambat untuk dibangun dan dapat rusak parah dengan setengah file temp yang dikompilasi. Kami menggunakannya di masa lalu karena mereka memungkinkan file-by-file lebih gesit penyebaran Sangat cepat untuk memperbaiki masalah kecil dan Anda dapat melihat apa yang Anda sebarkan (jika menggunakan Beyond Compare tentu saja - kalau tidak lupakan saja).
sumber
Satu-satunya metode downtime nol yang bisa saya pikirkan melibatkan hosting di setidaknya 2 server.
sumber
Saya akan sedikit memperbaiki jawaban George, sebagai berikut, untuk satu server:
Langkah 4 akan menyebabkan proses pekerja IIS untuk didaur ulang.
Ini hanya downtime nol jika Anda tidak menggunakan sesi InProc; gunakan mode SQL sebagai gantinya jika Anda dapat (bahkan lebih baik, hindari status sesi sepenuhnya).
Tentu saja, ini sedikit lebih terlibat ketika ada beberapa server dan / atau perubahan basis data ....
sumber
Untuk memperluas jawaban sklivvz, yang mengandalkan jenis penyeimbang beban (atau hanya salinan siaga di server yang sama)
Dimungkinkan untuk memperkenalkan sedikit pengujian asap, dengan membuat snapshot / salinan basis data, tetapi itu tidak selalu layak.
Jika mungkin dan perlu gunakan "perbedaan rute", seperti URL penyewa yang berbeda: s (customerX.myapp.net) atau pengguna yang berbeda, untuk disebarkan ke grup kelinci percobaan yang tidak diketahui terlebih dahulu. Jika tidak ada yang gagal, lepaskan untuk semua orang.
Karena migrasi basis data terlibat, memutar kembali ke versi sebelumnya seringkali tidak mungkin.
Ada beberapa cara untuk membuat aplikasi bermain lebih baik dalam skenario ini, seperti menggunakan antrian acara dan mekanisme pemutaran, tetapi karena kita berbicara tentang menyebarkan perubahan pada sesuatu yang sedang digunakan, benar-benar tidak ada cara pembodohan.
sumber
Beginilah cara saya melakukannya:
Persyaratan sistem minimum absolut:
1 server dengan
(atau bahkan hanya dua aplikasi reverse-proxy pada 2 port TCP yang berbeda tanpa kotak pasir apa pun)
Alur kerja:
mulai transaksi myupdate
sumber
Saya sarankan menyimpan file-file lama di sana dan hanya menimpa mereka. Dengan cara itu downtime terbatas untuk menimpa file tunggal dan hanya ada satu file yang hilang pada suatu waktu.
Tidak yakin ini membantu dalam "aplikasi web" (saya pikir Anda mengatakan itu yang Anda gunakan), itulah sebabnya kami selalu menggunakan "situs web". Juga dengan penggunaan "situs web" tidak memulai kembali situs Anda dan membatalkan semua sesi pengguna.
sumber