Serverless على Rust: أسرع من AWS Lambda مع بدء تشغيل بارد

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Serverless على Rust: عندما تكون كل ملي ثانية مهمة

\n\n

هل سبق لك أن انتظرت تشغيل AWS Lambda لمدة 3-4 ثوانٍ كاملة؟ إذا كنت قد عملت مع Python أو Node.js في بيئة serverless، فأنت تعرف هذا الألم — البدء البارد. تخيل الآن: وظيفتك تبدأ في غضون 50-100 ملي ثانية، وتستهلك ذاكرة أقل بعشر مرات، ووزن الملف الثنائي 5 ميغابايت فقط. مرحباً بك في عالم وظائف serverless على Rust.

\n\n

لم يقتحم Rust عالم serverless من فراغ. إنها لغة تمنحك التحكم في الذاكرة بدون جامع قمامة، وتُترجم إلى كود أصلي، وهي مثالية للحوسبة الطرفية. في PythonLib نحب Python، ولكن عندما يتعلق الأمر بالسرعة والتكلفة — خاصة تحت الأحمال العالية — يصبح Rust قاتلاً.

\n\n

في هذه المقالة سنتناول:

\n
    \n
  • لماذا Rust هي أفضل لغة لـ serverless (تنبيه: ليس فقط بسبب السرعة)
  • \n
  • كيفية كتابة ونشر AWS Lambda على Rust
  • \n
  • البدائل: Cloudflare Workers و Vercel Edge Functions
  • \n
  • معايير أداء البدء البارد Rust مقابل Python
  • \n
\n\n

هل أنت مستعد؟ لنبدأ.

\n\n

لماذا Rust لـ Serverless ليست ضجة، بل رياضيات

\n\n

لننتقل مباشرة إلى الأرقام. متوسط البدء البارد لـ AWS Lambda على Python هو 400-800 ملي ثانية (مع تحميل التبعيات). على Node.js — 200-400 ملي ثانية. على Rust — 30-100 ملي ثانية. لماذا هذا الفرق؟

\n\n
    \n
  • لا يوجد مفسر أو JIT. Rust يُترجم إلى كود آلي. Lambda ببساطة تحمّل الملف الثنائي — وينتهي الأمر.
  • \n
  • حجم ضئيل. حتى مع tokio و serde، وزن الملف الثنائي 5-15 ميغابايت (الملف المضغوط zip — 2-4 ميغابايت). Python مع numpy أو pandas — 50-200 ميغابايت.
  • \n
  • توفير في الذاكرة. وظائف Rust تستهلك 20-50 ميغابايت مقابل 128-256 ميغابايت لـ Python. على 10 ملايين طلب، الفرق في الفاتورة — مئات الدولارات.
  • \n
\n\n

لكن هناك فارق: الكتابة على Rust أصعب. تحتاج إلى فهم الملكية، الأعمار، و async. ومع ذلك، إذا كانت Lambda الخاصة بك هي خدمة مصغرة حرجة مع RPS > 1000، فإن Rust تؤتي ثمارها بسرعة.

\n\n

تطبيق عملي: كتابة AWS Lambda على Rust

\n\n

الخطوة 1: تثبيت الأدوات

\n\n

ستحتاج إلى:

\n
    \n
  • Rust (rustup)
  • \n
  • cargo-lambda — أداة للبناء لـ AWS
  • \n
  • Docker (للبناء تحت Linux، إذا كان لديك macOS/Windows)
  • \n
\n\n
# تثبيت cargo-lambda\ncargo install cargo-lambda\n\n# إنشاء مشروع جديد\ncargo lambda new my-rust-lambda\ncd my-rust-lambda
\n\n

الخطوة 2: كود الوظيفة

\n\n

افتح src/main.rs. القالب القياسي يحتوي بالفعل على هيكل أساسي. دعنا نكتب شيئاً مفيداً — API يستقبل JSON باسم ويعيد تحية.

\n\n
use lambda_runtime::{run, service_fn, Error, LambdaEvent};\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize)]\nstruct Request {\n    name: String,\n}\n\n#[derive(Serialize)]\nstruct Response {\n    message: String,\n    timestamp: u64,\n}\n\nasync fn handler(event: LambdaEvent<Request>) -> Result<Response, Error> {\n    let request = event.payload;\n    let timestamp = std::time::SystemTime::now()\n        .duration_since(std::time::UNIX_EPOCH)\n        .unwrap()\n        .as_secs();\n\n    Ok(Response {\n        message: format!("مرحباً، {}! أنت في PythonLib، لكننا على Rust 🦀", request.name),\n        timestamp,\n    })\n}\n\n#[tokio::main]\nasync fn main() -> Result<(), Error> {\n    tracing_subscriber::fmt()\n        .with_max_level(tracing::Level::INFO)\n        .init();\n\n    run(service_fn(handler)).await\n}
\n\n

الخطوة 3: البناء والنشر

\n\n
# البناء تحت Linux (لـ Lambda)\ncargo lambda build --release\n\n# النشر (تحتاج إلى بيانات اعتماد AWS)\ncargo lambda deploy --iam-role arn:aws:iam::YOUR_ACCOUNT:role/lambda-execution-role
\n\n

تم! الآن لديك Lambda على Rust تعمل أسرع بـ 5-10 مرات من نظيرتها في Python.

\n\

المدونات

توصيات الكتب