TODO yorumların son tarihleriyle birlikte yorumlanması?


51

Arka fon

Sıfır kesinti süresi dağıtımını uygulamak isteyen bir ekipte çalışıyorum. Bunu başarmak için mavi / yeşil bir dağıtım stratejisi kullanmayı planlıyoruz. Araştırma yaparken anladığım şeylerden biri de veritabanı değişiklik yapmanın ne kadar karmaşık olduğu. Bir sütunu yeniden adlandırmak gibi basit bir işlem tamamlanana kadar 3 tam serbest bırakma döngüsü alabilir !

Bana öyle geliyor ki, bir değişimin tümüyle yayınlanmasının çoklu serbest bırakma çevrimleri alması insan hatası için çok fazla potansiyel oluşturuyor. Bağlantılı makalede, 2 sürüm için kod değişikliklerinin gerekli olduğunu ve 3 sürüm için bir veritabanı geçişinin gerekli olduğunu göstermektedir.

Ne için bakıyorum

Şu anda, bir şey yapmayı hatırlamak istiyorsak, sorun yönetim sistemimizde bir karmaşa yaratan ve aynı zamanda yönetim tarafından daha sonraki bir koşuya veya birikintiye taşınabilecek bir bilet oluşturabiliriz; ya da muhtemelen tamamen unutulacak olan bir TODO yorumu oluşturabiliriz.

Aradığım şey, bir TODO yorumunun aleyhinde son teslim tarihine sahip olabileceği ve Sürekli Entegrasyon sistemimizin (kullanacağımız kararsız olan) süresinin dolması halinde yapıyı reddedeceği bir yol.

Örneğin, bir sütunu yeniden adlandırırsak, bunun için ilk geçişi ve kalan iki geçişin oluşturulmasını sağlamak için iki TODO yorumu oluşturabiliriz:

// TODO by v55: Create migration to move constraints to new column, remove references to old column in app
// TODO by v56: Create migration to drop old column

Bunu yapmak oldukça basit görünüyor, ama böyle bir şeyin var olup olmadığını merak ediyorum, çünkü tekerleği yeniden icat etmek istemiyorum.

Ek düşünceler

Buradaki XY probleminden muzdarip olabileceğimi düşünüyorum, yuvarlanan dağıtımların ve mavi / yeşil dağıtımların en iyi uygulama olduğu düşünülürse, veritabanı güncellemelerini daha az acı verici hale getirecek bir çözüm bulamamam garip görünüyor. Tamamen yanlış bir şeye baktığımı düşünüyorsanız, lütfen bir yorumda bana bildirin! Bu, verdiğim veritabanı örneğinin sadece bir örnek olduğunu ve TODO’nun son tarihlere sahip yorumlarının diğer durumlarda da yararlı olacağını düşünüyorum, bu nedenle bu özel duruma tamamen yanlış yaklaşsam bile gerçekten cevaplarımı vermek istiyorum. Asıl soru da. Teşekkürler!

EDIT: Sadece bunun yararlı olabileceği başka bir durum düşündüm. Uygulamanızın parçalarını hazır olduklarında açmak için Özellik Geçişlerini kullanıyorsanız, bunları temizlerken dikkatli olmanız gerekir, aksi halde Geçiş Borcunu kullanabilirsiniz . Son başvuru tarihi olan yorumlar, bunu hatırlamanın iyi bir yolu olabilir.


19
TODO sorunu takımdan ziyade bir disiplin meselesidir.
Brandon

16
İnsanların hepsinin hatalar yaptığını ve takımların bunu azaltmanın iyi bir yolu olabileceğini düşünüyorum.
Joshua Walsh


3
Bunu programatik olarak yapmaya ne dersiniz? Bir sınıf üyesine versiyonunu yaz demek istiyorum. Sürümün eşit olması durumunda uygulamanın başlatılmaması == 56 olan "sınıf y" mesajına sahip olmanız gerekir, bu özelliklerin bir listesi olabilir. Ne düşünüyorsun?
Tomer Ben David

