PreProd ve Prod ortamları ne kadar benzer olmalıdır?


10

Kısa süre önce bir projeye katıldım ve yayın sırasında bunun Üretim'de çalışmadığını fark ettik. Diğer tüm ortamlarda çalışır, ancak ayrı bir yayın ekibimiz olduğundan ve sunucuları ve ortamları kendimiz ayarlayamadığımız için, bunlar üzerinde yapılandırmaya ilişkin bir görünürlük yok.

Prod'un hesabında veya IIS ayarlarında farklı olan bazı kullanıcı izinlerine sahip olduğundan şüpheleniyoruz, bu yüzden şimdi çalışıyoruz.

Bu yüzden tüm bunların benim için bir öğrenme deneyimi olduğunu düşünüyorum ve aynı şeyin tekrarlanmasını istemiyorum. Bu ortamların ne kadar farklı olması gerektiğini sormak istiyorum. Her zaman PreProd'un aynı veritabanının bir kopyasını kullanarak aynı kullanıcı hesabının bir kopyasını kullanarak Prod ortamına aynı bir kopya olması gerektiğini düşündüm, aynı sunuculara vb.

Ama ne kadar uzağa götürmeliyim? Web sitesi dışa dönükse, PreProd dışa dönük olmalı mı? Web sitesinde gezinmek için kullanıcı hesabı veya şifre gerektirmeyen bileşenler varsa ne olur? Dış dünyaya teşhir etmek hala iyi mi?


Çalıştığım her yerde Pre-Prod, Üretim'in doğrudan bir kopyasıydı, ancak veritabanı (ler) bir haftalık olurdu.
Nickz

@Nick: Sadece kod tabanını kastetmiyorum, yani tüm ortamın tamamı gibi.
RoboShop

Yanıtlar:


6

Kesinlikle üretiminizle özdeş olan bir ortamda mümkün olduğunca test etmelisiniz. Bunu yapmazsanız müşterilerinizin ne kullanacağını test etmiyorsunuz. Başka bir şey yoksa, hata raporlarını test etmek için böyle bir ortama ihtiyacınız vardır.

Açıkçası, aynı istemeyeceğiniz şeyler olacak - ödeme sistemlerine bağlantılar akla geliyor, ancak bunlar gerçek bir şeymiş gibi alay edilmeli . Ayrıca çoğaltamayacağınız şeyler de var - sistemin ölçeği.

Harici bir URL ile test etmek isteyebilirsiniz - yine kullanıcılarınızın ne göreceğini test ediyorsunuz. Ayrıca harici bir URL yoluyla test etmek, ağı sistemin dahili kullanımından farklı bir şekilde kullanacaktır. İzinler (örneğin) kullanılabilir bant genişliği, güvenlik duvarları vb. Gibi bir rol oynayacaktır. Tüm kullanıcıların karşılaşacağı ancak sisteme doğrudan erişirseniz atlayabilirsiniz.

Yine de bir hesap ve şifre gerektirmeyen bileşenlerle ilgili bir sorun görmüyorum. Bir parolaya ihtiyaç duymazsa, hayati / hassas değildir, eğer hassassa neden bir parolaya sahip değildir?


Vay, bu aptalca bir cevap. Test ortamınızda, bir satın alma işlemi yaparsanız, kredi kartından çekim yapmalı ve satın aldığınız ürünü göndermelidir? Ürün ortamı 150 sunucudan oluşuyorsa, test ortamı da? Prod ve test arasında farklılıklar olması gerektiğini "açıkça" söyleyebilirim, ama ChrisF için belli değildi.
Malvolio

@Malvolio - hayır. Öyle demek istemedim. Soru, izinler, bağlantılar vb.
İle

11

Bunun için en iyi uygulama, Sürekli Teslim kitabında Jez Humble ve David Farley tarafından yazılan ve blog yazarı Blue Green Deployment'da Martin Fowler tarafından açıklanan Mavi Yeşil Dağıtım yaklaşımıdır .

Öncül çok basit. Martin Fowler'ın gönderisinden:

Mavi Yeşil Dağıtım

Mavi-yeşil dağıtım yaklaşımı ... mümkün olduğunca özdeş iki üretim ortamına sahip olmanızı sağlar. Herhangi bir zamanda, örnek için mavi diyelim ki canlı. Yazılımınızın yeni bir sürümünü hazırlarken, yeşil ortamda testin son aşamasını gerçekleştirirsiniz. Yazılım yeşil ortamda çalıştıktan sonra, gelen tüm isteklerin yeşil ortama geçmesi için yönlendiriciyi değiştirirsiniz - mavi olan artık boşta kalır.

Mavi-yeşil dağıtım size geri dönüş için hızlı bir yol sağlar - bir sorun olursa yönlendiriciyi mavi ortamınıza geri döndürürsünüz.

Bu yaklaşım, aynı üretim öncesi ve üretim ortamlarına sahip olmamanız ve dağıtım stratejinizi optimize etmeniz sorununuzu çözecektir.


Serin diyagram için 1+
Nickz

mmm veritabanını senkronize tutmak konusunda emin değilim. Zor olurdu. İşlem preprod sunucunuz üzerinden yapıldıysa ne olur? Bu üretim db'ye yansıtılacak mı?
RoboShop

