خوادمي كانت تلتهم ميزانيتي: كيف أنقذتني الحوسبة “بدون خوادم” (Serverless) من فواتير السحابة المتضخمة؟

“يا زلمة، شو هالفاتورة؟”: قصة مشروع جانبي كاد أن يفلسني

قبل عدة سنوات، كنت متحمساً جداً لإطلاق مشروع جانبي بسيط: أداة ويب تساعد الطلاب في تنظيم جداولهم الدراسية ومواعيد امتحاناتهم. الفكرة كانت أن يكون عليها ضغط كبير في بداية الفصول الدراسية وفترات الامتحانات، وتكون شبه ميتة خلال العطل والإجازات.

كأي مبرمج تقليدي في ذلك الوقت، توجهت مباشرة إلى AWS وقمت بحجز خادم EC2 متوسط الحجم. قلت في نفسي: “هذا الخادم سيتحمل الضغط وقت الذروة، وباقي الوقت يرتاح”. قمت بتنصيب كل شيء: نظام التشغيل، قاعدة البيانات، خادم الويب، ونشرت تطبيقي. كل شيء كان يعمل على ما يرام.

مر الشهر الأول، والثاني، والثالث. كان استخدام التطبيق متقطعاً كما توقعت. لكن الصدمة كانت عندما أنظر إلى فاتورة AWS الشهرية. كانت الفاتورة ثابتة تقريباً، سواء استخدم التطبيق ألف طالب في اليوم أو طالب واحد فقط! كنت أدفع ثمن الخادم كاملاً، 24 ساعة في اليوم، 7 أيام في الأسبوع. كنت أرى المال يُحرق أمامي وأنا أدفع مقابل “هواء” أو بكلمات أدق، مقابل موارد حاسوبية خاملة. وصلت لمرحلة قلت فيها لصديقي: “يا زلمة، الخادم هذا قاعد بياكل من ميزانيتي أكل وهو نايم!”. شعرت أن هناك خطأ جوهرياً في طريقتي بالتعامل مع البنية التحتية. ومن هنا بدأت رحلتي مع عالم الـ Serverless.

ما هي مشكلة الخوادم التقليدية؟ (أو ليش الفاتورة كانت “بتولّع”)

القصة التي مررت بها ليست فريدة من نوعها، بل هي السيناريو الافتراضي لمعظم التطبيقات التي تبدأ صغيرة. المشكلة تكمن في نموذج “التزويد المسبق” (Provisioned Infrastructure). لفهمها ببساطة، تخيل أنك تريد الذهاب إلى عملك الذي يبعد 10 كيلومترات.

في العالم التقليدي، أنت تستأجر حافلة ضخمة وتدفع إيجارها الشهري كاملاً، سواء ركبتها لوحدك، أو ركب معك 50 شخصاً، أو حتى لو لم تستخدمها أبداً في يوم من الأيام. الحافلة محجوزة لك، وتكلفتها ثابتة.

هذا بالضبط ما يحدث مع الخوادم التقليدية (سواء كانت خوادم فيزيائية أو افتراضية مثل EC2 و Azure VMs). أنت تدفع مقابل وحدة المعالجة المركزية (CPU)، والذاكرة (RAM)، ومساحة التخزين، على مدار الساعة، بغض النظر عما إذا كان تطبيقك يتلقى طلبات أم لا. هذا يقودنا إلى مشكلتين رئيسيتين:

  • التزويد المفرط (Over-provisioning): خوفاً من تعطل التطبيق وقت الذروة، نقوم بحجز خادم أكبر من حاجتنا الفعلية لمعظم الوقت. النتيجة؟ 80% من موارد الخادم تكون خاملة، لكننا ندفع ثمنها كاملاً.
  • التزويد الناقص (Under-provisioning): في محاولة لتوفير المال، نقوم بحجز خادم صغير. يعمل بشكل جيد في الأيام العادية، ولكنه ينهار تماماً عند أول زيادة مفاجئة في عدد المستخدمين، مما يؤدي إلى تجربة سيئة وربما خسارة المستخدمين.

ناهيك عن “وجعة الراس” الإضافية المتمثلة في إدارة هذه الخوادم: تحديث نظام التشغيل، تطبيق الرقع الأمنية، مراقبة الأداء… كل هذا وقت وجهد كان من الممكن استثماره في تطوير التطبيق نفسه.