6
Nay-söyleyicilere yönelik olarak, katılmıyorum: Kod tabanımız üzerinde çalışmadığımız pek çok başka bileşene dayanıyor, bu nedenle TODO <Bug#>:diğer bileşenlerle ilgili sorunların çözümünü izlemek için kullanıyoruz . Bu bileşenlerden birinde bir hata giderildiğinde, ilgili geçici çözümleri kolayca bulabilir ve çözebilirsiniz. Bir sorun izleyicinin yerini almaz, bakımını kolaylaştırır.
TemporalWolf

Yanıtlar:


53

Bu soru gerçekten bir arada iki soru.

Yapılacaklar yorumları

Aksiyon maddelerini takip etmenin tüm yolları arasında en kötüsü bu TODO yorumları, aktif çalışmalar sırasında veya bir bakıcıya öneri olarak, "ilerde belki daha da geliştirilebilecek bir şey" olarak iyi. Ancak işlerin yapılması konusunda TODO yorumlarına güvenirseniz, başarısızlığa mahkumsunuzdur.

Bu konuda ne yapmalı

TODO yorumları temel olarak teknik borçtur, bu nedenle diğer teknik borçlar gibi ele alınmaları gerekir. Ya vaktınız varsa hemen onları arayın ya da takip edilip önceliklendirilebilmeleri için biriktirmeyin.

Genel olarak konuşursak, bu tamamen tartışılır ve tartışmaya açıktır, TODO yorumları bir kod kokusu olarak kabul edilebilir. Eğer bir TODO yorumu sürüm kontrolüne girene kadar bunu yaparsa, kendinize sormanız gerekir, aslında şu anda bunu takip edecek misiniz? Eğer değilse, sorun değil. Sadece kendinize karşı dürüst olun ve bunu biriktirin.

Bu birikimi nasıl yöneteceğiniz iş sürecine, şirket politikalarına ve belki de bazı kişisel özerkliklere dayanır. Ancak yine de gerçekleşmesini sağlamak için izlenen ve önceliklendirilmiş bir birikime ihtiyacınız var.

Veri tabanı değişiklikleri

Evet, veritabanı değişiklikleri sıfır kesinti politikası ile zor. Daha az acı verici hale getirmek için bazı püf noktaları:

Dağıtım sonrası işlem

Aynı sürümün bir parçası olarak çalışan bir dağıtım sonrası işlem oluşturun. Ancak çalışmasını istiyorsun. En son çalıştığım sistemde 4 aşamalı bir dağıtım tasarladım:

  1. preapp veritabanı komut dosyaları
  2. ağ uygulamaları
  3. postapp veritabanı komut dosyaları
  4. bakım penceresi veritabanı komut dosyaları

Buradaki fikir, mümkün olan her yerde, veritabanının mümkün olduğunca çoğunu preapp'e dönüştüreceğimizdir.

Postapp, uyumsuz şema değişiklikleri yapmamız gereken olağandışı vakalara ayrıldı. Bu gibi durumlarda, ön uygulama yeni uygulama kodunu uyumlu hale getirmek için yeterince değişiklik yapabilir (belki de uyumluluk için geçici bir görünüm oluşturabilir) ve postapp bu tür geçici eserleri temizler.

Bakım penceresi aşaması, gerçekten çalışmama süresi gerektiren veya bir canlı dağıtımın riskinin veya maliyetinin buna değmediği durumlarda ayrılmıştır. Örneğin, büyük miktarda veriyi değiştiren komut dosyalarının tüm tabloyu kilitlemesi gerekebilir.

Sık sık dağıtmak

Yeni sürümleri yeterince sık dağıtırsanız, 2 veya 3 sürüm arasında bir değişiklik yapmanın önemsiz olduğu bir noktaya ulaşabilirsiniz. Uzun sürüm döngüleri, veritabanı değişikliklerinin maliyetini yükseltir.


