Kami memiliki banyak aplikasi dan layanan web (beberapa produk yang menghadap publik, beberapa internal dan bagian dari "backend" pribadi) yang saling bergantung satu sama lain. Masing-masing komponen ini memiliki 4 lingkungan (kelompok server / node yang melayani tujuan tertentu):
- Non-produksi
DEV- Lingkungan pengembangan terintegrasi di mana CI membangun perubahan push; berguna bagi insinyur untuk memecahkan bug yang sulit ditemukan yang tidak dapat direproduksi secara lokalQA- Lingkungan QA / Pengujian yang terisolasiDEMO- Lingkungan UAT yang stabil untuk pemangku kepentingan bisnis
- Produksi
LIVE- Lingkungan hidup / produksi kami
Promosi kode berlaku: LOCAL(mesin pengembang) => DEV=> QA=> DEMO=> LIVE.
Katakanlah kita memiliki aplikasi bernama myappyang didukung oleh layanan web RESTful yang disebut myws, yang itu sendiri didukung oleh DB yang disebut mydb.
Saat ini, kami memiliki apa yang saya sebut promosi " mengatur " di antara dependensi ini: myapp-devpoin myws-devyang digunakan mydb-dev. Demikian pula, myapp-qapoin myws-qayang digunakan mydb-qa. Sama untuk DEMOdan LIVE.
Masalahnya adalah kapan saja saya membuat perubahan, katakanlah myapp, ini mengharuskan saya untuk melakukan perubahan mywsdan mydbjuga. Tetapi karena masing-masing DEVlingkungan menunjuk ke lingkungan ketergantungannya DEV, itu berarti saya harus menjadwalkan dan meluncurkan semua perubahan ini secara bersamaan. Selain itu, jika satu bangunan menjadi tidak stabil / rusak, sering kali komponen downstream lainnya turun; misalnya jika pengembang merusak sesuatu saat mengubah mydb-dev, the myws-devdanmyapp-dev cluster biasanya juga menjadi tidak stabil.
Untuk mengatasi ini, saya menyusun proposal untuk apa yang saya sebut strategi promosi " siled ": semua dependensi antar-komponen ikuti panduan ini:
- Ketergantungan hulu tergantung pada
DEMOlingkungan untuk dependensi hilir mereka, untuk semua lingkungan non-produksi mereka (DEV,QAdanDEMO); dan - Ketergantungan hulu tergantung pada
LIVElingkungan untuk ketergantungan hilir untuk lingkungan produksi mereka
Menggunakan konvensi ini, myapp-devakan menunjukkan myws-demo, yang akan digunakan mydb-demo. Demikian pula, myapp-qajuga akan menunjuk ke myws-demodan mydb-demo.
Keuntungan di sini yang dapat saya temukan adalah membangun stabilisasi : sangat kecil kemungkinannya bahwa DEMOlingkungan untuk komponen tertentu akan menjadi tidak stabil, karena kode tidak dapat membuatnya DEMOtanpa pengujian yang ketat baik pada DEVdan QA.
Satu-satunya kelemahan saya dapat menemukan metode ini adalah bahwa, jika DEMOtidak pecah untuk komponen tertentu, semua lingkungan non-produksi untuk semua dependensi hulu tiba-tiba akan rusak. Tetapi saya akan membantah bahwa ini harus terjadi sangat jarang karena pengujian dilakukan pada DEVdanQA .
Ini harus menjadi masalah yang telah dipecahkan oleh banyak pengembang (jauh lebih pintar dan berpengalaman dari saya), dan saya tidak akan terkejut jika masalah ini dan solusinya sudah memiliki nama untuk mereka (selain apa yang saya sebut diatur / didiamkan). Jadi saya bertanya: Apakah manfaat dari strategi promosi yang dibungkam lebih besar daripada kontra, dan apa kontra yang mungkin saya hadapi di sini?