जब आपका TypeScript सेवा अराजकता का सामना करती है
\nकल्पना करें: आपका TypeScript एप्लिकेशन पूरी तरह से काम कर रहा है — टेस्ट पास हो रहे हैं, डिप्लॉयमेंट सफल है, उपयोगकर्ता संतुष्ट हैं। लेकिन फिर रात के 3 बजते हैं, और Redis क्लस्टर "आराम करने" का फैसला करता है। या CDN 503 त्रुटियाँ देना शुरू कर देता है। या, इससे भी मजेदार, नेटवर्क पैकेट महाद्वीपों के बीच कहीं खो जाता है।
\nउस पल में, आपका सावधानीपूर्वक लिखा गया TypeScript कोड, जो दिल से लिखा गया है, डरे हुए बिल्ली की तरह व्यवहार कर सकता है। या सुपरहीरो की तरह। यह सब इस बात पर निर्भर करता है कि क्या आपने उसे अराजकता का सामना करने के लिए प्रशिक्षित किया है।
\nकैओस इंजीनियरिंग प्रोडक्शन को तोड़ने के बारे में नहीं है। यह सीखने के बारे में है कि सही तरीके से कैसे टूटा जाए। और TypeScript अपनी सख्त टाइपिंग और शक्तिशाली एब्स्ट्रैक्शन के साथ इस तरह के प्रशिक्षण के लिए एक उत्कृष्ट मैदान है।
\n\nवास्तव में कैओस इंजीनियरिंग क्या है?
\nकैओस इंजीनियरिंग एक वितरित प्रणाली पर प्रयोग करने की अनुशासन है ताकि उपयोगकर्ताओं के सामने आने से पहले इसकी कमजोरियों का पता लगाया जा सके। TypeScript एप्लिकेशन के संदर्भ में, इसका अर्थ है:
\n- \n
- व्यवस्थित रूप से विफलताएँ डालना — सेवाओं को बंद करना, विलंब, नेटवर्क त्रुटियाँ \n
- व्यवहार का अवलोकन करना — आपका कोड अप्रत्याशित परिस्थितियों पर कैसे प्रतिक्रिया करता है \n
- प्रयोगों को स्वचालित करना — ताकि उन्हें नियमित रूप से दोहराया जा सके \n
- आर्किटेक्चर में सुधार करना — प्राप्त आंकड़ों के आधार पर \n
मुख्य नियम: आपको किसी समस्या के बारे में क्रोधित उपयोगकर्ता से नहीं सीखना चाहिए। बेहतर होगा कि आपका स्वचालित "विध्वंसक" नियंत्रित वातावरण में इसके बारे में जाने।
\n\nTypeScript कैओस इंजीनियरिंग के लिए आदर्श क्यों है?
\nTypeScript केवल JavaScript पर एक ओवरले नहीं है। यह ऐसा कोड लिखने की क्षमता है जो अराजकता में भी पूर्वानुमानित हो। यहाँ कारण हैं:
\n- \n
- सख्त टाइपिंग — आप ठीक से जानते हैं कि कौन सा डेटा आ रहा है और जा रहा है। लेकिन क्या होगा अगर संख्या के बजाय undefined आए? कैओस टेस्ट इसकी जाँच करेंगे। \n
- अतुल्यकालिकता — Promise, async/await, Observable — ये सब नेटवर्क समस्याओं के दौरान दिलचस्प तरीकों से "टूट" सकते हैं। \n
- पारिस्थितिकी तंत्र — Jest, Mocha, Playwright — कैओस परिदृश्यों को एकीकृत करने के लिए तैयार उपकरण। \n
व्यावहारिक उदाहरण: Express एप्लिकेशन में अराजकता लागू करना
\nमान लीजिए कि हमारे पास TypeScript पर एक सरल Express एप्लिकेशन है जो मौसम डेटा प्राप्त करने के लिए बाहरी API का उपयोग करता है। हम जाँचना चाहते हैं कि यदि यह API अनुपलब्ध हो जाए तो यह कैसे व्यवहार करेगा।
\n\nचरण 1: एक सामान्य सेवा लिखें
\n// weather.service.ts\ninterface WeatherResponse {\n temperature: number;\n humidity: number;\n condition: string;\n}\n\nclass WeatherService {\n async getWeather(city: string): Promise<WeatherResponse> {\n const response = await fetch(`https://api.weather.com/v1/${city}`);\n \n if (!response.ok) {\n throw new Error(`Weather API error: ${response.status}`);\n }\n \n return response.json() as Promise<WeatherResponse>;\n }\n}\n\nexport const weatherService = new WeatherService();\n\nचरण 2: सुरक्षा के साथ एक कंट्रोलर जोड़ें
\n// weather.controller.ts\nimport { Request, Response } from 'express';\nimport { weatherService } from './weather.service';\n\nclass WeatherController {\n async getWeatherHandler(req: Request, res: Response) {\n const { city } = req.params;\n \n try {\n const weather = await weatherService.getWeather(city);\n res.json(weather);\n } catch (error) {\n // त्रुटि लॉग करें\n console.error(`Failed to fetch weather for ${city}:`, error);\n \n // फ़ॉलबैक प्रतिक्रिया लौटाएँ\n res.status(503).json({\n error: 'Service temporarily unavailable',\n fallback: {\n tempe