Seberapa mirip lingkungan PreProd dan Prod?

10

Saya baru saja berada di sebuah proyek dan selama rilis, kami menyadari bahwa itu tidak bekerja di Produksi. Ia bekerja di semua lingkungan lain tetapi karena kami memiliki tim rilis yang terpisah, dan kami tidak dapat mengatur sendiri server dan lingkungan, kami tidak memiliki visibilitas konfigurasi pada mereka.

Kami mencurigai bahwa Prod memiliki beberapa izin pengguna di akun atau pengaturan IIS yang berbeda, jadi kami bekerja sekarang.

Jadi saya pikir semua ini telah menjadi pengalaman belajar bagi saya dan saya tidak ingin hal yang sama terulang lagi. Saya ingin bertanya, bagaimana perbedaan lingkungan ini? Saya selalu berpikir bahwa PreProd harus merupakan salinan yang identik dengan lingkungan Prod menggunakan salinan dari database yang sama, menggunakan salinan akun pengguna yang sama, harus diinstal pada server yang sama dll.

Tapi sejauh mana saya harus mengambilnya? Jika situs web menghadap ke luar, haruskah PreProd menghadap ke luar? Bagaimana jika situs web memiliki komponen yang tidak memerlukan akun pengguna atau kata sandi untuk menavigasi? Apakah saya tetap bisa mengeksposnya ke dunia luar?

RoboShop
sumber
Di mana-mana saya bekerja, Pra-Prod adalah salinan langsung dari Produksi, dengan kecuali basis data akan berusia satu minggu.
Nickz
@Nick: Maksud saya bukan hanya basis kode, maksud saya seperti seluruh pengaturan seluruh lingkungan.
RoboShop

Jawaban:

6

Anda tentu harus menguji pada lingkungan yang identik dengan penghubung produksi Anda sejauh mungkin. Jika tidak, Anda tidak menguji apa yang akan digunakan pelanggan. Jika tidak ada yang lain, Anda perlu lingkungan seperti itu untuk menguji laporan bug apa pun.

Tentunya akan ada hal-hal yang tidak Anda inginkan identik - tautan ke sistem pembayaran muncul dalam pikiran, tetapi ini harus diejek seolah-olah itu adalah hal yang nyata . Ada juga hal-hal yang tidak dapat Anda tiru - skala sistem.

Anda mungkin ingin menguji melalui URL eksternal - lagi-lagi Anda menguji apa yang akan dilihat pengguna Anda. Pengujian juga melalui URL eksternal akan menggunakan jaringan dengan cara yang berbeda dengan penggunaan internal sistem. Izin (misalnya) akan berperan sebagai bandwidth yang tersedia, firewall, dll. Semua pengguna akan menghadapi tetapi Anda akan melewatkan jika Anda mengakses sistem secara langsung.

Saya tidak melihat masalah dengan komponen yang tidak memerlukan akun dan kata sandi. Jika tidak memerlukan kata sandi maka itu tidak penting / sensitif, jika itu sensitif maka mengapa belum mendapat kata sandi?

ChrisF
sumber
Wow, itu jawaban konyol. Jadi di lingkungan pengujian Anda, jika Anda melakukan pembelian, itu harus membebankan biaya kartu kredit dan mengirimkan apa yang Anda beli? Jika lingkungan prod terdiri dari 150 server, tes env juga harus? Saya akan mengatakan "jelas" pasti ada perbedaan antara dorongan dan tes, tetapi tidak jelas bagi ChrisF.
Malvolio
@Malvolio - no. Saya tidak bermaksud itu sama sekali. Saya memikirkan lebih banyak poin yang muncul dalam pertanyaan dengan izin, koneksi dll.
ChrisF
11

Saya pikir praktik terbaik untuk ini adalah pendekatan Penyebaran Green Green, yang diciptakan oleh Jez Humble dan David Farley dalam buku mereka Continuous Delivery dan dijelaskan oleh Martin Fowler dalam posting blognya Blue Green Deployment .

Premisnya sangat sederhana. Dari pos Martin Fowler:

Penempatan Biru Hijau

Pendekatan penyebaran biru-hijau ... [memastikan] Anda memiliki dua lingkungan produksi, seidentik mungkin. Setiap saat salah satu dari mereka, katakanlah biru sebagai contoh, adalah langsung. Ketika Anda mempersiapkan rilis baru perangkat lunak Anda, Anda melakukan tahap akhir pengujian di lingkungan hijau. Setelah perangkat lunak bekerja di lingkungan hijau, Anda beralih router sehingga semua permintaan masuk ke lingkungan hijau - yang biru sekarang menganggur.

Penempatan biru-hijau juga memberi Anda cara cepat untuk mengembalikan - jika terjadi kesalahan, Anda mengalihkan router kembali ke lingkungan biru Anda.

Pendekatan ini akan menyelesaikan masalah Anda karena tidak memiliki lingkungan pra-produksi dan produksi yang identik, serta mengoptimalkan strategi penempatan Anda.

