समस्या को समझना जब उत्पादन में चीजें टूट जाती हैं


24

परिदृश्य:

  • आप उत्पादन पर जोर देते हैं
  • धक्का ने कई चीजों को तोड़ दिया
  • उसी बिल्ड ने क्यूए या देव को नहीं तोड़ा
  • एक डेवलपर के रूप में, आपके पास ठेस पहुंच नहीं है।
  • ऊपर से काम करने वाले एगियन काम करने के लिए ऊपर से बहुत दबाव है ।

सुनिश्चित वर्णन:

  • PHP / MVC एप्लिकेशन जो Zend में एपीआई-संचालित है।
  • कुछ सर्वरों पर नियोजित।

मेरा प्रश्न:

जांच करते समय, मैं कहता हूं कि मेरे पास एक कूबड़ है जो कुछ गलत है। लेकिन, मुझे यकीन नहीं है। और, ज़ाहिर है, मैं उत्पादन में चीजों का परीक्षण नहीं कर सकता। यदि मेरे पास उस कूबड़ के आधार पर सुझाए गए फ़िक्स हैं, तो क्या यह समझने और लागू करने के लिए बुद्धिमान होगा कि क्या यह काम करता है, यह समझने से पहले कि समस्या क्या है?


24
यदि यह DEV या QA को नहीं तोड़ता है, लेकिन उत्पादन को तोड़ देता है, तो यह आमतौर पर एक कॉन्फ़िगरेशन समस्या है।
माइक एल।

4
जब आप व्यक्तिगत रूप से उत्पादन तक नहीं पहुंच सकते हैं, तो आपके पास ऑपरेशन टीम का एक सदस्य होना चाहिए जो समस्या निवारण के लिए आपकी आंखें और हाथ हो सकता है।
शुफ्लर

3
क्या आपने कॉन्फ़िगरेशन समस्याओं को खारिज कर दिया है, जैसे डेटाबेस एक्सेस या नेटवर्क अनुमतियाँ जिनका उपयोग नए संस्करण में किया जा सकता है?
जेबी किंग

7
@MikeL। या भ्रष्ट डेटा देव या QA में मौजूद नहीं है।
maple_shaft

3
@ शॉफ़लर - यूएस में, सर्बानेस-ऑक्सले अधिनियम (उर्फ एसओएक्स) की आवश्यकता है कि डेवलपर्स के पास सार्वजनिक रूप से कारोबार वाली कंपनियों में उत्पादन तक पहुंच नहीं है। कुछ कंपनियों की अपनी आंतरिक नीतियां हैं जो पहुंच को सीमित करती हैं। आमतौर पर एक डेवलपर द्वारा कूबड़ के आधार पर पूरे सिस्टम को नीचे लाने के बाद ये लागू होते हैं।
jfrankcarr

जवाबों:


33

समस्या के बारे में अधिक जानकारी के रूप में आप कर सकते हैं (logfiles आदि) को पकड़ो और फिर उत्पादन सर्वर को एक कार्यशील स्थिति में रोलबैक करें। यह निश्चित रूप से डेवलपर के दृष्टिकोण से एक दर्द है, लेकिन सबसे अधिक संभावना एक दिया है।

अगला, कोशिश करें और देखें कि क्या आप विकास के माहौल में समस्या को पुन: उत्पन्न कर सकते हैं। यदि आप कर सकते हैं, तो इसे ठीक करें और फिर से जारी करने का प्रयास करें।

यदि आप इसे पुन: पेश नहीं कर सकते हैं, तो देखें कि क्या आप समस्या के बारे में अधिक जानकारी प्राप्त करने के लिए कम समय के लिए अधिक डायग्नोस्टिक्स और एक सर्वर पर जोड़ सकते हैं।

यदि यह संभव नहीं है, तो उत्पादन और देव / क्यूए वातावरण के बीच के अंतर को अधिक बारीकी से देखें और उत्पादन के करीब देव वातावरण बनाने की कोशिश करें।


4

