सर्विस मेश और Swift: माइक्रोसर्विसेज को बिना दर्द के प्रबंधित कैसे करें

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

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

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

माइक्रोसर्विसेज की दुनिया में Swift: जब एक सर्वर काफी नहीं होता

\n\n

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

\n\n

यहाँ पर सर्विस मेश आता है — एक स्मार्ट लेयर जो सभी संचार जादू को संभालता है। और हाँ, Swift इसके साथ बहुत अच्छी तरह से काम करता है। इस लेख में, हम समझेंगे कि Vapor, Kitura और आधुनिक प्रथाओं का उपयोग करके Swift इकोसिस्टम में सर्विस मेश को कैसे वश में किया जाए। कोई बकवास नहीं — केवल कोड और वास्तविक मामले।

\n\n

सर्विस मेश क्या है और Swift डेवलपर को इसकी आवश्यकता क्यों है?

\n\n

कल्पना करें कि आपका हर माइक्रोसर्विस एक अलग द्वीप है। आमतौर पर द्वीप नौकाओं (HTTP अनुरोधों) से जुड़े होते हैं। लेकिन नौकाएं डूब जाती हैं, देर से आती हैं, और कभी-कभी समुद्री डाकू (नेटवर्क त्रुटियाँ) माल लूट लेते हैं। सर्विस मेश पुलों और डिस्पैचर्स का एक स्मार्ट नेटवर्क है जो:

\n\n
    \n
  • ट्रैफ़िक प्रबंधित करता है — तय करता है कि अनुरोध कहाँ भेजना है यदि सर्विस ओवरलोड है
  • \n
  • सब कुछ एन्क्रिप्ट करता है — कोड की एक भी पंक्ति के बिना सर्विसेज के बीच mTLS
  • \n
  • मेट्रिक्स एकत्र करता है — आप देख सकते हैं कि प्रत्येक कॉल में कितना समय लगा
  • \n
  • त्रुटियों को संभालता है — retry, timeout, circuit breaker बॉक्स से बाहर
  • \n
\n\n

Swift के लिए यह विशेष रूप से प्रासंगिक है: सर्वर-साइड Swift का इकोसिस्टम युवा है, और जटिल रूटिंग के लिए अंतर्निहित तंत्र अभी भी कम हैं। सर्विस मेश इन अंतरालों को भरता है, बिना आपको टनों boilerplate कोड लिखने के लिए मजबूर किए।

\n\n

सर्विस मेश के बिना Swift माइक्रोसर्विसेज कैसे संवाद करती हैं?

\n\n

आइए एक विशिष्ट उदाहरण देखें। मान लीजिए, आपके पास Vapor पर एक ऑर्डर सर्विस और एक पेमेंट सर्विस है। सर्विस मेश के बिना, आप कुछ इस तरह लिखते हैं:

\n\n
import Vapor\n\nfunc processOrder(req: Request) async throws -> Order {\n    // मैन्युअल रूप से URL बनाना — पहले से ही बुरा\n    let paymentServiceURL = "http://payment-service:8080/charge"\n    \n    // खुद टाइमआउट संभालना — उबाऊ\n    let client = req.client\n    let response = try await client.post(URI(paymentServiceURL)) { req in\n        try req.content.encode(PaymentRequest(amount: 100))\n    }\n    \n    // खुद स्टेटस जांचना — थकाऊ\n    guard response.status == .ok else {\n        throw Abort(.badGateway, reason: "Payment failed")\n    }\n    \n    return try response.content.decode(Order.self)\n}
\n\n

परिचित लगता है? अब कल्पना करें कि 20 सर्विसेज हैं, और हर बार retry, लोड बैलेंसिंग और एन्क्रिप्शन के तर्क को दोहराना पड़ता है। सर्विस मेश इस नरक से छुटकारा दिलाता है।

\n\n

Istio + Swift: प्रोडक्शन के लिए आदर्श जोड़ी

\n\n

Istio Kubernetes के लिए सबसे लोकप्रिय सर्विस मेश है। यह sidecar-proxy (Envoy) के स्तर पर काम करता है, जो सभी ट्रैफ़िक को इंटरसेप्ट करता है। Swift सर्विस को Istio के अस्तित्व के बारे में जानने की भी आवश्यकता नहीं है — यह बस एक पोर्ट पर सुनती है, और proxy बाकी सब कुछ करता है।

\n\n

लेकिन एक बारीकी है: Swift एप्लिकेशन अक्सर अपने स्वयं के HTTP इंजन (Vapor, Hummingbird) वाले फ्रेमवर्क का उपयोग करते हैं। Istio को हेडर और प्रोटोकॉल को सही ढंग से समझना चाहिए। अच्छी खबर: Vapor 4+ मानक HTTP/1.1 और HTTP/2 का समर्थन करता है, इसलिए कोई समस्या नहीं है।

\n\n

Istio के साथ Swift सर्विस तैनात करना

\n\n

मान लीजिए, आपके पास Vapor पर एक सरल सर्विस है:

\n\n
// Sources/App/routes.swift\nimport Vapor\n\nfunc routes(_ app: Application) throws {\n    app.get("health") { req -> HTTPStatus in\n        return .ok\n    }\n    \n    app.get("api", "v1", "users") { req -> [User] in\n        // उपयोगकर्ताओं को प्राप्त करने का तर्क\n        return [User(id: 1, name: "Alice")]\n    }\n}
\n\n

इसके लिए Dockerfile सामान्य होगा:

\n\n
FROM swift:5.9 AS build\nWORKDIR /app\nCOPY . .\nRUN swift build -c release\n\nFROM ubuntu:22.04\nWORKDIR /app\nCOPY                

ब्लॉग

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