Bir şeyleri üretimde kırdığında sorunu anlamak


24

Senaryo:

  • Üretime zorluyorsun
  • İtme çok şeyi kırdı
  • Aynı yapı qa veya dev'i bozmadı
  • Bir geliştirici olarak, ürün erişiminiz yok.
  • İşleri agian'da yapmak için yukarıdan çok baskı var .

Özellikleri:

  • Zend'de API tabanlı PHP / MVC uygulaması.
  • Birkaç sunucuya dağıtıldı.

Benim sorum:

Araştırma yaparken, bir şeyin yanlış olduğuna dair bir fikrim olduğunu söyleyelim. Ama kesin olarak bilmiyorum. Ve elbette, üretimdeki şeyleri test edemiyorum. Bu önsezi temel alan bir öneri önerdiysem, sorunun ne olduğunu anlamadan önce, denemek ve uygulamak ve işe yarayıp yaramadığını görmek akıllıca olur mu?


24
DEV veya QA'yı kırmadıysa, ancak üretimi bozduysa, bu genellikle bir yapılandırma sorunudur.
Mike L.

4
Kişisel olarak prodüksiyona erişiminiz olmayabilirken, sorunları gidermek için gözleriniz ve elleriniz olan operasyon ekibinin bir üyesine sahip olmalısınız.
shufler

3
Yeni sürümde kullanılabilecek veritabanı erişimi veya ağ izinleri gibi yapılandırma sorunlarını reddettiniz mi?
JB King,

7
@MikeL. Veya dev veya QA'da olmayan bozuk veriler.
maple_shaft

3
@ shufler - ABD'de, Sarbanes-Oxley Yasası (aka SOX), geliştiricilerin halka açık şirketlerdeki üretime erişime sahip olmamasını gerektiriyor. Bazı şirketler erişimi kısıtlayan kendi iç politikalarına sahiptir. Bunlar genellikle bir geliştirici tüm sistemi bir önsezine göre yıktıktan sonra yürürlüğe girer.
jfrankcarr

Yanıtlar:


33

Sorun hakkında olabildiğince fazla bilgi edinin (günlük dosyaları vb.) Ve ardından üretim sunucularını çalışma durumuna geri alın. Bu, geliştiricinin bakış açısına göre bir acıdır, ancak büyük olasılıkla verilen bir durumdur.

Ardından, sorunu bir geliştirme ortamında yeniden oluşturabilecek misiniz? Yapabiliyorsanız, düzeltin ve yeniden bırakmayı deneyin.

Yeniden oluşturamıyorsanız, sorun hakkında daha fazla bilgi edinmek için daha fazla tanılama ekleyip kısa bir süre için bir sunucuya bırakıp bırakamayacağınıza bakın.

Eğer bu mümkün değilse, üretim ile dev / qa ortamları arasındaki farklara daha yakından bakın ve üretime daha yakın bir ortam yaratmaya çalışın.


4

Sorunu ne kadar iyi anlıyorsunuz? Kalbinin işleri daha kötü hale getirme riski nedir? DEV / QA bölgelerinde problemi geri almak ve yeniden üretmek mümkün müdür? DEV / QA bölgenizi PROD'ye yaklaştırmak için senkronize etmek için ne yapabilirsiniz? Belki bazı çevresel veya veritabanı ayarlarını değiştirmeniz, belki PROD verilerini DEV'ye aktarmanız, belki de bazı hata ayıklama ayarlarını değiştirmeniz gerekir.

Genel olarak, ben ederim değil bunu başka bölgede gerçekten doğru olduğunu teyit sürece PROD bir çözümün kamburunu iterek önerilir. PROD'de bir hata olduğunda ortaya çıkan ve başka hiçbir yerde çoğaltılamayan sorunları anlıyorum. Ne görmeye aşağı o zaman gelir başka DEV / QA ve PROD ve bu odaklanarak arasındaki farklılık. Deneyimlerime göre, genellikle PROD için, genellikle çevresel bir ayar veya farklı bir yapılandırma. Ve bunu düzeltmek için yukarıdan muhtemelen çok fazla baskı olduğunu biliyorum, bu yüzden önceki çalışma durumuna geri dönüp sorunu DEV'de yeniden oluşturmayı, DEV'de bir düzeltme yapmayı ve sonra denemeyi mümkün kıldım yine PROD'da? Ben de bunu önerirdim.


5
Kesinlikle düzelteceğiniz kesin olarak bilmediğiniz bir eşyaya düzeltme uygulamak istemezsiniz; Bu muhtemelen sadece daha fazla kırmak olacak! Kararlı bir duruma geri dönmek ve ilk ve tek seferde doğru yapmak için daha az baskının olduğu QA'da çalışmak daha iyidir.
Michael K