18
Yapılacaklar açıklamaları izlemenin ve önceliklendirmenin korkunç bir yoludur. Yarı bitmiş bir kod bitinin neden rüzgarda çırpıldığını açıklamanın geçerli bir yoludur. Mükemmel bir dünyada hiçbir kod bunu yapmaz. Bu arada, bu birinde ...
candied_orange

6
... bazen, hiçbir şeyden patronla depresifleşebilecek bir teknik borç izlemenin bir yolu olmaz. Bunu düzeltmek için kredi alamayacağınızdan emin olun. Bazen yine de düzeltiyorsun.
candied_orange

3
Yani uygulama sonrası stratejisi, uygulama dağıtımı başarılı bir şekilde tamamlandıktan sonra, bu geçişlerin devam etmesi? Peki ya kod? Diyelim ki soyadı soyadı için soyadı bir ad. Eski kodunuz soyadı kullanır. Soyadı eklemek için DB'yi geçirirsiniz ve varsa soyadını kullanmak için kodunuzu değiştirirsiniz, aksi takdirde soyadı_adınız. Dağıtım tamamlandıktan sonra, eski soyadı sütununu bırakacak bir sonraki geçişi çalıştırın. Ancak kodunuz hala kullanılmayan ve bu nedenle teknik borcun kodunu içerir. Bunu temizlemeyi nasıl zorlarsın?
Joshua Walsh

3
Eylem öğelerini yorumlarda yönetmek gerçekten de korkunç bir yol olsa da, yorumların otomatik olarak bir izleme sisteminde sorunlar oluşturmasını sağlamak, şu anda bir şeyi kodlamanın ortasında olduğunuz ve geçiş yapmak istemediğiniz için bunu yapmayı unutmamak için iyi bir araç olabilir. sorun takip sisteminin kapsamı.
PlasmaHH

6
IMHO bu cevabı noktayı eksik. OP, CI'nin takıma önemli bir temizliğin ne zaman unutulduğunu, “sorun yönetimi sistemini” karıştırmadan bildirdiği bir çözüm istedi (TODO'nun yorumları sadece bir örnek, belki de bunun için ideal bir çözüm değildi). OP, daha önce kullanmak istemediği için bazı sebepler verdi. Bununla birlikte, bu cevap, OP'nin "sorun yönetim sistemi" nden başka hiçbir şey olmadığına göre, tümüyle birikime güvenmeyi önermektedir. Yani IMHO bu cevap, sorunun özünü görmezden geliyor ve bir çözüm sunmuyor.
Doc Brown

24

TODO kullanmayın. Projenizde zaten bir TODO listeniz var. Buna sorun izleyici denir.

Bence asıl sorun şu cümle içinde:

sorun yönetimi sistemimizde, karmaşa yaratan ve daha sonra bir sprint veya birikime yönetim tarafından taşınabilecek bir bilet yaratabiliriz.

Sorun izleyiciniz çok fazla karışıklığa yol açarsa, bunu düzeltmenin yollarını bulun. Belki de daha az töreni içeren özel bir konu tipi / etiketi. Belki alt konular. Belki bütünüyle daha az tören. Gerçekten söyleyemeyiz. Ancak, sorun izleyiciniz çok fazla iş yaratıyorsa, insanlar kamuya açık bir forumda yalnızca bu konuyu eklemek yerine ayrıntılı bir soru formüle etmeyi tercih ediyorlarsa, bir şeyler gerçekten yanlış olur.