الحل السحري: الحوسبة بدون خوادم (Serverless)

هنا يأتي دور الحوسبة بدون خوادم أو “السيرفرلس”. بدايةً، الاسم مضلل قليلاً. بالطبع هناك خوادم! لكن الفرق الجوهري هو: أنت لم تعد مسؤولاً عن إدارتها أو الدفع لها وهي خاملة.

في عالم الـ Serverless، مزود الخدمة السحابية (مثل AWS, Azure, Google Cloud) هو من يدير هذه الخوادم. أنت كمطور، كل ما عليك فعله هو كتابة الكود الخاص بك على شكل “دوال” (Functions).

كيف تعمل “السيرفرلس”؟ ببساطة شديدة

بدلاً من تطبيق ضخم يعمل على خادم واحد، يتم تقسيم منطق تطبيقك إلى دوال صغيرة ومستقلة. كل دالة مسؤولة عن مهمة واحدة محددة (مثل تسجيل مستخدم جديد، جلب بيانات منتج، معالجة صورة مرفوعة).

  1. الكود ينتظر: دوالك تكون في حالة خمول، لا تستهلك أي موارد ولا تكلفك أي شيء.
  2. يحدث “حدث” (Event): يقوم المستخدم بطلب صفحة ويب (API Call)، أو يرفع ملفاً (File Upload)، أو يتم إضافة سجل جديد في قاعدة البيانات (DB Trigger). هذا “الحدث” هو شرارة البداية.
  3. الدالة تعمل: يقوم مزود الخدمة السحابية فوراً بتشغيل حاوية (container) صغيرة، يضع الكود الخاص بدالتك فيها، وينفذها.
  4. الدالة تتوقف: بمجرد انتهاء الدالة من عملها وإرجاع النتيجة، يتم إيقاف الحاوية فوراً.

والجزء الأجمل؟ أنت تدفع فقط مقابل عدد الطلبات التي تلقتها دالتك، والمدة الزمنية التي استغرقتها في التنفيذ، مقاسة بالمللي ثانية! إذا لم يستخدم أحد تطبيقك طوال الليل، فإن فاتورتك لذلك الوقت ستكون صفراً. هذا هو نموذج “الدفع حسب الاستخدام” (Pay-as-you-go) في أبهى صوره.

من الخادم الكامل إلى “اللامخدمي”: مثال عملي

دعنا نأخذ مثالاً بسيطاً لتحويل واجهة برمجية (API) من خادم Express.js تقليدي إلى دالة AWS Lambda (أشهر خدمات الـ Serverless).

السيناريو: واجهة برمجية بسيطة

لدينا نقطة نهاية (endpoint) بسيطة /api/hello، عند طلبها، ترجع رسالة ترحيب مع الوقت الحالي.

الكود القديم (على خادم Express.js يعمل 24/7)

هذا الكود يحتاج إلى خادم يعمل باستمرار لتلقي الطلبات.


const express = require('express');
const app = express();
const port = 3000;

// Endpoint to handle GET requests
app.get('/api/hello', (req, res) => {
  const response = {
    message: 'مرحباً من خادم Express!',
    timestamp: new Date().toISOString()
  };
  res.json(response);
});

// The server is always listening
app.listen(port, () => {
  console.log(`Server running on http://localhost:${port}`);
});

التكلفة: تكلفة الخادم الافتراضي كاملة (مثلاً 20$ شهرياً أو أكثر)، بغض النظر عن عدد الطلبات.

الكود الجديد (باستخدام AWS Lambda)

هنا، نكتب فقط المنطق الذي يهمنا داخل دالة واحدة. لا يوجد خادم للاستماع أو إدارة.


// This is the entire file: index.js
exports.handler = async (event) => {
  // The logic is inside the handler
  const response = {
    statusCode: 200,
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      message: 'مرحباً من عالم الـ Serverless (AWS Lambda)!',
      timestamp: new Date().toISOString()
    }),
  };
  
  // Return the response
  return response;
};

نقوم بربط هذه الدالة بخدمة تسمى Amazon API Gateway، والتي توفر لنا رابط URL عام. عند طلب هذا الرابط، تقوم API Gateway بتشغيل دالة Lambda الخاصة بنا تلقائياً.