2

Düzeltme türüne göre değişir. Çoğu zaman, üretimde görünmeyen problemlerin veritabanında yer almasıyla ilgilidir. Bu nedenle, veritabanı içeriğini "dışarıda" tam olarak neyin olduğundan emin olmadan değiştiren bir hatayı uygulamak büyük bir felakette ilk adım olabilir. Değişikliği kolayca geri alabilirseniz, deneyebilirsiniz. Ancak, genel olarak, doğrudan erişiminiz yoksa, testler için en azından veritabanının veya tüm sunucunun bir kopyası olmalıdır. Doğru ayrıcalıklara sahip insanlar hala yeni kodu çalıştırmak zorunda kalacaklardır, ancak en azından veri kaybı riski olmadan. (Ancak bazen veritabanının boyutu veya altyapının karmaşıklığı böyle bir kurulumu yasaklamaktadır)

Gerçekten zor, çünkü farklı ayarlar, kütüphaneler ve yazılım sürümleri gibi birçok olasılık var.

Belki de, hatanın kaynağına ilişkin tahmininiz doğru olduğunda ve yalnızca gerçek hatayı uyguladıysanız, önce bazı hata ayıklama çıktısı ile değerlendirilen bir kod parçası yazabilirsiniz.


1

Genellikle, kod ve DB'nin Prod, QA ve dev arasında aynı olduğu varsayılarak, yapılandırma veya veri sorunları olur.

Önce aşağıdakilere bakardım:

  • Kodunuzdaki tüm kayıt verileri.
  • İşlenmeyen istisnalar için olay görüntüleyiciyi kontrol edin.
  • Uygulamanızın ilerlemesini temsil eden verileri kontrol edin, veri tabanında, dosyalarda vb. Olabilir. Mantıklı mı değil mi? Beklediğiniz mi?

Neler olup bittiğini anladıktan sonra, üretimi bir çalışma durumuna geri döndürmeniz ve sorunu daha düşük bir ortamda düzeltmeye ve yeniden üretime geçene kadar düzeltmeye çalışmanız gerekir.


0

Ortamınız PHP iken, Java için nasıl düşünüleceği konusunda bir sunum yaptım: http://www.infoq.com/presentations/maintaining-production-java-apps

Temel konular aynıdır - durumu gidermek için olası boğulma noktalarını anlamak için: ağ, dosya sistemine erişim, günlük dosyaları, kilitlenmeler, vb. Ayrıca, doğru soruları nasıl soracağınızı bilmek için: "Sistem kapatma" - "Özel olarak ne yaparsınız? ne demek: web sayfası yavaş mı, belirli bir hata mesajı var mı, zaman aşımı mı var?

Ayrıca sorun gidermeyi kolaylaştırmak için bazı araçlar var: Ağ sorunlarını gidermek için Wireshark mutlak en iyisidir ve öğrenmeye değer. Diğerleri kullandığınız O / S'ye bağlıdır. Windows için, SysInternal'dan (şimdi Microsoft'un bir parçası) gelen herhangi bir şey mükemmeldir. Unix / Linux için truss / strace'a bakın.

Üretime erişimde, operasyon grubu ya bu araçların / tekniklerin nasıl kullanılacağını bilmeli ya da onları nasıl kullanacaklarını öğrenmek için onlar için bir iş vakanız vardır. Ondan sonra, problem ortaya çıktığında çalışması için belirli bir sorun giderme protokolleri setine ihtiyaçları vardır, böylece analizinizi çevrimdışı yapabilirsiniz.


0

Kısa cevap: Başka seçeneğiniz yoksa.

Uzun cevap: Sorunu anlamadıysanız, böyle bir düzeltme ekinin çeşitli riskleri vardır:

  1. Başka bir şeyi kırabilir, daha az tekrarlanabilir hale gelebilir.
  2. Sadece olabilir maske (ki daha kötü yapar) haber ve çoğaltmak zorlaştırarak sorunu
  3. Potansiyel ev deneyimini atıyorsunuz - sizi daha iyi bir programcı ve aynı zamanda şirketiniz için daha değerli hale getirebilecek bir deneyim (yani, gelecekteki potansiyel bir artış).

Öte yandan, varsayımsal fikrinizin işe yarayıp yaramadığını kontrol etmekte hiçbir zarar görmüyorum, ve eğer çalışıyorsa - daha sonra daha derine inin ve asıl nedeni veya sorunu çözmek için daha iyi yollar bulun.

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.