Pengiriman Berkesinambungan atau Penyebaran Berkesinambungan dari infrastruktur dan kode relatif sederhana dibandingkan dengan mencoba pendekatan yang sama untuk database, khususnya RDBMS. Kode dan infrastruktur tidak akan berubah atau berevolusi setelah penyebaran selesai. Database, bagaimanapun, akan memiliki data baru ditambahkan ke mereka membuat data jika bukan skema komponen yang bisa berubah secara inheren.
Saya menyadari bahwa ada praktik-praktik seperti hanya menambahkan objek basis data, yaitu tabel dan kolom, tidak pernah memodifikasi atau menghapusnya - cara murni tambahan untuk mendekati skema basis data ini memiliki keuntungan memastikan bahwa skema kompatibel secara mundur dengan biaya berturut-turut lebih rumit skema.
Sama ada produk seperti jalur terbang dan Siap Gulung yang membantu dalam menulis migrasi yang akan ditulis antara versi skema.
Apa praktik dan alat lain yang ada saat ini untuk memungkinkan penyebaran skema basis data ke dalam lingkungan produksi di mana integritas data menjadi perhatian?
sumber
Jawaban:
Pramod Sadalage dan Scott Ambler menulis buku Refactoring Databases: Evolutionary Database Design yang merupakan primer yang sangat solid untuk subjek DB dalam org / tim CD.
sumber
Tantangan
Di satu perusahaan tempat saya bekerja, jendela data mentah yang bergulir setara dengan sekitar 6 bulan dan menghabiskan 10 TB. Data kemudian diolah menjadi format RDBMS yang biayanya 6 TB dari data yang dapat digunakan yang menyumbang sekitar 10 tahun data yang dapat dilaporkan. Intinya adalah bahwa pada skala, praktik semacam ini tidak praktis. Penyimpanan itu mahal - mungkin biaya komputasi terbesar. Ini memberikan beberapa tantangan menarik:
Meskipun pertimbangan di atas mungkin tidak menjadi perhatian pada skala yang lebih kecil, pada skala yang lebih besar, ini menjadi masalah besar. Ini berarti bahwa sangat penting bagi Anda menentukan persyaratan dan memperkirakan ukuran dataset Anda.
Menentukan persyaratan
Akibatnya, Anda perlu menetapkan beberapa persyaratan:
Selain pertimbangan utama di atas, Anda juga perlu mempertimbangkan persyaratan lisensi dan dukungan (sumber terbuka atau sumber tertutup; dukungan internal, dukungan pihak ketiga atau dukungan vendor) persyaratan aplikasi / bahasa (konektor untuk banyak basis data dapat menjadi penting; aplikasi Anda dikompilasi? Apakah Anda memiliki akses ke kode sumber? Dapatkah Anda mengkompilasi ulang, atau disediakan oleh vendor? Atau apakah itu berjalan pada bahasa yang ditafsirkan?) persyaratan politik (Apakah organisasi Anda hanya mempercayai Oracle? Apakah mereka membenci oracle? "Apakah mereka tidak mempercayai MySql? Bagaimana perasaan Anda tentang MariaDB atau Postgres?) Dan mesin basis data (innoDB? MyISAM? Blackhole? NDB Cluster? Spider?) Dan persyaratan historis atau kompabilitas (kami menggunakan PL / SQL selama bertahun-tahun dan setengah kode kami) dibangun ke dalam mesin oracle! Bagaimana kita bisa port ke MariaDB?!?)
Semua hal ini (secara signifikan) berdampak pada alat yang tersedia untuk Anda.
Beberapa Opsi untuk manajemen data in-house
Catatan: Berikut ini sama sekali tidak lengkap, dan pengguna SE lainnya harus berpadu dengan saran tambahan.
Dengan pertimbangan generik yang menghalangi, izinkan saya memberi Anda beberapa teknik dan teknologi untuk mengatasi hal di atas. Pertama, tanyakan pada diri Anda apakah Anda benar - benar perlu menggunakan RDBMS atau jika data tidak terstruktur dengan sesuatu seperti Hadoop, CouchDB atau bahkan Object Oriented Storage (sesuatu seperti swift) adalah sebuah pilihan.
Kedua, pertimbangkan untuk mencari solusi berbasis cloud. Ini mengalihdayakan sebagian dari sakit kepala ini dan menyisakan masalah rumit bagi individu yang sangat berkualifikasi (dan dibayar). Namun pada skala, Anda dapat menemukan ini benar-benar memakan anggaran Anda (penyedia cloud DO membuat untung pada ini, dan pada skala tertentu, Anda hanya bisa mampu mempekerjakan para ahli ini sendiri), atau jika Anda bekerja di bawah keamanan atau politik tertentu persyaratan (baca: kami tidak bisa melakukan cloud) pertimbangkan hybrid NFS / FibreChannel Filer. Sebagian besar dari pelapor ini, seperti yang dilakukan oleh NetApp, Pure Storage, dan Tegile mendukung teknik snapshotting dan kloning berbasis delta yang dapat sangat berguna untuk A) mengambil cadangan, B) Memulihkan cadangan, dan C) Mencari cadangan baru.
Pada titik ini, saya perlu mencatat bahwa saya bukan ahli cadangan dan penyimpanan, jadi ada beberapa bagian dari masalah ini yang tidak pernah bisa saya pecahkan sebelum saya pindah ke masalah lain (dan padang rumput yang lebih hijau).
Namun demikian, produk-produk ini memungkinkan Anda untuk mengambil snapshot diferensial di bawah databse Anda. Anda perlu membuat skrip penuh "tabel kunci dengan kunci baca" pada salah satu contoh basis data Anda (disarankan hanya menggunakan slave) dan membuang posisi binlog atau GTID Anda, tetapi untuk pelapor ini, setelah melakukannya, Anda dapat untuk menggunakan buncis ini untuk membuat instance baru dari database Anda. Anda akan ingin menempatkan binlog pada partisi yang terpisah dan hanya menempatkan data database Anda pada partisi ini. Setelah melakukannya, Anda dapat mengkloning partisi ini (di NetApps, ini dikenal sebagai " FlexClone "
Ini karena untuk setiap blok baca filer harus menentukan apakah data berada di snapshot asli yang dibekukan, atau di delta. Untuk volume / toko dengan banyak foto, ini mungkin perlu diperiksa beberapa kali. Anda dapat mengatasinya dengan menyegarkan data (artinya, membuang foto Anda dan mengkloningnya kembali secara berkala - yang mungkin terjadi secara alami dan organik untuk lingkungan penyebaran yang baik terus-menerus) Atau dengan membelah volume secara permanen (dikenal sebagai "Flex Split" dalam terminologi NetApp ) yang akan membutuhkan waktu untuk menyelesaikan secara permanen delta dan membuat volume yang sama sekali baru dan terpisah.
Klon delta ini memiliki manfaat tambahan untuk mengurangi kebutuhan penyimpanan Anda secara keseluruhan - Anda dapat menelurkan beberapa klon atau instance dari data basis data produksi Anda untuk melakukan pengembangan, pengujian, dan validasi. Jika Anda hanya menyimpan satu salinan set data besar Anda ditambah delta (apa yang kemungkinan besar), Anda mengurangi keseluruhan biaya penyimpanan dan jejak kaki Anda.
Satu-satunya trik di sini adalah bahwa ini mungkin bukan merupakan solusi cadangan penuh karena "cadangan" masih berada di filer Anda. Untuk ini, Anda mungkin perlu menggunakan sesuatu yang NetApp sebut sebagai Snap Mirror yang akan mencerminkan data (menggunakan teknologi gaya rsync) antara pelapor dan bahkan pusat data, atau menggunakan beberapa jenis solusi cadangan terintegrasi yang dapat mencadangkan untuk merekam salah satu foto delta Anda atau flex-clone.
Namun ini memiliki satu kelemahan utama: Semua data Anda - dev, test dan prod masih menggunakan I / O pada filer dan kepala penyimpanan yang sama. Untuk mengatasinya, pertimbangkan untuk membuat instance database slave pada filer kedua yang dapat menjadi titik penyemaian untuk Anda. Test dan / atau dev filer, atau pertimbangkan untuk menggunakan pengontrol pengiriman penyeimbang muatan / aplikasi untuk lapisan aplikasi Anda untuk merefleksikan permintaan produksi ke dalam permintaan Anda. menguji (dan / atau dev) lingkungan. Ini memiliki manfaat tambahan dari membuang lalu lintas produksi di lingkungan QA / Tes Anda sebelum mempromosikan ke produksi untuk masalah yang mungkin tidak segera diketahui. Anda kemudian dapat memeriksa kesalahan log Anda berdasarkan lalu lintas produksi dan perilaku pengguna.
Ini kemudian akan memungkinkan Anda untuk menggunakan beberapa skrip untuk secara program menelurkan dan menghancurkan seluruh set data (dan besar) untuk digunakan dengan metodologi penyebaran berkelanjutan.
Skalabilitas dan Ketersediaan Tinggi
Saat Anda bertanya tentang penerapan berkelanjutan, DevOps memperhatikan lebih dari sekadar penerapan berkelanjutan - jadi saya akan menyertakan beberapa bit tentang redundansi, skalabilitas, dan ketersediaan tinggi.
Saya sebutkan, JIT, konsistensi langsung dan akhirnya. Di sinilah berbagai mesin RDBMS masuk. Konsistensi akhirnya relatif mudah dengan hanya mengkonfigurasi replikasi asinkron melingkar. Namun ini dapat menyebabkan beberapa tabrakan * (bagaimana jika lapisan aplikasi Anda memperbarui data di satu sisi cluster dan di sisi lain dari cluster sebelum replikasi selesai?) Untuk konsistensi segera, lihat kluster Galera yang akan memaksa replikasi sinkron, tetapi menyebabkan masalah skalabilitas (bagaimana Anda akan mereplikasi ke situs Disaster Recovery Anda atau memuat keseimbangan secara geografis tanpa menimbulkan latensi yang signifikan karena penundaan proposisi pada lapisan jaringan?) Anda juga dapat melihat apakah Anda dapat melakukan replikasi sinkron di dalam pusat data dan replikasi asinkron antara situs, tetapi ini tampaknya yang terburuk dari kedua dunia.
Namun biasanya, sebagian besar poeple tidak memerlukan replikasi sepenuhnya sinkron - ini biasanya hanya diperlukan untuk lingkungan penulisan tinggi yang sangat spesifik (dan eksotis) di mana multi-master diperlukan dengan table sharding. Sebagian besar aplikasi dapat menangani konsistensi Just-In-Time menggunakan proxy database. Misalnya, ScaleArc akan memantau status replikasi dan melacak di mana penulisan baru saja berjalan (untuk mengirim permintaan baca subesquent hingga replikasi menyusul) untuk memberikan konsistensi dan penampilan Just-In-Time.konsistensi basis data. ScaleArc kompatibel dengan Postgres, MySQL, MariaDB, Oracle dan MSSQL dan dapat menggunakan ekspresi reguler untuk shard / partisi database Anda untuk aplikasi yang tidak dapat menggunakan kunci shard. Ini juga memiliki API REST yang kuat untuk berinteraksi dengan perangkat lunak manajemen konfigurasi Anda - dan tim dukungan mereka luar biasa
Demikian pula, Anda mungkin ingin mempertimbangkan alternatif gratis, MaxScale dikembangkan oleh tim MariaDB untuk MariaDB. Namun tidak memiliki GUI dan beberapa fitur caching dari ScaleArc.
Akhirnya, fabric MySQL (dan MySQL Cluster hanya dalam RAM - jika Anda mampu membeli RAM sebesar itu) adalah potensi lain - terutama dengan proxy baru MySQL. Ini dapat memberikan komponen skalabilitas dan redundansi untuk lingkungan Anda.
Postgres dan Oracle harus memiliki fitur replikasi dan sharding yang Anda butuhkan, tetapi ScaleArc akan berpasangan dengan baik jika Anda memerlukan proxy.
Pada akhirnya, semua peices ini menambah lingkungan yang sangat fleksibel yang cocok untuk penyebaran dan pengembangan berkelanjutan jika Anda tidak dapat menggunakan lingkungan berbasis cloud dan membiarkan penyedia cloud Anda mengatasi masalah di atas untuk Anda.
sumber
Kami menggunakan Flyway di tempat kerja untuk mengelola skema Postgres di aplikasi, dan Pilar untuk mengelola skema Cassandra. Kami telah menemukan yang terbaik jika aplikasi mengelola skema sendiri.
Kami memiliki pengalaman yang mengerikan memiliki skema pengelolaan yang memungkinkan sebelum aplikasi mengelola skema mereka sendiri.
sumber
Saya berpendapat alat saja tidak akan membantu kecuali Anda mengalihkan tanggung jawab skema ke tim aplikasi.
Kami menggunakan liquibase atau jalur terbang di tempat kerja, di mana tim aplikasi bertanggung jawab untuk membuat perubahan.
Seiring dengan ini, Anda dapat menghindari cara yang murni aditif.
Setiap aplikasi harus kompatibel dengan versi presedennya, ketika perubahan skema harus dilakukan, maka aplikasi akan mengintegrasikan kolom baru dalam skema, menulis padanya dan masih membaca dan menulis dari / ke kolom sebelumnya (memungkinkan versi sebelumnya masih memiliki data yang sama).
Versi aplikasi berikutnya diperbolehkan berhenti memperbarui kolom yang lama dan hanya versi ketiga yang diizinkan untuk menghapus kolom yang sekarang tidak digunakan.
Jelas, cadangan reguler diperlukan jika terjadi kesalahan.
Subset data yang tepat yang cenderung menimbulkan masalah dalam pengujian integrasi untuk menghindarinya dalam produksi juga merupakan ide yang bagus. Kasing ideal mendapatkan subset anonim dari data produksi.
sumber
Kami menggunakan liquibase di tempat kerja kami dan saya akan berbicara keras untuk itu. Ini juga digunakan oleh alat QA kami, Limfony .
Kami menggunakannya terhadap database MSSQL dan Oracle secara internal dan QASymphony menggunakan / telah menggunakannya dengan kedua postgres + mysql instance.
sumber
Untuk menjawab pertanyaan ini dalam konteks lingkungan mainframe, dan khusus untuk database DB2®, ada 2 alternatif yang biasanya digunakan (bukan murah ...) untuk dipilih:
Administrasi Objek untuk DB2® , dari BMC. Berikut adalah beberapa detail tentang hal itu (kutipan dari halaman tertaut):
Alat Administrasi DB2 untuk z / OS , dari IBM.
Integrasi dengan alat SCM
Beberapa waktu lalu saya ditantang oleh seorang pelanggan untuk benar-benar "mengintegrasikan" alternatif BMC dalam siklus hidup SCM mereka (dikelola oleh SERENA ChangeMan ZMF ). Gagasan di balik integrasi tersebut adalah " Pertimbangkan tim DBA DB2 kami (melakukan hal-hal dengan DDL) sebagai kasus khusus dari tim pengembangan, tanpa sengaja menggunakan beberapa editor eksotis (alat BMC) untuk menghasilkan kode (DDL) yang akan dimigrasi ".
Tentang satu-satunya (tetapi nyata !) Tantangan tentang integrasi ini adalah untuk juga memfasilitasi "restartability", yang merupakan salah satu manfaat utama dari alat DBA tersebut:
Restartability berarti bahwa ketika alat DBA ini melakukan tugasnya (melalui pekerjaan yang terkadang berjalan lama, sesuai dengan sifat pekerjaan yang harus diselesaikan), hal-hal yang tidak terduga dapat terjadi (deadlock, waktu menurun, dll).
Jika salah satu dari hal-hal itu terjadi, dan Anda tidak ingin memulai kembali dari cadangan Anda (sebelum Anda mulai), maka alat DBA mengharapkan Anda untuk memulai kembali dari titik (centang-) dari mana hal-hal mulai salah (dan dari mana Anda ingin semuanya dieksekusi kembali).
Lebih baik lagi (atau haruskah saya mengatakan "lebih buruk"?), Jika seorang pemula ke alat DBA tidak benar-benar tahu cara memulai kembali dari pos pemeriksaan tersebut, dan hanya mencoba lagi (dari awal), maka alat DBA akan gagal dengan beberapa jenis kesalahan pengguna. Dan ini dengan indikasi dengan sesuatu seperti " Sampai Anda memberi tahu saya bagaimana Anda ingin saya melanjutkan setelah titik kegagalan terakhir saya, saya menolak untuk melakukan apa pun (untuk tidak memperburuk keadaan) ".
Bonus: setelah integrasi SCM dari alternatif BMC selesai, pelanggan memutuskan untuk mengubah alat DBA mereka ke alternatif IBM. Dan meskipun kedua alternatif tidak benar-benar terlihat sama, dampaknya terhadap integrasi SCM agak minim: hanya masalah penggantian (dalam beberapa penyesuaian SCM yang dapat digunakan kembali) beberapa panggilan ke alternatif BMC dengan panggilan setara ke IBM. alternative ... yang (menggunakan terminologi DevOps) diimplementasikan oleh fitur-flags / fitur-toggle .
sumber