Yönetiminiz bir görevin son kısmını gereğinden fazla geciktirirse, iki seçeneğiniz vardır:

  1. Bunun neden kötü bir fikir olduğunu yönetiminize bildirin.

  2. tek bir görev olarak halledin. Bu altın standart çözüm olabilir. Mükemmel bir dünyada, her adımda ihtiyaç duyulan üç değişikliği yapabilmelisiniz. Birini ana şubeye uygula, kurulmasına ve dağıtmasına izin ver. Bu arada ikincisini ana şubeye uygulayın, her şeyin aynı sprint içinde olmasını ve yapılmaması durumunda oluşmasını ve konuşlandırılmasını sağlayın. Belki otomatik olarak bir şey bile bir dağıtım mantıklı olarak nerede mantıklı, ama aslında 3'e ayrılmıştır.


İyi tavsiye, sorun yönetim sistemini bu amaç için bizim için çalışmasını sağlayabileceğimizin yolları hakkında bir fikrim var. Ayrıca "Belki otomatik bir şeyi mantıklı olarak bir konuşlandırmanın nerede yapılacağı mantıklı" fikrinden de hoşlanıyorum, bunu yapmanın yollarını düşünmeye çalışıyorum. Ancak gerçekçi olarak mümkün olabileceğinden emin değilim.
Joshua Walsh

11
// TODO(#12345): Frobnicate the sprocket before passing it along12345 numaralı hatanın "gerçek" bir sayı olması ve konunun birine atanması şartıyla form hakkında yorum yapmak tamamen mantıklıdır . Bu, açıklamayı yaparak kaynağın okunmasını kolaylaştırır: "Hayır, frobnicate adımı yardımcı yöntemlerden birinde saklanmıyor, sadece basitleştirilmemiş. Daha fazla bağlam için hata # 12345'e bakın." İdeal olarak, elbette, kapalı veya geçersiz sayıların aranması için kod temeli üzerinde günlük bir linter çalıştırmanız gerekir.
Kevin,

9

Aradığım şey, bir TODO yorumunun aleyhinde son teslim tarihine sahip olabileceği ve Sürekli Entegrasyon sistemimizin (kullanacağımız kararsız olan) süresinin dolması halinde yapıyı reddedeceği bir yol.

İstediğin şey, işi yapmaya ve takip etmeye istekliysen yapılabilir.

// TODO by v55: Kısıtlamaları yeni sütuna taşımak için taşıma oluşturun, uygulamadaki eski sütuna yapılan başvuruları kaldırın // TODO by v56: Eski sütunu bırakmak için taşıma oluşturun

için grep //TODO by v55o V55 dağıtmak için zamanı geldiğinde. Deploy build, bunu bir entegrasyon testi olarak yapan bir betiği çalıştırır.

55'i sürüm izlemenize bağlayabilir ya da sadece onun için isteyebilirsiniz.

55 yaparken // TODO'yu v54 ile kontrol etmek istiyorsanız ilginçleşir. Aksi halde 55 kez kod tabanında arama yapın. Sonra bu sonucu 1 - 55 arasında filtreleyin. Şimdi 56 bir başarısızlığı tetiklemeyecek.

"Ah, buna ihtiyacımız olmayacak. Bunları her çekimiz olduğu sürece düzelteceğiz" diyebilirsiniz. Hayır. Hayır yapmayacaksın.


4
Varsa burada önerilerde bulunmayız.
candied_orange

3
Orada bir jenerik isim sağlanabilir şey bu tür için ama sayfayı okursanız önerileri hakkında satırı şuna işaret eden bağlantılı ise: softwareengineering.meta.stackexchange.com/a/6487/131624
candied_orange

6
Açık olmak gerekirse, sizin tüm sorunuz yerine itiraz ettiğim yorumunuz.
candied_orange

2
@YM_Industries SE siteleri kendi kendine yetme eğilimindedir, recommandation, harici sitelere bağlantı içeren temelde basit cevaplardır veya sizi bir bağlantı yerine google'a davet eder, ancak sonuçta aynıdır. Süresi dolmuş ve ölmüş olabilirler. Bu yüzden öneri ile ilgili bir soru konu dışı, ancak biri bir cevap ya da basit bir yorumun tamamlayıcısı olarak bir araçtan bahsetmek istiyor, o da yapabilir.
Walfrat

