C++ माइक्रोसर्विसेज़ के लिए सर्विस मेश: चिड़ियाघर को कैसे वश में करें

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

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

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

C++ माइक्रोसर्विसेज़ नेटवर्क से दोस्ती क्यों नहीं करतीं (और सर्विस मेश इसे कैसे ठीक करता है)

\n\n

कल्पना करें: आपने C++ में एक आदर्श पाइपलाइन बनाई है। हर माइक्रोसर्विस तेज़ी से काम करता है, मेमोरी सख्ती से प्रबंधित होती है, और गति अच्छाई और बुराई की सीमा से परे है। लेकिन जैसे ही आप यह सब Kubernetes में चलाते हैं, नरक शुरू हो जाता है। टाइमआउट, रीट्राय, कनेक्शन टूटना, पैकेट लॉस। आप कोड में जाते हैं, हर कोने में curl डालते हैं, रीट्राय के लिए अपने खुद के पहिए बनाते हैं — और प्रोजेक्ट दलदल में बदल जाता है।

\n\n

परिचित लगता है? वितरित सिस्टम की दुनिया में आपका स्वागत है। अच्छी खबर: समस्या को सर्विस मेश हल करता है। बुरी खबर: अधिकांश ट्यूटोरियल Go या Java के लिए लिखे गए हैं। और हम C++ डेवलपर्स को क्या करना चाहिए, जो भारी Istio को Envoy के साथ नहीं घसीटना चाहते, जबकि हल्का और समझने योग्य समाधान बनाया जा सकता है?

\n\n

इस लेख में, हम देखेंगे कि कैसे C++ माइक्रोसर्विसेज़ के लिए बिना दर्द और अनावश्यक निर्भरता के सर्विस मेश लागू करें। आप जानेंगे कि साइडकार-प्रॉक्सी क्या है, लोड बैलेंसिंग और अवलोकनीयता कैसे सेट करें, और gRPC के साथ C++ का एक वास्तविक कोड उदाहरण प्राप्त करेंगे।

\n\n

सर्विस मेश क्या है और C++ प्रोजेक्ट्स को इसकी आवश्यकता क्यों है?

\n\n

सर्विस मेश माइक्रोसर्विसेज़ के बीच नेटवर्क ट्रैफ़िक को प्रबंधित करने के लिए एक समर्पित बुनियादी ढाँचा स्तर है। टाइमआउट, रीट्राय, लोड बैलेंसिंग और एन्क्रिप्शन के तर्क को प्रत्येक सेवा में एम्बेड करने के बजाय, आप इसे एक प्रॉक्सी-कंटेनर (साइडकार) में डालते हैं, जो आपकी सेवा के प्रत्येक इंस्टेंस के साथ चलता है।

\n\n

C++ के लिए यह विशेष रूप से प्रासंगिक है, क्योंकि:

\n
    \n
  • C++ कोड आमतौर पर हाई-लोड सिस्टम के लिए लिखा जाता है, जहाँ हर माइक्रोसेकंड मायने रखता है;
  • \n
  • अंतर्निहित नेटवर्क तर्क रखरखाव और परीक्षण को जटिल बनाता है;
  • \n
  • C++ की मानक लाइब्रेरी सर्विस मेश के लिए तैयार तंत्र प्रदान नहीं करती (Go के विपरीत, जिसके पास मानक HTTP क्लाइंट हैं)।
  • \n
\n\n

सर्विस मेश के मुख्य घटक:

\n
    \n
  • डेटा प्लेन — प्रॉक्सी सर्वर (आमतौर पर Envoy, लेकिन C++ पर अपने भी हो सकते हैं);
  • \n
  • कंट्रोल प्लेन — प्रबंधन स्तर (जैसे, Istio, Consul, या स्व-निर्मित)।
  • \n
\n\n

हम डेटा प्लेन पर ध्यान केंद्रित करेंगे, क्योंकि यहीं C++ अपनी ताकत दिखाता है।

\n\n

C++ में अपना साइडकार-प्रॉक्सी लिखना (न्यूनतम उदाहरण)

\n\n

मान लीजिए, हमारे पास दो माइक्रोसर्विसेज़ हैं: auth_service और user_service। वे gRPC के माध्यम से संवाद करते हैं। सर्विस मेश के बिना, प्रत्येक सेवा को स्वयं रीकनेक्ट, टाइमआउट और मीट्रिक को संभालना होगा। प्रॉक्सी के साथ — ऐसा नहीं है।

\n\n

यहाँ libcurl और nlohmann/json लाइब्रेरी का उपयोग करके C++ में साइडकार-प्रॉक्सी का एक न्यूनतम उदाहरण है। यह HTTP अनुरोध प्राप्त करता है, उन्हें बैकएंड पर प्रॉक्सी करता है, रीट्राय जोड़ता है और विलंबता को लॉग करता है।

\n\n
// proxy.cpp\n#include <httplib.h>\n#include <nlohmann/json.hpp>\n#include <curl/curl.h>\n#include <chrono>\n#include <thread>\n\nusing json = nlohmann::json;\nusing namespace std::chrono_literals;\n\nclass SidecarProxy {\npublic:\n    SidecarProxy(const std::string& backend_host, int backend_port, int max_retries = 3)\n        : backend_host_(backend_host), backend_port_(backend_port), max_retries_(max_retries) {}\n\n    void handle_request(const httplib::Request& req, httplib::Response& res) {\n        auto start = std::chrono::high_resolution_clock::now();\n        CURL* curl = curl_easy_init();\n        std::string url = "http://" + backend_host_ + ":" + std::to_string(backend_port_) + req.path;\n        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());\n        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5L);\n\n        std::string response_string;\n        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, +[](void* ptr, size_t size, size_t nmemb, void* stream) {\n            ((std::string*)stream)->append((char*)ptr, size * nmemb);\n            return size * nmemb;\n        });\n        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string);\n\n        int retries = 0;\n        CURLcode code;\n        d                

ब्लॉग

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