परिचय: सर्वरलेस में C++ क्यों?
सर्वरलेस-कंप्यूटिंग की दुनिया मुख्य रूप से JavaScript (Node.js), Python या Java से जुड़ी है। हालांकि, प्रदर्शन और मेमोरी खपत के लिए महत्वपूर्ण कार्यों के लिए, C++ एक आदर्श विकल्प बन जाता है। AWS Lambda Native Runtime के माध्यम से C++ का समर्थन करता है, जो न्यूनतम ओवरहेड के साथ बाइनरी फ़ाइलों को चलाने की अनुमति देता है।
इस लेख में, हम AWS Lambda पर C++ फ़ंक्शन लिखने, कंपाइल करने और डिप्लॉय करने का तरीका समझेंगे। आप सर्वरलेस आर्किटेक्चर में C++ के लाभों, पर्यावरण सेटअप और कोल्ड स्टार्ट ऑप्टिमाइज़ेशन के बारे में जानेंगे।
1. Python और Node.js की तुलना में C++ के लाभ
प्रदर्शन और कोल्ड स्टार्ट
इंटरप्रेटेड भाषाओं का मुख्य दोष कोल्ड स्टार्ट के दौरान विलंब है। Python के साथ Lambda कंटेनर 200-500 ms में इनिशियलाइज़ हो सकता है, जबकि C++ के साथ यह 50 ms से कम होता है। यह उच्च latency आवश्यकताओं वाले API के लिए महत्वपूर्ण है।
- कम मेमोरी खपत: C++ बाइनरी ~1-3 MB लेती है जबकि Node.js डिपेंडेंसी के साथ 20+ MB लेता है।
- सिस्टम संसाधनों तक सीधी पहुंच: VM की परत के बिना सॉकेट, फ़ाइलों और मेमोरी के साथ काम करना।
- बचत: तेज़ निष्पादन के कारण, आप मिलीसेकंड के काम के लिए कम भुगतान करते हैं।
2. AWS Lambda पर C++ के लिए पर्यावरण सेटअप
Lambda के लिए C++ कोड कंपाइल करने के लिए Amazon Linux 2 (या संगत इमेज) का उपयोग करना आवश्यक है। अनुशंसित तरीका Lambda की आधिकारिक इमेज के साथ Docker कंटेनर है।
आवश्यकताएँ
- CMake ≥ 3.15
- GCC 7.3+ या Clang 7+
- C++ के लिए AWS SDK (S3/DynamoDB के साथ काम करने के लिए वैकल्पिक)
- Docker (Lambda के समान वातावरण में बिल्ड करने के लिए)
बिल्ड के लिए बेसिक Dockerfile
FROM public.ecr.aws/lambda/provided:al2
# बिल्ड टूल्स इंस्टॉल करनाRUN yum install -y gcc-c++ cmake3 make
# सोर्स कोड कॉपी करेंCOPY . /codeWORKDIR /code/build
# स्टैटिक बाइनरी बनानाRUN cmake3 .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_FLAGS="-static-libstdc++ -static-libgcc" \ && make -j$(nproc)
# परिणाम को Lambda डायरेक्टरी में कॉपी करेंRUN cp handler /var/task/bootstrapCMD ["handler"]3. C++ में Lambda फ़ंक्शन लिखना
Python के विपरीत, जहां handler एक फ़ंक्शन है, C++ में हम एक एक्ज़ीक्यूटेबल फ़ाइल बनाते हैं जिसे Lambda एक प्रक्रिया के रूप में चलाता है। इनपुट डेटा stdin के माध्यम से भेजा जाता है, और परिणाम stdout में आउटपुट होता है।
सरल उदाहरण: JSON प्रोसेसिंग
#include <iostream>#include <string>#include <nlohmann/json.hpp> // JSON के साथ काम करने के लिए लाइब्रेरी
using json = nlohmann::json;
int main() { // पूरा stdin पढ़ें (Lambda से इनपुट JSON) std::string input; std::getline(std::cin, input);
try { auto event = json::parse(input);
// पैरामीटर निकालें std::string name = event.value("name", "World"); int number = event.value("number", 0);
// रिस्पॉन्स बनाएं json response = { {"message", "Hello, " + name + "!"}, {"computed", number * 2}, {"language", "C++"} };
std::cout << response.dump() << std::endl; return 0; } catch (const std::exception& e) { std::cerr << "{\\"error\\":\\"" << e.what() << "\\"}" << std::endl; return 1; }}CMakeLists.txt की संरचना
cmake_minimum_required(VERSION 3.15)project(lambda-handler)
set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)
# पोर्टेबिलिटी के लिए स्टैटिक लिंकिंगset(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc")
# nlohmann/json शामिल करें (vcpkg या fetch)find_package(nlohmann_json REQUIRED)
add_executable(handler main.cpp)target_link_librar