Yazılmıştır, bu çok pahalı. Canlı prodüksiyon için gerekli tüm donanımı sadece test için çoğaltmanız gerekir. Ama evet, harika diyagram.
Malvolio

1
TEKNİKLİK, n. Bir İngiliz mahkemesinde, Home adlı bir adam, komşusunu cinayetle suçlamaktan iftira için yargılanmıştı. Tam sözleri şuydu: "Sir Thomas Holt bir balta aldı ve aşçılarını başının üstüne sıkıştırdı, böylece kafanın bir tarafı bir omzuna, diğer tarafı diğer omzuna düştü." Sanık, mahkemenin talimatıyla beraat etti, öğrenilen yargıçlar, kelimelerin cinayet suçlamadığını, çünkü aşçının ölümünü teyit etmediklerini, sadece bir çıkarım olduğunu iddia etti. - Ambrose Bierce
Malvolio

1
Evet, teknik olarak, donanımı çoğaltmam gerekmiyor , ancak sanallaştırma ile dalga geçerek bu gereksinimi atlasanız bile, (a) bant genişliği ve CPU gibi kaynakları her ortama, donanımın kopyalanması veya (b) kaynakların paylaşılmasıyla aynı maliyet , yani test sorunlarınız üretim sisteminizi düşürebilir.
Malvolio

3

Nihai üretim öncesi ortamımız, yük dengeleyiciden çıkarılan canlı sunuculardan biridir. Üretim öncesi yapımızı (temel olarak veritabanı bağlantı dizeleri ve birkaç başka yapılandırma değişikliği dışında canlı derlemeye özdeş olan) dağıtırız ve test ederiz. Bu iyi giderse, canlı kodu dağıtırız ve son olarak, eğer bu uygunsa, sunucuyu yük dengeleyicisine döndürür ve üretim yapısını kalan sunuculara tek tek dağıtırız.


1

Mümkün olduğunca benzer olmalıdırlar, böylece olası ölçeklendirme yetersizliği haricinde, sistemdeki herhangi bir noktada problemleri tanımlayabilirsiniz. Mümkünse, üretim ortamınız ile üretim öncesi / aşamalandırma / test ortamı arasındaki tek fark boyut olurdu - bir üretim ortamının büyük ölçekli bir ortamda daha fazla makineden oluşmasını beklerdim. Veritabanı sunucuları, web sunucuları vb. Sahip olduğunuz makinelerin adanmışlıklarını bile yansıtmalısınız.

Ancak, mevcut bütçeniz altında tam bir çoğaltma yapılamayabilir. Ne kadar yakınsa, test o kadar etkili olur ve üretime yönelik bir baskı sırasında sorunların daha az sürmesi daha az olasıdır.

Bu ortamın halka açık olması gerektiğinde ChrisF'den farklı bir tutum izliyorum . Olmaması gerektiğini söylüyorum. Gerçek veritabanlarının bir kopyasını veya en azından gerçek canlı veritabanlarının bir alt kümesinin ve içe dönük bir ortamın bir kopyasını çalıştırmayı tercih ederim. Bu şekilde, gerçek ve gerçekçi verilere karşı test edebilir ve sızıntıya neden olan güvenlik delikleri hakkında endişelenmeyebilirsiniz. Elbette, verileri sterilize edebilirsiniz, ancak bu, canlı sistemde bir kusurun ortaya çıkmasına neden olabilecek bazı "kirli verileri" ortamdan kaldırabilir.


1
Güvenlik testi yapıyorsanız, bunun kamuya açık olmaması gerektiğini kabul ediyorum, ancak son kabul testi için olmasını isteyebilirsiniz (örneğin).
ChrisF

Bu da geçerli bir nokta. Genellikle kullanılabilirlik odaklı olmaktan daha fazla güvenlik odaklıyım, ancak kabul testi için sisteminizin yeni bir sürümünü ortaya çıkarmak istiyorsanız (belki müşteriler tarafından veya genel bir beta sürümün parçası olarak), evet, herkese açık ortam gerekli olacaktır.
Thomas Owens

Evet, eskiden herkese açık bir bilgisayarda bir hafta kadar canlı yayınlanmadan önce test edecek bir yarışmacı vardı. Onlar hiç yapmadan hemen önce her zaman nasıl özelliklere sahip olduğumuzu
anlayamadılar

1

Çalıştığım her yerde bankalar, telekomünikasyon vb. Üretim öncesi veri tabanının bir haftalık olması dışında üretimin doğrudan bir kopyasıydı. Verileri üretim öncesi arasında tutan büyük bir süreçti, ancak önceden üretim yapan şirketler için çalıştığım şirketler için gerekli görülüyordu.

AU bankacılık bölümünde, hükümet bankaları hizmet kesintisi nedeniyle cezalandırıyor, örneğin web sitesi ATM'leri vb. Her dakika kapanıyor. Bir olay yüzünden ateşlenen bir geliştirme / test ekibini duymak nadir değildir. Ön üretim her şirket veya geliştirme süreci için değil, bazıları için gereklidir.


3
"Bir olay üzerine ateşlenen bir geliştirme / test ekibini duymak nadir değildir" - evet, bu yardımcı olacaktır. Dayak moral düzelene kadar devam edecek.
Malvolio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.