Go के लिए Chaos Engineering: एप्लिकेशन को तोड़ना, बचाने के लिए

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

प्रस्तावना: आपकी Go सेवा कोई शांत बंदरगाह क्यों नहीं है

\n\n

आपने Go में एक आदर्श कोड लिखा है। यह तेज़, समवर्ती है, गोरूटीन और चैनल का उपयोग करता है। आपने यूनिट टेस्ट, इंटीग्रेशन टेस्ट किए, कवरेज की जाँच की। लेकिन जब आपने शुक्रवार शाम को रिलीज़ किया, तो सब कुछ ढह गया। क्यों? क्योंकि प्रोडक्शन में अराजकता रहती है। नेटवर्क लैग करता है, डिस्क भर जाती हैं, डेटाबेस क्रैश हो जाते हैं, और आश्रित माइक्रोसर्विसेज अनंत टाइम-आउट में चली जाती हैं।

\n\n

वास्तविक दुनिया में आपका स्वागत है। यहाँ Chaos Engineering (अराजकता इंजीनियरिंग) मदद के लिए आती है — एक अनुशासन जो हमें सिस्टम को जानबूझकर तोड़ना सिखाता है ताकि हम इसकी कमजोरियों को समझ सकें। इस लेख में, हम देखेंगे कि Go एप्लिकेशन के लिए Chaos Engineering कैसे लागू करें। आप सीखेंगे कि अपने प्रोडक्शन को खंडहर में बदले बिना सरल लेकिन प्रभावी प्रयोग कैसे लिखें। तैयार हैं? चलिए शुरू करते हैं!

\n\n

Chaos Engineering क्या है और Go डेवलपर को इसकी आवश्यकता क्यों है?

\n\n

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

\n\n

Go के लिए, यह दृष्टिकोण विशेष रूप से प्रासंगिक है। Go मूल रूप से विश्वसनीय, स्केलेबल सिस्टम बनाने के लिए डिज़ाइन किया गया था। लेकिन सबसे अच्छा कोड भी नेटवर्क समस्याओं या गोरूटीन की अचानक मृत्यु से नहीं बचा सकता। Chaos Engineering यह जाँचने में मदद करता है कि आपके middleware, retry-लॉजिक और circuit breakers (स्वचालित स्विच) वास्तविक परिस्थितियों में कैसे काम करते हैं।

\n\n

Go में Chaos Engineering के लिए उपकरण

\n\n

Go की दुनिया में अराजकता लागू करने के लिए कई शक्तिशाली लाइब्रेरी और दृष्टिकोण हैं। हम सबसे लोकप्रिय पर विचार करेंगे:

\n\n
    \n
  • gofault — विलंब और त्रुटियों को इंजेक्ट करने के लिए एक सरल लाइब्रेरी।
  • \n
  • chaostoolkit — प्रयोगों के ऑर्केस्ट्रेशन के लिए एक फ्रेमवर्क (Go ड्राइवर उपलब्ध हैं)।
  • \n
  • स्वयं के middleware — सबसे लचीला और नियंत्रित तरीका।
  • \n
\n\n

इस लेख में, हम अपना स्वयं का middleware बनाने का मार्ग अपनाएंगे। यह आपको प्रक्रिया की पूरी समझ देगा और इसे अपनी आवश्यकताओं के अनुसार अनुकूलित करने की क्षमता प्रदान करेगा।

\n\n

अभ्यास: Go पर HTTP सर्वर के लिए Chaos Middleware बनाना

\n\n

कल्पना करें कि आपके पास Go पर एक सरल HTTP सर्वर है। हम एक middleware जोड़ेंगे जो विभिन्न विफलताओं का अनुकरण करेगा: विलंब, त्रुटियाँ, पैनिक।

\n\n

चरण 1: मूल संरचना

\n\n

चलिए अराजकता कॉन्फ़िगरेशन की संरचना को परिभाषित करके शुरू करते हैं:

\n\n
package chaos\n\nimport (\n    "math/rand"\n    "net/http"\n    "time"\n)\n\n// Config में अराजकता इंजेक्शन के लिए सेटिंग्स हैं।\ntype Config struct {\n    // Probability - विफलता की संभावना (0.0 - 1.0)।\n    Probability float64\n    // DelayRange - मिलीसेकंड में विलंब की सीमा [min, max]।\n    DelayRange [2]int\n    // ErrorCode - त्रुटि पर लौटाया जाने वाला HTTP स्थिति कोड।\n    ErrorCode int\n    // Panic - यदि true, तो middleware पैनिक उत्पन्न करेगा।\n    Panic bool\n}\n\n// DefaultConfig डिफ़ॉल्ट कॉन्फ़िगरेशन लौटाता है।\nfunc DefaultConfig() Config {\n    return Config{\n        Probability: 0.1, // 10% अनुरोध प्रभावित होंगे\n        DelayRange:  [2]int{100, 500},\n        ErrorCode:   http.StatusInternalServerError,\n        Panic:       false,\n    }\n}
\n\n

चरण 2: स्वयं middleware लिखना

\n\n

अब एक फ़ंक्शन बनाते हैं जो middleware लौटाता है। यह यादृच्छिक रूप से तय करेगा कि अनुरोध के साथ क्या करना है।

\n\n
// Middleware अराजकता इंजेक्शन के लिए HTTP middleware लौटाता है।\nfunc Middleware(cfg Config) func(http.Handler) http.Handler {\n    rng := rand.New(rand.NewSource(time.Now().UnixNano()))\n\n    return func(next http.Handler) http.Handler {\n        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n            /                

ब्लॉग

पुस्तक अनुशंसाएँ