2
"Var olan bir çözümün var olup olmadığını merak ediyordum" - softwarerecs.stackexchange.com
danışmayı

4

Ekibimizde de benzer bir sorun yaşadık. Bunu çözmek için, bu TODO'ları ele alan statik bir analiz kontrolü yazdık. JIRA sorununu veya başvuruda bulundukları Git Sayıyı kontrol ederek. Belirtilen sayı "Geliştirilme" sütununda ilerlerken derlememiz başarısız oluyor.

Bu nedenle, rahatlıkla TODO'ları, unutulmaları konusunda endişelenmeden alabiliriz.

Java'da bunun açık kaynaklı bir uygulamasını yarattım. Evet, bir feragatname, bunu yazdığım, ancak tamamen açık kaynaklı ve lisanslı olduğunu söylediğim gibi.

Aracı denir Westie ve JIRA sorunu denetleyicisi README.md üzerinde bir örneğini. Ayrıca bkz. GitIssueAnalyser.

Başka bir sorunuz varsa, kendinize terfi etmemek için bana bir mesaj gönderin. Kullanmaya karar verirseniz ve herhangi bir öneriniz varsa, lütfen github ile ilgili sorunları dile getirin.


1
Çok havalı! Biz de JIRA kullanıyoruz, bunu kullanmayı düşünebilirim. Sorun yönetim sistemimizde karışıklık yaratma konusundaki endişelerimi gerçekten çözmüyor, ancak en azından unutulmayacaklarını garanti edecek.
Joshua Walsh

@YM_Industries Memnun oldum. Herhangi bir katkıyı kabul etmekten veya dile getirilen herhangi bir konuda çalışmaktan memnuniyet duyarım.
tjheslin1

4

Yapma. Şimdi yap.

TLDR: DB betiklerinizi daha sonra değil şimdi yazın (ve test edin); sadece onları kodlayın, böylece onların yürütülmesi DB versiyonuna göre yapılmalıdır.

Örnek

Örnek olarak, uluslararası hale gelirken ortak bir gereksinim SSNolan bir sütun adını değiştirmek istediğinizi düşünelim TaxID.

Bunu gerçekleştirmek için, belki geçici olarak hem TaxIDbir SSNsütun hem de bir sütun olacaktır. Her iki sürümü de desteklerken, birini diğerinden güncellemek için bir tetikleyiciniz olacaktır. Ancak bu tetiği süresiz olarak tutmak istemezsiniz, bu yüzden daha sonra, geriye dönük uyumluluk artık gerekli olmadığında, bu tetiğin kaldırılmasını (ve SSNsütun düştü) istersiniz . Bunların hepsini ToDo ürünlerine ihtiyaç duymadan kodlayacağız.

Örneğimizde, inşa 101 (ki olmayan) ile uyumluluğu korurken, derleme 102'yi (yeni sütuna sahip) dağıtacağız.

İşte adımlar.

1. Sürüm tablosu oluştur

  1. Configurationİki sütunla çağrılan tek bir tablo ekleyin Nameve Value.

  2. Name"TargetVersion" ifadesiyle bir satır ekleyin ve Valuedağıtılacak yeni derlemenin sürümünü ayarlayın .

  3. Name"CompatibleWith" ile bir satır ekleyin Valueve dağıtımın uyumlu olması gereken minimum sürüm numarasına ayarlayın .

Her dağıtımdan önce bu satırları inceleyin ve güncelleyin.