التكلفة: لنفترض أن الدالة تستغرق 100 مللي ثانية للتنفيذ. مع الطبقة المجانية السخية جداً لـ AWS Lambda (مليون طلب مجاني شهرياً)، فإن تشغيل هذه الدالة مليون مرة في الشهر سيكلفك… صفر دولار! وحتى بعد تجاوز الطبقة المجانية، التكلفة ستكون ضئيلة جداً مقارنة بتكلفة خادم يعمل 24/7.

مش بس مصاري: فوائد أخرى للحوسبة بدون خوادم

صحيح أن توفير التكاليف هو المحفز الأكبر، لكن فوائد الـ Serverless تتجاوزه بكثير:

  • التوسع التلقائي (Automatic Scaling): هل زار تطبيقك 10 مستخدمين في نفس الثانية؟ سيقوم المزود بتشغيل 10 نسخ من دالتك بالتوازي. هل زاره 10,000؟ سيتم تشغيل 10,000 نسخة. كل هذا يحدث تلقائياً وبدون أي تدخل منك. لا داعي للقلق بشأن موازنة الأحمال (Load Balancing) أو إضافة خوادم جديدة.
  • تقليل العبء التشغيلي (Reduced Operational Overhead): وداعاً لتحديثات نظام التشغيل، وإدارة الشبكات، وتأمين الخوادم. يمكنك الآن أن “تركّز على الكود وبس”، وهذا يسرّع من وتيرة الابتكار بشكل لا يصدق.
  • تسريع دورات التطوير (Faster Development Cycles): يستطيع المطورون بناء ونشر الميزات الجديدة بشكل أسرع لأنهم لا يحتاجون إلى انتظار فريق البنية التحتية لتجهيز الخوادم. كل ما يحتاجونه هو كتابة دالة ونشرها.

لكن انتبه… “السيرفرلس” مش حل لكل إشي

لكي أكون منصفاً، الـ Serverless ليس الدواء الشافي لكل الأمراض التقنية. هناك حالات قد لا يكون فيها الخيار الأمثل:

  • المهام طويلة الأمد: معظم منصات الدوال لها حد أقصى لزمن التنفيذ (مثلاً 15 دقيقة في AWS Lambda). إذا كان لديك مهمة تحتاج ساعات (مثل تدريب نموذج تعلم آلة ضخم)، فالخادم التقليدي قد يكون أفضل.
  • البداية الباردة (Cold Start): عند استدعاء دالة لم يتم استخدامها منذ فترة، قد يكون هناك تأخير بسيط (من أجزاء من الثانية إلى بضع ثوانٍ) حتى يتم تجهيز الحاوية وتشغيل الكود. هذا قد لا يكون مقبولاً في التطبيقات شديدة الحساسية لزمن الاستجابة.
  • التقييد بالمزوّد (Vendor Lock-in): عندما تبني تطبيقك باستخدام خدمات Serverless من مزود معين (مثل AWS Lambda, DynamoDB, S3)، قد يصبح من الصعب جداً نقل تطبيقك إلى مزود آخر في المستقبل.
  • التعقيد في المراقبة والتصحيح: تصحيح الأخطاء في نظام موزع يتكون من عشرات أو مئات الدوال الصغيرة يمكن أن يكون أكثر تعقيداً من تصحيح الأخطاء في تطبيق متجانس (Monolith) على خادم واحد.

نصائح عملية من “ختيار” قضى عمره في الكود

بعد سنوات من العمل مع هذه التقنيات، اسمحوا لي أن أقدم لكم بعض النصائح العملية التي تعلمتها بالطريقة الصعبة:

  1. ابدأ صغيراً: لا تحاول تحويل تطبيقك الضخم بالكامل إلى Serverless دفعة واحدة. اختر خدمة صغيرة غير حرجة، أو ميزة جديدة، وقم ببنائها باستخدام هذا النموذج. تعلم، ارتكب الأخطاء على نطاق صغير، ثم توسع.
  2. افهم نموذج التسعير جيداً: قبل أن تبدأ، اقضِ بعض الوقت في قراءة وفهم كيفية حساب التكلفة. استخدم حاسبات الأسعار التي يوفرها المزود السحابي لتقدير التكاليف المتوقعة.
  3. استخدم البنية التحتية ككود (IaC): هذا مهم جداً. لا تقم بإعداد دوالك وخدماتك عبر النقر على الأزرار في واجهة المستخدم الرسومية. استخدم أدوات مثل AWS SAM, Serverless Framework, أو Terraform لتعريف بنيتك التحتية في ملفات كود. هذا يجعل الإعدادات قابلة للتكرار، التتبع، والتعديل بسهولة. “بلاش شغل الكبسات على الكونسول”.
  4. راقب تكاليفك بصرامة (FinOps): من السهل أن تفقد السيطرة على التكاليف في السحابة. قم بإعداد تنبيهات الفوترة (Billing Alerts) لتصلك إشعارات إذا تجاوزت ميزانية معينة. استخدم أدوات تحليل التكاليف (مثل AWS Cost Explorer) بانتظام لتعرف أين تذهب أموالك.