आप समस्या को कितनी अच्छी तरह समझते हैं? क्या जोखिम है कि आपके कूबड़ खराब हो जाएंगे? क्या डीईवी / क्यूए क्षेत्रों में समस्या को वापस जाना और पुन: उत्पन्न करना संभव है? आप अपने DEV / QA क्षेत्र को सिंक करने के लिए उसे PROD के करीब लाने के लिए क्या कर सकते हैं? हो सकता है कि आपको कुछ पर्यावरण या डेटाबेस सेटिंग्स को बदलना पड़े, हो सकता है कि आपको PROD डेटा को DEV में आयात करना पड़े, हो सकता है कि आपको कुछ सेटिंग बदलना पड़े।

सामान्य तौर पर, मैं PROD के समाधान के अपने कूबड़ को धक्का देने की सिफारिश नहीं करूंगा जब तक कि आप यह पुष्टि नहीं कर सकते कि यह वास्तव में किसी अन्य क्षेत्र में सही है। मुझे समझ में आता है कि समस्याओं का एक प्रकार है जब एक बग PROD में होता है और कहीं और पुन: प्रस्तुत नहीं किया जा सकता है। यही कारण है कि जब यह क्या देख करने के लिए नीचे आता है और कुछ देव / क्यूए और उत्पादन और उन पर ध्यान केंद्रित कर के बीच अलग है। मेरे अनुभव में, यह आमतौर पर एक पर्यावरणीय सेटिंग या कुछ कॉन्फ़िगरेशन है जो विशेष रूप से PROD के लिए अलग है। और मुझे पता है कि इसे ठीक करने के लिए ऊपर से शायद बहुत दबाव है, इसलिए क्या पिछली कार्यशील स्थिति में वापस आना संभव है और फिर DEV में समस्या को पुन: उत्पन्न करने का प्रयास करें, DEV में एक सुधार के साथ आएं, और फिर प्रयास करें फिर से PROD में? यही मेरा सुझाव है।


5
आप निश्चित रूप से एक टूटे हुए ठेस को ठीक करने के लिए आवेदन नहीं करना चाहते हैं जो आपको नहीं पता है कि यह निश्चित होगा; संभावना है कि यह केवल इसे और अधिक तोड़ देगा! एक स्थिर स्थिति में वापस रोल करने के लिए बेहतर है और क्यूए में काम करते हैं जहां पहले और एकमात्र समय को सही तरीके से प्राप्त करने के लिए कम दबाव होता है।
माइकल के

2

फिक्स के प्रकार पर निर्भर करता है। अधिक बार नहीं, उत्पादन में समस्याएं जो देव में प्रकट नहीं होती हैं वे डेटाबेस में दावेदारी से संबंधित हैं। इसलिए बग को लागू करना जो डेटाबेस सामग्री को बदल देता है, यह सुनिश्चित किए बिना कि वास्तव में "बाहर है" एक बड़ी आपदा में पहला कदम हो सकता है। यदि आप आसानी से परिवर्तन वापस ले सकते हैं, तो आप आस-पास की कोशिश कर सकते हैं। लेकिन सामान्य तौर पर, यदि आपके पास सीधी पहुंच नहीं है, तो परीक्षण के लिए कम से कम डेटाबेस या पूरे सर्वर की एक प्रति होनी चाहिए। सही विशेषाधिकार वाले लोगों को अभी भी नया कोड चलाना होगा, लेकिन कम से कम डेटा हानि के जोखिम के बिना। (लेकिन कभी-कभी डेटाबेस का आकार या बुनियादी ढांचे की जटिलता इस तरह के सेटअप को प्रतिबंधित करती है)

यह वास्तव में कठिन है, क्योंकि विभिन्न सेटिंग्स, लाइब्रेरी और सॉफ़्टवेयर के संस्करण जैसी कई संभावनाएं हैं।

हो सकता है कि आप पहले कोड का एक टुकड़ा लिख ​​सकते हैं जो कुछ डिबग आउटपुट के साथ मूल्यांकन करता है यदि बग के स्रोत के लिए आपका अनुमान सही था और उसके बाद ही वास्तविक बगफिक्स लागू करें।


1

