Saya bekerja di tim pemrograman kecil yang mendukung organisasi yang lebih besar. Tahun ini manajer kami telah memutuskan kami akan menggunakan teknologi Oracle Apex untuk menangani sebagian besar data perusahaan kami.
Ini akan baik-baik saja, kecuali kita hanya memiliki satu server Apex. Manajer kami telah memutuskan bahwa semuanya terjadi dalam satu kejadian itu. Tim kami sedang mengembangkan aplikasi, sementara manajer kami melakukannya, dan klien internal kami menggunakannya, yang karena alasan yang jelas sudah menyebabkan masalah!
Saya hanya bisa mengharapkan ini menjadi lebih buruk karena kita menjadi lebih banyak berinvestasi di Apex, aplikasi menjadi lebih kompleks dan jumlah pengguna bertambah. Saya pernah mendengar bahwa praktik terbaik adalah memiliki lingkungan pengembangan, pengujian, dan produksi terpisah, tetapi mengapa demikian?
Pertanyaannya: Mengapa kita harus memiliki lingkungan pengembangan, pengujian, dan produksi yang terpisah?
Jawaban:
Anda memiliki beberapa kegiatan yang terjadi bersamaan:
Apakah Anda ingin semua ini terjadi di lingkungan yang sama? Apakah Anda ingin bisnis terhenti karena tes baru telah mendorong server Anda untuk menukar hard drive dan menghabiskan setiap inti pada prosesor? Apakah Anda ingin tes Anda terhenti karena pengembang membuat bom fork yang berbelit-belit dari percobaan penskalaan? Apakah Anda ingin kode yang Anda pikir berhasil karena benang pengembang dan lakban dalam pengujian untuk dijalankan dalam produksi? Apakah Anda ingin pengembang bekerja dengan data produksi yang berpotensi sensitif (saya tahu ini bukan masalah di semua bisnis, tetapi banyak di antaranya)?
Apa yang mencegah masalah ini terjadi?
Lingkungan yang terpisah.
Jadi apa yang Anda butuhkan?
Anda memerlukan lingkungan yang terpisah.
Secara formal
Anda memerlukan lingkungan terpisah untuk alasan berikut:
Untuk konteks Anda, platform teknologi baru
Mungkin ini belum benar-benar produksi (karena ini adalah platform yang relatif baru), tetapi Anda akan mendapatkan lingkungan yang terpisah ketika bisnis mulai bergantung padanya dan mereka cukup bijak untuk meramalkan risiko atau menyadarinya dengan mempelajari hard cara.
sumber
Tidak jelas memotong hari ini.
Banyak tempat tidak melakukan pengujian manual lagi, jadi tidak memiliki data pengujian per-se. Banyak tempat yang memiliki skala seperti itu, sehingga mereka tidak dapat mereproduksi lingkungan produksi mereka karena biaya. Dan terutama dengan pertumbuhan eksplosif dari layanan-layanan mikro, menjadi tantangan untuk menjaga lingkungan pergeseran yang cepat tidak cukup sinkron untuk memastikan bahwa pengujian dalam lingkungan QA mereproduksi hal-hal secara akurat untuk menangkap bug yang akan muncul dalam produksi.
Pada dasarnya, jika biaya memiliki lingkungan lebih rendah daripada biaya tidak memiliki lingkungan .
sumber
Alasan utama (dan paling jelas) adalah bahwa Anda tidak pernah ingin mencampur data pengujian dan produksi. Ini dapat menjadi sangat membingungkan dengan sangat cepat bagi pengguna sistem maupun pengembang. Ketika Anda mengelola jaminan kualitas dan pengujian unit (yang harus Anda lakukan), Anda perlu memastikan semuanya berada dalam lingkungan yang sepenuhnya terpisah. Jika sesuatu meledak di lingkungan pengembangan Anda atau di QA, itu akan berdampak buruk pada produksi dan dengan demikian tinggal pengguna dan data penting mereka! Anda benar-benar tidak ingin ini mempengaruhi produksi!
Ini meluas ke layanan normal yang harus Anda gunakan dalam pekerjaan sehari-hari Anda seperti kontrol versi Anda. Anda tidak dapat menggunakan kontrol versi dengan benar jika kode yang Anda kontrol ada di lingkungan langsung! Pengguna Anda akan menjadi gila - bagaimana jika Anda perlu mengembalikan atau mengembalikan? Bagaimana jika Anda membuat kesalahan yang drastis dalam waktu lima belas komit? Bagaimana Anda menangani percabangan?
Paling tidak, Anda harus memisahkan lingkungan Anda menjadi beberapa contoh virtual, tetapi Anda benar-benar perlu melakukan apa yang Anda katakan dan memiliki contoh yang benar-benar terpisah untuk setiap lingkungan; pengembangan idealnya, QA, pementasan dan produksi.
Semua ini pada akhirnya sangat merugikan tidak hanya untuk aplikasi Anda yang menghadap ke depan (dan dengan demikian reputasi Anda dengan pengguna Anda), tetapi juga untuk efisiensi tim Anda.
sumber
Hanya memiliki satu contoh Oracle yang tersedia tidak berarti sama dengan "tidak ada pemisahan antara lingkungan dev, pengujian & produksi"!
Anda menulis dalam komentar
Ok, jadi dengan mendedikasikan beberapa proyek hanya untuk pengembangan, dan beberapa untuk pengujian, Anda dapat memisahkan lingkungan Anda sampai taraf tertentu, dengan menggunakan skema yang berbeda. Saya kira Anda sudah melakukan ini, karena ini adalah satu-satunya pendekatan yang masuk akal yang saya tahu ketika tidak ada pemisahan contoh yang direncanakan. Saya tidak bisa membayangkan manajer Anda menjadi sangat gila sehingga ia ingin Anda mencampur data dev, data uji, dan data pelanggan semuanya dalam satu skema dengan cara yang sewenang-wenang. Dia kemungkinan besar hanya ingin menghemat uang dengan tidak membeli server kedua atau menginvestasikan uang ke dalam lisensi untuk contoh kedua.
Karena itu, pertanyaan sebenarnya yang perlu Anda tanyakan adalah:
Apakah kita perlu menggunakan mesin virtual yang berbeda dan / atau server untuk memisahkan pengembangan, pengujian, dan lingkungan produksi, atau apakah pemisahan skema cukup?
Itu membuat jawabannya tidak begitu jelas seperti pada jawaban lain di sini. Skema yang berbeda memungkinkan hak akses yang berbeda, sehingga Anda setidaknya bisa mendapatkan isolasi hingga tingkat tertentu di dalam satu instance Oracle. Namun, pengembang Anda kemungkinan besar akan memerlukan beberapa hak administratif di dalam skema "mereka", sehingga akan lebih sulit untuk memastikan mereka tidak akan memiliki akses ke data produksi jika Anda hanya menggunakan satu contoh.
Selain itu, satu server contoh / satu juga akan berarti sumber daya bersama antara dev, administrasi pengguna dan administrasi berbagi-pakai, ruang disk bersama, CPU bersama, bandwidth jaringan bersama. Gabungkan ini dengan "hukum abstraksi bocor" , dan akan menjadi jelas bahwa menggunakan hanya satu contoh akan memiliki risiko tertentu mendapatkan efek samping yang tidak diinginkan antara lingkungan dev, test dan prod.
Pada akhirnya, Anda harus memutuskan sendiri: dapatkah Anda bekerja secara efektif dengan kelemahan pendekatan tersebut? Apakah aplikasi Anda tidak begitu padat sumber daya, dan data produksi Anda tidak begitu "rahasia" sehingga dapat ditoleransi untuk mengurangi tingkat pemisahan antara dev, pengujian dan produksi daripada tingkat yang akan Anda dapatkan dari "tiga contoh / tiga server" pendekatan? Jika Anda tidak dapat bekerja secara efektif seperti itu, atau tidak tanpa risiko tinggi mengganggu produksi dengan cara Anda mulai kehilangan pelanggan, Anda memiliki semua argumen yang Anda butuhkan untuk meyakinkan manajer Anda untuk membeli setidaknya server kedua.
sumber
Anda memerlukan beberapa tipe lingkungan dan mungkin bahkan beberapa server di setiap lingkungan.
Pengembang dapat memperbarui kode dalam pengembangan. Kode mungkin bahkan tidak berfungsi - mungkin aplikasi bahkan tidak akan memulai.
Itu tidak berdampak pada QA yang menguji bangunan stabil terbaru di lingkungan mereka sendiri.
Karena pengembangan dan QA memperbarui lingkungan mereka, produksi berada pada rilis rilis terbaru dari enam bulan lalu dan tidak terpengaruh oleh perubahan di lingkungan lain.
Perubahan ini diluncurkan di berbagai lingkungan dapat berupa kode atau data. Mungkin QA perlu menguji skrip database yang dirancang untuk memperbaiki beberapa data buruk dalam produksi. Mungkin skrip memperburuk masalah - pulihkan cadangan basis data dan coba lagi. Jika itu terjadi dalam produksi, Anda dapat memiliki masalah keuangan yang sangat serius.
Apa yang terjadi jika Anda memiliki beberapa rilis? Mungkin Anda sedang mengembangkan versi 2.0, tetapi masih membutuhkan rilis perbaikan bug pada cabang pemeliharaan 1.0. Sekarang Anda membutuhkan beberapa pengembangan dan lingkungan QA untuk memastikan Anda selalu dapat mengembangkan dan menguji salah satu cabang ketika bug kritis ditemukan dan perlu diperbaiki kemarin.
sumber
Anda telah memperhatikan masalah yang tidak disebabkan oleh lingkungan yang terpisah. Di sana Anda punya alasan mendasar untuk lingkungan yang terpisah: untuk menghilangkan masalah yang disebabkan oleh konflik yang tak terhindarkan muncul ketika mencoba melakukan pengembangan, pengujian dan operasi produksi dalam satu lingkungan tunggal. Alasan yang sama berlaku untuk memberi pengembang kotak pasir individual untuk bekerja, itu membuat kesalahan satu pengembang atau bahkan hanya perubahan yang tidak kompatibel dari melumpuhkan seluruh tim pengembangan.
Ini juga merupakan argumen terbaik yang dapat Anda buat kepada manajemen untuk mengubah menjauh dari lingkungan tunggal: menunjuk ke masalah yang sudah disebabkan oleh lingkungan tunggal, menunjukkan garis tren dan berargumen bahwa cepat atau lambat jika hal-hal berlanjut karena mereka akan ada menjadi masalah yang akan membutuhkan biaya lebih besar untuk dibersihkan (baik dalam upaya langsung dan hilangnya kepercayaan pelanggan pada kemampuan perusahaan Anda untuk memberikan layanan) daripada mengkonfigurasi ulang hal-hal untuk lingkungan yang terpisah akan dikenakan biaya.
sumber
Ada banyak kekuatan dan dinamika yang saling bertentangan. Ada biaya memiliki banyak server dan biaya hanya memiliki satu. Saya pikir pertanyaan ini dapat ditelusuri lebih jauh dari sekadar basis data? Saya mungkin salah paham, tetapi itu berhubungan dengan kesalahpahaman sistemik yang ada di sana adalah biaya bukti fisik vs abstrak
Biasanya biaya yang jelas mudah dipahami.
Biaya abstrak lebih sulit untuk diukur dan karenanya lebih sulit untuk dipahami. Pinjaman Teknis, biaya kesalahan, biaya stres, beban pengembang, efek perubahan, pengujian regresi, dampak downtime dan sebagainya lebih sulit untuk dijelaskan.
lingkungan yang berbeda Lingkungan biasanya dipisahkan untuk data dan / atau tujuan. Setiap lingkungan memiliki fungsi yang berbeda. Tingkat perubahan pada suatu sistem, yaitu. seberapa sering akan diperbarui, perubahan seperti apa dan dampak perubahan, semuanya dipertimbangkan.
Kami menggunakan lingkungan yang berbeda untuk meremehkan perubahan.
Kami menggunakan lingkungan yang berbeda, jadi kami menawarkan ketahanan dan kepastian lingkungan yang tidak berubah.
Kami menggunakan lingkungan untuk mempertimbangkan efek perubahan.
Kami menggunakan lingkungan untuk mengurangi biaya yang terlibat dengan perubahan.
biayanya banyak untuk menguji dan menstabilkan sistem Anda menciptakan lingkungan untuk mengamankan investasi yang dibuat pada lingkungan stabil.
Anda tidak pernah terlalu kecil sebagai tim untuk mematuhi pola proses yang pragmatis, hemat biaya, rajin dan terbukti.
Menggunakan satu lingkungan untuk semuanya seperti menyimpan semua foto Anda pada satu harddisk, Anda dapat melakukannya, tetapi Anda akan menyesalinya.
beberapa orang membutuhkan bukti. Saya telah dalam banyak situasi berurusan dengan klien atau orang lain yang tidak menghargai biaya untuk memastikan ketahanan dan mengikuti praktik terbaik. Saya sarankan Anda mengumpulkan beberapa contoh kasus nyata di mana biaya didefinisikan dengan jelas.
sumber