الخلاصة: هل تستحق “السيرفرلس” كل هذه الضجة؟

بالتأكيد. بالنسبة لي، لم تكن الحوسبة بدون خوادم مجرد طريقة لتوفير المال، بل كانت نقلة نوعية في التفكير. لقد حررتني من قيود إدارة الخوادم وسمحت لي بالتركيز على ما أحب: كتابة كود يحل مشاكل حقيقية.

هي ليست الحل لكل شيء، ولكنها أداة قوية بشكل لا يصدق في صندوق أدوات أي مطور أو مهندس برمجيات حديث، خاصة للتطبيقات ذات الاستخدام المتقلب، والواجهات البرمجية، ومهام التشغيل الآلي، ومعالجة البيانات المستندة إلى الأحداث.

نصيحتي الأخيرة لك: لا تخف من التجربة. السحابة تمنحنا أدوات مذهلة، ومهمتنا كمطورين هي أن نتعلم كيف نستخدمها بحكمة. أسوأ ما يمكن أن يحدث هو أن تتعلم شيئاً جديداً. يلا، شدوا حيلكم! 💪

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

تسويق رقمي

محتواي كان شبحاً في محركات البحث: كيف أنقذتني البيانات المنظمة (Structured Data) من جحيم الغموض الرقمي؟

أشارككم قصتي مع موقعي الذي كان خفياً تماماً في جوجل، وكيف استطعت إخراجه للنور باستخدام البيانات المنظمة (Structured Data) و Schema.org. هذه ليست مجرد مقالة...

28 مارس، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

سيرتي الذاتية كانت مقبرة للمهارات: كيف أنقذني ‘منهج الإنجاز’ من الرفض التلقائي؟

أشارككم تجربتي يا جماعة الخير، كيف تحولت سيرتي الذاتية من قائمة مهام مملة تتجاهلها الشركات، إلى قصة نجاح وإنجازات لفتت انتباه أفضل مديري التوظيف. اكتشفوا...

28 مارس، 2026 قراءة المزيد
التوسع والأداء العالي والأحمال

قاعدة بياناتي كانت تختنق مع كل طلب: كيف أنقذتني ‘استراتيجية التخزين المؤقت’ (Caching) من جحيم الاستجابة البطيئة؟

هل تعاني من بطء استجابة تطبيقاتك وقاعدة بياناتك تئن تحت الضغط؟ أشارككم قصتي الواقعية مع تطبيق كان على وشك الانهيار، وكيف كانت استراتيجيات التخزين المؤقت...

28 مارس، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

تطبيقي كان جزيرة معزولة: كيف أنقذتني واجهات برمجة التطبيقات المصرفية المفتوحة (Open Banking APIs)؟

أشارككم قصتي، قصة أبو عمر، وكيف تحول تطبيقي المالي من جزيرة معزولة تعتمد على الإدخال اليدوي الممل، إلى أداة ذكية متصلة بفضل واجهات برمجة التطبيقات...

28 مارس، 2026 قراءة المزيد
اختبارات الاداء والجودة

تغطية اختباراتي 100% كانت مجرد وهم: كيف كشف لي ‘اختبار الطفرات’ (Mutation Testing) عن نقاط الضعف الخفية في جودة الكود؟

كنت أظن أن وصول تغطية الاختبارات (Test Coverage) إلى 100% هو قمة جودة البرمجيات، حتى اكتشفت "اختبار الطفرات" (Mutation Testing). في هذه المقالة، أشارككم قصتي...

28 مارس، 2026 قراءة المزيد
البودكاست