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 myapp
yang 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-dev
poin myws-dev
yang digunakan mydb-dev
. Demikian pula, myapp-qa
poin myws-qa
yang digunakan mydb-qa
. Sama untuk DEMO
dan LIVE
.
Masalahnya adalah kapan saja saya membuat perubahan, katakanlah myapp
, ini mengharuskan saya untuk melakukan perubahan myws
dan mydb
juga. Tetapi karena masing-masing DEV
lingkungan 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-dev
danmyapp-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
DEMO
lingkungan untuk dependensi hilir mereka, untuk semua lingkungan non-produksi mereka (DEV
,QA
danDEMO
); dan - Ketergantungan hulu tergantung pada
LIVE
lingkungan untuk ketergantungan hilir untuk lingkungan produksi mereka
Menggunakan konvensi ini, myapp-dev
akan menunjukkan myws-demo
, yang akan digunakan mydb-demo
. Demikian pula, myapp-qa
juga akan menunjuk ke myws-demo
dan mydb-demo
.
Keuntungan di sini yang dapat saya temukan adalah membangun stabilisasi : sangat kecil kemungkinannya bahwa DEMO
lingkungan untuk komponen tertentu akan menjadi tidak stabil, karena kode tidak dapat membuatnya DEMO
tanpa pengujian yang ketat baik pada DEV
dan QA
.
Satu-satunya kelemahan saya dapat menemukan metode ini adalah bahwa, jika DEMO
tidak 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 DEV
danQA
.
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?