आमतौर पर यह या तो कॉन्फ़िगरेशन या डेटा समस्याएँ हैं, यह मानते हुए कि कोड और DB उत्पाद, क्यूए और देव के बीच समान हैं।

मैं पहले निम्नलिखित को देखूंगा:

  • आपके कोड का कोई भी लॉगिंग डेटा।
  • बिना किसी अपवाद के इवेंट व्यूअर की जाँच करें।
  • अपने एप्लिकेशन की प्रगति का प्रतिनिधित्व करने वाले डेटा की जांच करें, यह डीबी, फाइलों आदि में हो सकता है, क्या यह समझ में आता है या नहीं? क्या आपको उम्मीद है?

एक बार जब आप समझ जाते हैं कि क्या चल रहा है, तो आपको उत्पादन को एक कार्यशील स्थिति में ले जाने और कम वातावरण में समस्या को ठीक करने पर काम करने की जरूरत है, जब तक कि निश्चित और फिर से उत्पादन के लिए तैनात नहीं किया जाता है।


0

जब आपका वातावरण PHP है, तो मैंने जावा के बारे में सोचने के लिए एक प्रस्तुति दी है: http://www.infoq.com/pretations/maintain-production-java-apps

मुख्य मुद्दे समान हैं - स्थिति का निवारण करने के लिए संभावित चोक पॉइंट्स को समझने के लिए: नेटवर्क, फाइल सिस्टम एक्सेस, लॉग फाइल, डेडलॉक, आदि। इसके अलावा, यह जानने के लिए कि कैसे सही प्रश्न पूछें: "सिस्टम डाउन" - "विशेष रूप से आप क्या करते हैं माध्य: क्या वेब पेज धीमा है, क्या कोई विशिष्ट त्रुटि संदेश है, क्या कोई टाइमआउट है, आदि।

साथ ही समस्या निवारण को आसान बनाने के लिए कुछ उपकरण हैं: नेटवर्क समस्या निवारण के लिए विंडसर एक पूर्ण सर्वोत्तम है और सीखने लायक है। अन्य आपके द्वारा उपयोग किए जाने वाले O / S पर निर्भर करते हैं। विंडोज के लिए, SysInternal (अब Microsoft का हिस्सा) से कुछ भी शानदार है। यूनिक्स / लिनक्स के लिए, ट्रस / स्ट्रेस को देखें।

उत्पादन तक पहुंचने पर, संचालन समूह को या तो यह जानना चाहिए कि उन उपकरणों / तकनीकों का उपयोग कैसे करना है या आपके पास उनके लिए एक व्यावसायिक मामला है (साथ में आप) उनका उपयोग करने का तरीका जानें। उसके बाद, समस्या होने पर उन्हें चलाने के लिए समस्या निवारण प्रोटोकॉल के एक विशिष्ट सेट की आवश्यकता होती है, ताकि आप अपना विश्लेषण ऑफ़लाइन कर सकें।


0

संक्षिप्त उत्तर: यदि आपके पास कोई विकल्प नहीं है।

लंबा उत्तर: यदि आप समस्या को नहीं समझते हैं, तो ऐसे पैच में कई जोखिम शामिल हैं:

  1. आप कुछ और तोड़ सकते हैं, जो कम प्रजनन योग्य भी हो सकता है।
  2. आप सिर्फ समस्या का सामना कर सकते हैं , जिससे यह नोटिस करना और पुन: पेश करना मुश्किल हो जाता है (जो इसे बदतर बनाता है)
  3. आप संभावित घरेलू अनुभव को दूर फेंक रहे हैं - अनुभव जो आपको एक बेहतर प्रोग्रामर बना सकता है, और एक ही समय में आपकी कंपनी के लिए अधिक मूल्यवान होगा (यानी एक संभावित भविष्य का निर्माण)।

दूसरी ओर, मुझे पहली जाँच में कोई नुकसान नहीं दिखता है कि क्या आपकी परिकल्पना ठीक काम करती है, और अगर यह करता है - तो गहरी खुदाई करें और समस्या को हल करने के वास्तविक कारण या अन्य संभवतः बेहतर तरीकों का पता लगाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.