Apa sajakah teknik untuk memperbarui basis kode / basis data server produksi tanpa menyebabkan downtime?
deployment
Olivier Lalonde
sumber
sumber
Jawaban:
Secara umum, situs web yang saya kerjakan yang memiliki persyaratan semacam ini semuanya berada di belakang load-balancers, atau memiliki lokasi failover yang terpisah. Dalam sampel ini, saya akan menganggap bahwa Anda memiliki penyeimbang beban tunggal, 2 server web (A & B) dan 2 server basis data (M & N - biasanya server DB ditautkan melalui logshipping - setidaknya di dunia SQL Server ).
Dalam aplikasi web yang sangat rumit, apa yang digambarkan sebagai langkah 1-5 mungkin menghabiskan waktu semalaman dan menjadi 50 halaman Excel spreadsheet dengan waktu dan nomor kontak darurat. Dalam situasi seperti itu, memperbarui setengah sistem dijadwalkan pukul 6 sore hingga 6 pagi sambil membiarkan sistem tersedia bagi pengguna. Menangani pembaruan untuk situs DR biasanya dijadwalkan untuk malam berikutnya - hanya berharap tidak ada yang merusak hari pertama.
Dimana uptime adalah persyaratan, tambalan diuji pertama kali pada lingkungan QA, yang idealnya adalah perangkat keras yang sama dengan produksi. Jika mereka tidak menunjukkan gangguan, maka mereka dapat diterapkan pada jadwal reguler, yang biasanya pada akhir pekan.
sumber
Untuk database biasa (Oracle misalnya) dimungkinkan untuk mengubah skema basis data saat masih menjalankan kueri secara paralel. Ini membutuhkan perencanaan ke depan.
Ada beberapa kendala agar perubahan diterapkan:
CREATE INDEX
)Agar skema kompatibel dengan mundur, Anda biasanya dapat MENAMBAHKAN atau MEMODIFIKASI kolom, Anda hanya dapat MENGURANGI sesuatu jika kode yang ada tidak menggunakannya lagi.
Jika kode Anda tidak dapat menangani perubahan secara transparan, maka ubah kode sebelum mengubah database.
Saran sederhana untuk perencanaan ke depan: selalu jelaskan nama kolom dalam permintaan DB Anda (jangan gunakan
SELECT * FROM
). Dengan cara ini Anda tidak akan memiliki kolom baru muncul di permintaan lama.sumber
select *
berarti bahwa kode rusak jika kolom baru ditambahkan (karena kurangnya variabel untuk menulisnya). Tentu saja, ini mungkin hasil dari menggunakan bahasa yang sangat diketik.select *
lebih dapat diandalkan dan aman. Jika dulu Anda milikiselect one, two from ...
maka Anda hanya menggunakanone
dantwo
; jikathird
ditambahkan ke tabel, maka Anda tidak menggunakannya (di sini), jadi tidak ada alasan untuk mengambilnya. Dan jika Anda harus menggunakannya secara tiba-tiba, maka Anda akan memodifikasi kodenya, jadi sebaiknya Anda memodifikasi kueri saat ini!select
kebutuhan harus selektif mungkin (dan ditutupi oleh indeks) jika tidak saya bersulang (bahkan sebelum wajib bergabung). Saya minta maaf untuk mengatakan, tetapi pendekatan yang Anda gambarkan adalah kegagalan total pada produk-produk tersebut.Tidak semua sistem dapat, itu harus diatur dengan cara yang mendukungnya.
Sebagai contoh, salah satu sistem utama kami yang saya bantu tingkatkan beberapa tahun lalu harus tersedia 24/7. Ini terdiri dari beberapa tingkatan, termasuk tingkatan komunikasi murni antara Lapisan Antarmuka Pengguna dan Lapisan Bisnis. Karena cara lapisan komunikasi dikodekan, setiap perubahan di masa depan untuk skema Lapisan Bisnis atau DB dapat diimplementasikan tanpa pemadaman nyata. Dalam skenario terburuk, pengguna akan mengalami jeda 10-30 detik saat perubahan mulai berlaku.
Jika perubahan itu murni perubahan kode ke lapisan bisnis, mereka bisa diantrikan dan 'bersepeda' dengan hanya penundaan milidetik.
Ini bisa dilakukan karena:
Teknik lain melibatkan replikasi transaksi ke cermin lain dari sistem yang ada. Dengan menerapkan pembaruan ke satu, beralih dan memutar ulang semua transaksi yang dilakukan antara pembaruan dan beralih. YMMV tergantung pada sistem Anda.
sumber
Berikut ini perspektif yang berbeda, dari dunia sistem database tertanam dan sistem embedded. Sistem yang disematkan meliputi berbagai peralatan infrastruktur jaringan / telekomunikasi, dan dalam bidang ini mereka sering berbicara tentang waktu aktif 99,999% (lima 9s).
Kami (McObject) adalah vendor dari keluarga eXtremeDB dari produk sistem basis data tertanam, termasuk Ketersediaan Tinggi eXtremeDB.
Pertama, pahami bahwa "basis data tertanam" berarti bahwa sistem basis data adalah pustaka yang dikompilasi dan dihubungkan dengan kode aplikasi Anda; dalam arti itu, "tertanam" dalam aplikasi Anda.
Dengan Ketersediaan Tinggi eXtremeDB, ada instance MASTER dari aplikasi Anda (yang mungkin satu atau beberapa proses) dan satu atau lebih instance REPLICA dari aplikasi Anda. Ketika replika membuat koneksi ke master, ia menerima salinan database master melalui proses yang disebut "sinkronisasi awal". Ini dapat dilakukan ketika aplikasi master melanjutkan pekerjaannya. Setelah disinkronkan, ia menerima transaksi master melalui replikasi. Oleh karena itu, replika selalu memiliki data saat ini dan dapat mengambil alih (melalui proses yang disebut failover) jika master gagal.
Salah satu fitur sinkronisasi awal disebut "evolusi skema biner." Dalam bahasa Inggris yang sederhana, ini berarti bahwa proses mengisi basis data replika akan mengakomodasi perbedaan antara skema basis data replika dan skema basis data master.
Dalam praktiknya, ini berarti bahwa Anda dapat membangun versi aplikasi Anda yang lebih baru (dengan tabel baru / turun, bidang baru / turun / diubah, indeks baru / turun), lampirkan versi baru aplikasi Anda ke master, dan kemudian menyebabkan replika yang lebih baru untuk menjadi master baru (yaitu memaksa failover ke replika baru sehingga menjadi master dan master lama dimatikan sendiri). Voila, Anda telah memigrasikan aplikasi Anda dari versi N ke N +1, tanpa mengganggu ketersediaan sistem Anda. Sekarang Anda dapat memutakhirkan master lama dan replika lainnya ke versi N + 1.
sumber