2. Dağıtım komut dosyalarını değiştirin

  1. TaxIDYan yana yeni bir sütun oluşturan SSNve onu SSNsütundan dolduran bir komut dosyası ekleyin . IfTargetVersion'ı kontrol eden bir ifadeye bu kodu ekleyin; Hedef sürüm çok düşükse (yani TaxIDhenüz gerekli değil), atlayın.

    SELECT @TargetVersion = TargetVersion FROM Configuration
    IF @TargetVersion < '102' THEN RETURN
    ALTER TABLE Customer ADD COLUMN taxID VarChar(12) NOT NULL
    UPDATE Customer SET TaxID = SSN
    
  2. TaxIDEklerken veya güncellerken SSNve tersi durumda oluşan bir tetikleyici oluşturan bir komut dosyası ekleyin . Bu kodu If, hedef sürümü ve uyumlu sürümü kontrol eden bir ifadeye dahil edin; TargetVersion çok düşükse ( TaxIDgerekmiyorsa) veya CompatibleWith versiyonu çok yüksekse ( SSNalan gerekli değil) atlayın .

    SELECT @TargetVersion  = TargetVersion,
           @CompatibleWith = CompatibleWith 
    FROM Configuration
    IF @TargetVersion  < '102' THEN RETURN
    IF @CompatibleWith > '101' THEN RETURN
    CREATE TRIGGER SSNAndTaxIDTrigger ON Customer etc.
    
  3. SSNSütunu kaldırmak için bir komut dosyası ekleyin . IfYalnızca CompatibleWith sürümü yeterince yüksekse ( SSNartık gerekli değildir) sütunu kaldıran bir ifadeye yerleştirin .

    SELECT @CompatibleWith = CompatibleWith FROM Configuration
    IF @CompatibleWith <= '101' THEN RETURN
    IF OBJECT_ID('SSNAndTaxIDTrigger') IS NOT NULL DROP TRIGGER SSNAndTaxIDTrigger
    IF EXISTS (SELECT * FROM syscolumns c JOIN sysobject o ON o.id = c.is WHERE o.Name = 'Custeomr' AND c.Name = 'SSN') BEGIN
        ALTER TABLE Customer DROP COLUMN SSN
    END
    

3. Test

Üretiminizi desteklemek istediğiniz herhangi bir Blue / Green sürüm numarası kombinasyonuyla dağıtımınızı test ettiğinizden emin olun. ConfigurationQA ortamınızdaki tabloyu işleyerek kod hazır olur olmaz test edebilirsiniz .

4. Dağıtım oyun kitabınızda

CompatibleWith sürümünü ve TargetVersion satırlarını güncellemek için bir mühendis için bir adım ekleyin. Mavi'yi konuşlandırıyorsanız, TargetVersion'u Mavi'nin sürüm numarasına ve CompatibleWith sürümünü Yeşil'in sürüm numarasına ayarlayın; Yeşil'i dağıtıyorsanız, onları tersten

tuzaklar

Dağıtım komut dosyalarınızın başvuruda bulunması ve bu DB tablosunda tutulan sürüm numaralarına güvenmesi tamamdır . Çalışma zamanı kodu DEĞİL.

Sürüm numaralarını incelemek için çalışma zamanı kodunuzu yazmaya başlarsanız, uygulamanızda potansiyel olarak büyük bir bakım sorunu olabilecek yeni bir karmaşıklık düzeyi tanıtıyorsunuzdur. Her çalışma zamanı yürütme yolu test edilmelidir; ileriye dönük bu koşulları yerine getirirseniz, KG'nin, her salıverme ile onları doğrulamak için bir ağrı matrisi koymak zorunda kalacak . Benim tavsiyem, böyle dağıtım koşullarını yalnızca dağıtım komut dosyalarında tutmaktır.

Tüm bunların sonucu

Sonunda, tüm kodları önceden yazabilmeniz (ve de sınamak) çok erken çalıştırılacağından korkmadan yapmalısınız. Ayrıca, kod daha fazla endişelenmenize gerek kalmadan zaman geldiğinde geriye dönük uyumluluk tetikleyicisini temizler.

Bu şekilde, düşündüğünüz zaman tüm kodu önceden yazıp test edebilirsiniz ve bu karışık ToDo yorumlarıyla uğraşmanıza gerek kalmaz.