Paddyslacker
sumber
1+ untuk diagram keren
Nickz
mmm tidak yakin tentang menjaga sinkronisasi database. Itu akan sulit. Bagaimana jika transaksi datang melalui server preprod Anda? Apakah itu tercermin dalam db produksi?
RoboShop
Ditulis, itu sangat mahal. Anda harus menduplikasi semua perangkat keras yang diperlukan untuk produksi langsung hanya untuk pengujian. Tapi ya, diagram keren.
Malvolio
1
TEKNIS, n. Di pengadilan Inggris, seorang pria bernama Home diadili karena memfitnah menuduh tetangganya melakukan pembunuhan. Kata-kata persisnya adalah: "Tuan Thomas Holt telah mengambil pisau dan menebas kepala juru masaknya, sehingga satu sisi kepala jatuh di satu bahu dan sisi lainnya di bahu lainnya." Terdakwa dibebaskan dengan instruksi pengadilan, hakim yang terpelajar berpendapat bahwa kata-kata itu tidak menuntut pembunuhan, karena mereka tidak menegaskan kematian juru masak, yang hanya merupakan kesimpulan. - Ambrose Bierce
Malvolio
1
Ya, secara teknis, saya tidak perlu menduplikasi perangkat keras tetapi bahkan jika Anda menghindari persyaratan itu dengan bermain-main dengan virtualisasi dan semacamnya, Anda juga (a) mengalokasikan sumber daya, seperti bandwidth dan CPU, ke setiap lingkungan, yang akan memiliki biaya yang sama dengan perangkat keras duplikat atau (b) sumber daya berbagi, yang berarti masalah pengujian Anda dapat menurunkan sistem produksi Anda.
Malvolio
3

Lingkungan pra-produksi akhir kami hanyalah salah satu server langsung yang dikeluarkan dari load balancer. Kami menggunakan praproduksi build kami (yang pada dasarnya identik dengan live build terpisah dari string koneksi database dan beberapa perubahan konfigurasi lainnya) dan mengujinya. Jika tidak apa-apa, kami menyebarkan kode langsung, dan akhirnya jika itu terbukti ok, kami mengembalikan server ke load balancer dan menyebarkan build produksi ke server yang tersisa satu-per-satu.

FinnNk
sumber
1

Mereka harus semirip mungkin, sehingga Anda dapat mengidentifikasi masalah di setiap titik dalam sistem, dengan kemungkinan pengecualian dari ketidakmampuan untuk skala. Jika memungkinkan, satu-satunya perbedaan antara lingkungan produksi Anda dan lingkungan pra-produksi / staging / pengujian adalah ukurannya - saya berharap lingkungan produksi terdiri dari lebih banyak mesin dalam lingkungan skala besar. Anda bahkan harus mencerminkan dedikasi mesin yang Anda miliki, seperti server database, server web, dan sebagainya.

Namun, replikasi yang tepat mungkin tidak dapat dilakukan sesuai anggaran Anda saat ini. Semakin dekat, pengujian akan lebih efektif dan masalah yang semakin kecil kemungkinan akan muncul selama dorongan untuk produksi.

Saya mengambil sikap berbeda dari ChrisF tentang apakah lingkungan ini harus menghadap publik. Saya katakan itu tidak seharusnya. Saya akan memilih untuk berjalan pada salinan dari database aktual, atau setidaknya salinan dari subset dari database aktual dan lingkungan yang menghadap ke dalam. Dengan cara ini, Anda dapat menguji data aktual dan realistis dan tidak khawatir tentang lubang keamanan yang menyebabkan kebocoran. Anda dapat, tentu saja, membersihkan data, tetapi itu mungkin menghapus beberapa "data kotor" dari lingkungan yang dapat menyebabkan ditemukannya cacat dalam sistem langsung.

Thomas Owens
sumber
1
Jika Anda melakukan pengujian keamanan, maka saya setuju bahwa itu tidak boleh dilakukan secara publik, tetapi Anda mungkin menginginkannya untuk pengujian penerimaan akhir (misalnya).
ChrisF
Itu adalah poin yang valid juga. Saya biasanya lebih berfokus pada keamanan daripada berfokus pada kegunaan, tetapi jika Anda memang ingin mengekspos versi baru dari sistem Anda untuk pengujian penerimaan (mungkin oleh klien, atau sebagai bagian dari beta publik), maka ya, yang menghadap publik lingkungan akan dibutuhkan.
Thomas Owens
Ya, kami dulu memiliki pesaing yang akan menguji semua barang mereka di komputer yang menghadap publik selama seminggu atau lebih sebelum ditayangkan. Mereka tidak pernah tahu fitur bagaimana kita selalu keluar tepat sebelum mereka lakukan ...
Malvolio
1

Di mana-mana saya bekerja di bank, telekomunikasi, dll. Pre-prod adalah salinan langsung produksi kecuali basis datanya akan berumur satu minggu atau lebih. Itu adalah proses besar mempertahankan data lintas pre-prod tetapi dianggap penting bagi perusahaan tempat saya bekerja yang menerapkan pre-prod.

Di bagian perbankan AU, pemerintah mendenda bank karena kegagalan layanan, misalnya ATM situs web dan lain-lain turun, setiap menit. Bukan hal yang luar biasa untuk mendengar tim pengembangan / pengujian yang dipecat karena suatu insiden. Pre-prod bukan untuk setiap perusahaan atau proses pengembangan tetapi penting untuk beberapa.

Nickz
sumber
3
"Bukan hal yang aneh untuk mendengar tim pengembangan / pengujian menembakkan sebuah insiden" - ya, itu akan membantu. Pemukulan akan berlanjut sampai semangat meningkat.
Malvolio