ميكروسيرفيسات C++: دليل البداية في 2024
\n\nعندما تسمع كلمة "ميكروسيرفيسات"، يتبادر إلى ذهنك عادةً Go أو Java أو Python. لكن C++؟ يبدو أن هذه اللغة منخفضة المستوى ومعقدة وغير مناسبة للويب. لكن هذا الاعتقاد خاطئ. في السنوات الأخيرة، تشهد C++ ولادة جديدة في مجال الباك إند: المعايير الحديثة (C++17/20)، والأطر خفيفة الوزن، والأدوات الناضجة تجعلها خيارًا ممتازًا للميكروسيرفيسات عالية الأداء. إذا كان مشروعك يتطلب استهلاكًا منخفضًا للذاكرة، أو أقصى أداء، أو العمل على معماريات ARM/MIPS، فإن C++ قد تكون ورقتك الرابحة.
\n\nفي هذا المقال، سأوضح لك من أين تبدأ حقًا: سنختار إطار العمل، ونكتب خدمة HTTP بسيطة، ونضيف gRPC، ونُحزم كل شيء في Docker. لا ماء ولا حشو — فقط كود وتطبيق عملي.
\n\n\n\n
لماذا استخدام C++ للميكروسيرفيسات ليس جنونًا؟
\n\nالحجة الرئيسية لمعارضي C++: "الكتابة طويلة وسهولة ارتكاب الأخطاء". لكن C++ الحديثة مع المؤشرات الذكية، وحاويات STL، و RAII تسمح بالكتابة بسرعة تقريبًا مثل Go، مع إعطائك تحكمًا كاملاً في الذاكرة. المزايا واضحة:
\n\n- \n
- السرعة — C++ أسرع من Java/Python بمقدار 2-10 مرات في عمليات الإدخال/الإخراج والحسابات. \n
- استهلاك الذاكرة — الميكروسيرفيس النموذجي على C++ يستهلك 5-15 ميجابايت مقارنة بـ 50-150 ميجابايت على Java. \n
- غياب GC — لا توقف بسبب جامع القمامة، زمن استجابة قابل للتنبؤ. \n
- النظام البيئي — gRPC، Boost، nlohmann/json، Crow، Drogon — كل شيء يعمل فورًا. \n
هناك أيضًا عيوب: مترجم أكثر صرامة، وقت بناء أطول، تصحيح أخطاء أكثر تعقيدًا. لكن إذا كنت بحاجة إلى أداء على مستوى الأنظمة المالية، أو خوادم الألعاب، أو إنترنت الأشياء — فإن C++ هي الخيار الأمثل.
\n\n\n\n
اختيار إطار العمل: Crow vs Drogon vs Pistache
\n\nلبداية سريعة، لا تحتاج إلى كتابة خادم HTTP من الصفر على المقابس (sockets). هناك ثلاثة خيارات شائعة:
\n\n1. Crow (خفيف الوزن، header-only)
\nمثالي للميكروسيرفيسات التي تحتوي على 5-10 نقاط نهاية. فقط قم بتضمين ملف رأس واحد وستكون جاهزًا. العيب: لا يدعم HTTP/2، توجيه ضعيف.
\n\n2. Drogon (متكامل الميزات)
\nأفضل خيار للمشاريع الجادة: HTTP/1.1 و HTTP/2، WebSocket، AOP، العمل مع قواعد البيانات، ORM. Drogon مستوحى من ASP.NET و Django — يمكنه حتى إنشاء JSON تلقائيًا من النماذج.
\n\n3. Pistache (حديث لكن غير ناضج)
\nبديل مثير للاهتمام، لكنه لا يزال غير مستقر للإنتاج.
\n\nأنصح بالبدء بـ Crow — فهو بسيط ويسمح لك بالحصول على REST API يعمل في 10 دقائق. أما للمشاريع الجادة، فاتجه نحو Drogon.
\n\n\n\n
تطبيق عملي: كتابة ميكروسيرفيس على C++ باستخدام Crow
\n\nسننشئ خدمة بسيطة تستقبل JSON باسم المستخدم وتُرجع تحية. هذا هو "Hello World" الكلاسيكي، لكن بأسلوب الميكروسيرفيسات.
\n\nالخطوة 1: تثبيت التبعيات
\nستحتاج إلى CMake ومترجم يدعم C++17 (gcc 9+، clang 10+). Crow هو header-only، لذا فقط قم بنسخ الملف crow_all.h من المستودع.
# تحميل Crow\nwget https://github.com/CrowCpp/Crow/releases/download/v1.1.0/crow_all.h\n\n\nالخطوة 2: كود الخدمة
\n\n// main.cpp\n#include "crow_all.h"\n#include <iostream>\n#include <string>\n\nint main() {\n crow::SimpleApp app;\n\n // GET /hello — فحص الصحة\n CROW_ROUTE(app, "/hello")\n ([](){\n return crow::response(200, "Hello, World!");\n });\n\n // POST /greet — يستقبل JSON {"name": "Alice"}\n CROW_ROUTE(app, "/greet").methods(crow::HTTPMethod::POST)\n ([](const crow::request& req){\n auto body = crow::json::load(req.body);\n if (!body || !body.has("name")) {\n return crow::response(400, "Bad Request: missing 'name'");\n }\n std::string name = body["name"].s();\n crow::json::wvalue result;\n result