C++ पर सर्वरलेस: AWS Lambda, प्रदर्शन और वास्तविक कोड

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

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

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

Serverless की दुनिया में C++ क्यों?

\n\n

जब आप 'serverless' सुनते हैं, तो सबसे पहले दिमाग में JavaScript, Python या Go आता है। लेकिन क्या होगा अगर मैं कहूं कि आप AWS Lambda, Google Cloud Functions और यहां तक कि अपने स्वयं के रनटाइम पर C++ चला सकते हैं? और यह सिर्फ एक हैक नहीं है, बल्कि उन कार्यों के लिए एक पूरी तरह से सार्थक परिदृश्य है जहां हर मिलीसेकंड मायने रखता है।

\n\n

Serverless में C++ गति और कोल्ड स्टार्ट के बारे में है। जहां Python फ़ंक्शन इंटरप्रेटर और निर्भरताएं लोड कर रहा होता है, वहीं C++ निष्पादन पूरा कर चुका होता है। लेकिन कुछ बारीकियां हैं: आपको Linux के लिए बाइनरी बनानी होगी, इसे ZIP में पैक करना होगा और कस्टम रनटाइम निर्दिष्ट करना होगा। मुश्किल लगता है? वास्तव में नहीं। आइए इसे समझते हैं।

\n\n

Serverless C++ के लिए कैसे काम करता है?

\n\n

बात यह है कि क्लाउड प्रदाता बॉक्स से बाहर संकलित भाषाओं का समर्थन नहीं करते हैं। उदाहरण के लिए, AWS Lambda आधिकारिक तौर पर केवल Python, Node.js, Java, Go, .NET और Ruby का समर्थन करता है। लेकिन Lambda में Custom Runtime तंत्र है - आप कोई भी बाइनरी डाल सकते हैं जो HTTP के माध्यम से Lambda Runtime API के साथ संचार करेगी।

\n\n

योजना सरल है:

\n
    \n
  • आप C++ कोड को Amazon Linux 2 (या संगत वातावरण) के तहत संकलित करते हैं।
  • \n
  • आप निष्पादन योग्य फ़ाइल को bootstrap-स्क्रिप्ट (या स्वयं बाइनरी, जिसका नाम बदलकर bootstrap रखा गया है) के साथ पैक करते हैं।
  • \n
  • आप ZIP को Lambda में अपलोड करते हैं और 'Provide your own bootstrap' निर्दिष्ट करते हैं।
  • \n
\n\n

यही बात Google Cloud Functions (Cloud Run या Knative के माध्यम से) और Azure Functions (Docker इमेज के माध्यम से) के साथ भी की जा सकती है।

\n\n

C++ में एक सरल Lambda फ़ंक्शन बनाना

\n\n

आइए एक फ़ंक्शन लिखें जो दो संख्याओं के साथ JSON लेता है और उनका योग लौटाता है। यह क्लासिक है, लेकिन C++ में।

\n\n
// main.cpp\n#include <iostream>\n#include <string>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main() {\n    // stdin से इवेंट पढ़ें (Lambda इसे इस तरह भेजता है)\n    std::string input;\n    std::getline(std::cin, input);\n\n    auto event = json::parse(input);\n\n    int a = event["a"];\n    int b = event["b"];\n    int sum = a + b;\n\n    json result;\n    result["statusCode"] = 200;\n    result["body"] = std::to_string(sum);\n\n    // stdout में आउटपुट - यह Lambda का उत्तर है\n    std::cout << result.dump() << std::endl;\n\n    return 0;\n}\n
\n\n

बिल्ड के लिए हमें g++ कंपाइलर और nlohmann/json लाइब्रेरी (हेडर डाउनलोड करें) की आवश्यकता होगी। .so फ़ाइलों को न खींचने के लिए स्थिर रूप से संकलित करें:

\n\n
g++ -std=c++17 -static -O2 main.cpp -o bootstrap\n
\n\n

अब एक फ़ाइल bootstrap के साथ ZIP आर्काइव बनाएं और Lambda में अपलोड करें। बस! फ़ंक्शन तैयार है।

\n\n

त्रुटि प्रबंधन और लॉगिंग

\n\n

एक वास्तविक प्रोजेक्ट में, आपको JSON पार्सिंग त्रुटियों को सही ढंग से संभालना होगा और एक समझने योग्य उत्तर वापस करना होगा। AWS Lambda अपेक्षा करता है कि आपकी बाइनरी सफलता के मामले में कोड 0 और त्रुटि के मामले में गैर-शून्य कोड के साथ समाप्त हो। लॉग stderr में लिखे जा सकते हैं - वे CloudWatch में आ जाएंगे।

\n\n
if (!event.contains("a") || !event.contains("b")) {\n    std::cerr << "Missing parameters" << std::endl;\n    json error;\n    error["statusCode"] = 400;\n    error["body"] = "Bad Request";\n    std::cout << error.dump() << std::endl;\n    return 1;\n}\n
\n\n

C++ के लिए AWS Lambda के विकल्प

\n\n

Custom Runtime से परेशान नहीं होना चाहते? अन्य विकल्प भी हैं।

\n\n

Google Cloud Run + Knative

\n\n

आप C++ एप्लिकेशन को Docker इमेज में पैक कर सकते हैं और Cloud Run पर चला सकते हैं। यह बिल्कुल 'फ़ंक्शन' नहीं है, बल्कि एक कंटेनर serverless है, लेकिन C++ के लिए यह सबसे आसान तरीका है। कोल्ड स्टार्ट अधिक लंबा होगा (सेकंड), लेकिन रनटाइम पर कोई प्रतिबंध नहीं है।

\n\n

Docker के साथ Azure Functions

\n\n

इसी तरह - Docker और C++ रनटाइम के साथ किसी भी इमेज का उपयोग करें। Azure custom handlers के माध्यम से कस्टम हैंडलर का समर्थन करता है।

\n

ब्लॉग

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