Bu yaklaşımı gerçekten seviyorum, Yapılacaklar yorumlarından daha zarif. Bu soruyu sorduktan kısa bir süre sonra düşündüm ve bunun en iyi nasıl uygulanacağını soran başka bir yazı yazmayı düşünüyordum, ama önce kendi araştırmamı yapacağımı düşündüm. Bizim için püf noktası, veritabanı geçişlerimizde Phinx kullanıyor olmamız ve bunu gerçekten desteklememesi. Zamanım geldiğinde, bu tür bir iş akışını desteklemek için genişletmenin bir yolunu arayacağım. Bu yaklaşım, geriye dönük uyumluluk kodunun uygulamamdan kaldırılmasının nasıl sağlanacağı konusundaki sorunu çözmüyor, ancak DB sorunu için zarif.
Joshua Walsh

1

TODO fikrinizi çok fazla zorluyorsunuz, ama şahsen bununla ilgili bir sorun görmüyorum. Sonunda, göçün üretime geçtiğinden emin olmanın en iyi (ve en kolay) yolu, eğer yapmazsa ünite testinden geçememektir. Eğer sürüm 55 veya daha fazla ise (veya gereksinimler ne olursa olsun) bir istisna atan boş bir geçiş fonksiyonunu engellemeniz bir dakikadan daha kısa bir süre alır.

Daha sonra yayınlamaya çalışırsanız, başarısız bir testle karşılaşacaksınız ve birinin bu istisnayı gerçek bir geçiş koduna dönüştürmesi gerekecek.


1
Evet, ideal bir şekilde süresi dolmuş bir TODO'yu başarısız bir test olarak ele almayı umuyordum. TODO'lara verilen itiraz miktarı beni biraz şaşırttı, sorun yönetimi sisteminin yerine geçmediklerini biliyorum ama TDD / BDD'nin yaygınlığı göz önüne alındığında, kodda gereksinimleri tanımlamak ve zorlamak için kod kullanmak ile ilgili gerçek bir sorun olmadığı açık. özellik tamamlama.
Joshua Walsh

-2

Hiç kimse şikayetinin kökenine odaklanmış gibi görünmüyor, bu da veritabanı değişikliklerinin çok fazla sürüm sürdürebilmesi anlamına geliyor. Mavi / yeşil dağıtım programına devam etmek istiyor ve çözüm çoktan orada olmalıydı, ancak bir şeyi kaçırmazsam, açıklaması her iki sistem tarafından paylaşılan yalnızca bir veritabanı olduğunu gösteriyor gibi görünüyor. Bu durumda, gerçek bir Mavi / Yeşil sistem değil. Veritabanının çadırdaki uzun kutup olduğu göründüğü için çoğaltılmalıdır, böylece çevrimdışı sistemde veri tabanı değişikliklerinin tamamlanması için ne kadar süre veya kaç devir sürdüğünün önemi yoktur. tamamen test edilmiştir. Geçici çevrimdışı sistemdeki komut dosyaları, çevrimdışı veritabanını günlük olarak tamamen güncel tutabilir.


1
Veritabanını mavi / yeşil bir dağıtımda çoğaltmak çok fazla baş ağrısına neden olur. Prod env'm mavi ve yeşil arasında bir yerde olduğunda (örneğin her birine dağıtılan% 50 yük) Şemaları farklı olsa bile, her iki veritabanını da senkronize halde tutmam gerekiyor. Yaptığım araştırmadan, gerçek dünyadaki çoğu insanın mavi ve yeşil yığınları arasında paylaşılan bir DB örneği olduğu görülüyor. Veritabanı geçişleri oldukça hızlı olduğu sürece bunu önemli bir sorun olarak görmüyorum. Mavi / yeşil yığınların doğal olarak en azından yük dengeleyici / ters proxy ile bazı kaynakları paylaşması gerekir.
Joshua Walsh
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.