تطبيقاتنا كانت خاملة وندفع ثمنها: كيف أنقذتنا البنية غير الخادومية (Serverless) من جحيم الموارد المهدرة؟

يا جماعة الخير، خلوني أحكيلكم قصة صارت معي قبل كم سنة. كنا شغالين على مشروع ناشئ، تطبيق لمشاركة الفعاليات والمناسبات الاجتماعية. الفكرة كانت بسيطة وحلوة، والشباب متحمسين. جينا لمرحلة البنية التحتية، وعلى طول، زي ما تعلمنا، استأجرنا خادم افتراضي (Virtual Server) من أحد مزودي الخدمات السحابية الكبار.

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

المشكلة إنه الفاتورة الشهرية ما كانت تنام! كانت تجينا كاملة، سواء استخدمنا 100% من موارد الخادم أو 1% بس. كنت كل آخر شهر أمسك الفاتورة وأحكي لحالي: “يا زلمة، إحنا بندفع حق سيارة مرسيدس واقفة بالكراج 25 يوم بالشهر وبنستخدمها 5 أيام بس!”. شعور بالإحباط وهدر المصاري كان قاتل، خصوصاً لشركة ناشئة كل قرش بفرق معها. كنا في جحيم الموارد المهدرة، إلى أن سمعنا بمصطلح غيّر كل شيء: البنية غير الخادومية (Serverless).


ما هي البنية غير الخادومية (Serverless)؟ وهل هي حقاً “بلا خوادم”؟

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

تخيل معي هذا المثال البسيط: بدك تاكل بيتزا.

  • الطريقة التقليدية (مثل الخوادم العادية): أنت تبني مطبخ كامل في بيتك، تشتري فرن، عجّانة، ثلاجة، وتوّظف طباخ. سواء أكلت بيتزا كل يوم أو مرة بالشهر، أنت دافع تكاليف المطبخ والطباخ كاملة.
  • طريقة الـ Serverless: أنت تطلب البيتزا من مطعم دليفري. تدفع فقط ثمن البيتزا التي أكلتها. لا تفكر في إيجار المطعم، ولا راتب الطباخ، ولا فاتورة الكهرباء تبعت الفرن.

هذا بالضبط هو مبدأ الـ Serverless. أنت كمطور، تكتب “دوال” (Functions) صغيرة تؤدي مهمة محددة، وترفعها على منصة سحابية مثل AWS Lambda أو Azure Functions أو Google Cloud Functions. هذه المنصة هي التي تتكفل بتشغيل الكود عند الحاجة فقط، وأنت تدفع بالمللي ثانية على قدر التشغيل الفعلي. لما ما يكون في طلبات (requests) على الكود تبعك، أنت لا تدفع أي شيء. صفر طلبات = صفر تكلفة. شغلة مرتبة من الآخر!

كيف أنقذتنا “السيرفرلس” من جحيم الفواتير؟

لما انتقلنا لتطبيقنا من الخادم التقليدي إلى بنية Serverless، التغيير كان جذرياً. خلوني ألخصلكم الفوائد اللي لمسناها بشكل مباشر:

1. الدفع مقابل الاستخدام الفعلي (Pay-per-use)

هذه كانت أكبر نقلة نوعية. فاتورتنا الشهرية انخفضت بنسبة تقارب 80-90%. صرنا ندفع فقط عندما يقوم مستخدم فعلياً بإنشاء مناسبة أو تصفح الفعاليات. في أوقات الخمول، مثل منتصف الليل في أيام الأسبوع، كانت التكلفة تقترب من الصفر. معظم المنصات السحابية تقدم أيضاً “طبقة مجانية” (Free Tier) سخية جداً، تسمح لك بتشغيل مليون طلب شهرياً مجاناً. هذا يعني أن الكثير من المشاريع الصغيرة أو الجانبية يمكن أن تعمل مجاناً تماماً.

2. التوسع التلقائي (Automatic Scaling)

هل تذكرون خوفنا من “الضغط” المفاجئ على الخادم؟ مع Serverless، هذا الخوف اختفى. المنصة تتكفل تلقائياً بتشغيل نسخ متعددة من الكود الخاص بك بشكل متوازي للتعامل مع أي عدد من الطلبات. لو أتاك 10 طلبات في نفس الثانية، المنصة تشغل 10 نسخ. لو أتاك 1000 طلب، تشغل 1000 نسخة. كل هذا يحدث تلقائياً بدون أي تدخل منك. لا داعي للقلق بشأن “انهيار الخادم” وقت الذروة.

3. التركيز على الكود، لا على البنية التحتية

“خلّينا نركز في الكود وبس!”

هذه الجملة أصبحت شعارنا في الفريق. قبل الـ Serverless، كنت أقضي ساعات في تحديث نظام التشغيل على الخادم، وتثبيت التحديثات الأمنية (Patches)، وضبط إعدادات الـ Firewall، ومراقبة استهلاك الذاكرة والمعالج. مع الـ Serverless، كل هذا العبء زال. مزود الخدمة السحابية هو المسؤول عن كل هذه الأمور. نحن كمطورين، أصبح كل همنا هو كتابة منطق العمل (Business Logic) الذي يخدم المستخدم ويضيف قيمة للمنتج.


مثال عملي: من خادم Express.js إلى دالة AWS Lambda

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

الطريقة التقليدية: خادم Express.js على سيرفر EC2

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


// index.js
const express = require('express');
const app = express();
const port = 3000;

// Endpoint to say hello
app.get('/hello', (req, res) => {
  res.json({ message: 'أهلاً وسهلاً من خادم Express!' });
});

app.listen(port, () => {
  console.log(`الخادم يعمل على المنفذ ${port}`);
});

هذا الكود يجب أن يبقى يعمل 24/7 على خادم استأجرته، وتدفع ثمنه سواء كان هناك من يزور الرابط /hello أم لا.

طريقة Serverless: دالة AWS Lambda

هنا، أنت تكتب فقط الدالة التي ستنفذ عند استدعاء الـ Endpoint. لا يوجد app.listen ولا إدارة للمنافذ.


// handler.js

// The handler function
exports.sayHello = async (event) => {
  // الكود هنا لا يعمل إلا عند الطلب
  console.log("تم استدعاء الدالة!");

  // The response we want to send back
  const response = {
    statusCode: 200,
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      message: 'أهلاً وسهلاً من دالة Lambda غير الخادومية!',
    }),
  };

  return response;
};

لاحظ الفرق؟ الكود أبسط بكثير ومركز على المهمة فقط. أنت تقوم بربط هذه الدالة مع خدمة مثل Amazon API Gateway، والتي تعطيك رابطاً عاماً. عند زيارة هذا الرابط، تقوم API Gateway باستدعاء دالة Lambda، تنفيذ الكود، وإرجاع النتيجة. إذا لم يزر أحد الرابط لمدة ساعة، فإن الكود لا يعمل أبداً، وأنت لا تدفع شيئاً.


نصائح من “أبو عمر”: متى تستخدم Serverless ومتى تبتعد عنها؟

رغم كل حبي لهذه التقنية، هي ليست الحل السحري لكل المشاكل. من خبرتي، هذه بعض الحالات التي تتألق فيها الـ Serverless، وبعض الحالات التي يجب أن تفكر فيها مرتين.

حالات الاستخدام المثالية لـ Serverless:

  • الواجهات البرمجية (APIs): خصوصاً تلك التي تعاني من تذبذب في حركة المرور مثل تطبيقنا.
  • مهام المعالجة في الخلفية (Background Jobs): مثلاً، عندما يرفع مستخدم صورة، يمكن لدالة Lambda أن تعمل تلقائياً لتغيير حجمها وإضافة علامة مائية.
  • أتمتة مهام البنية التحتية: تشغيل سكربتات دورية لعمل نسخ احتياطي أو تنظيف قواعد البيانات.
  • الروبوتات (Chatbots) وتطبيقات إنترنت الأشياء (IoT): هذه التطبيقات غالباً ما تكون مدفوعة بالأحداث (event-driven)، وهو ما تتفوق فيه بنية Serverless.

متى يجب أن تفكر مرتين؟ (محاذير مهمة)

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

الخلاصة: هل السيرفرلس هي المستقبل؟ 🚀

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

هل هي الحل لكل شيء؟ بالطبع لا. ولكنها أداة قوية جداً يجب أن تكون في جعبة كل مطور ومسؤول تقني اليوم.

نصيحتي الأخيرة لك: لا تخف من تجربتها. ابدأ بمشروع جانبي صغير أو بميزة واحدة داخل تطبيقك الحالي. قم ببناء واجهة برمجية بسيطة باستخدام AWS Lambda و API Gateway. جرّبها يا صاحبي، وقارن التكلفة والجهد بنفسك. أنا أضمن لك أنك ستنبهر بالنتائج، وربما ستنقذ نفسك أيضاً من جحيم كنت تظن أنه لا مفر منه.

أبو عمر

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

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

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

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

آخر المدونات

الشبكات والـ APIs

واجهاتنا كانت تطلب بيانات لا تحتاجها: كيف أنقذنا GraphQL من جحيم الاستدعاءات المتعددة والبيانات الزائدة؟

أشارككم قصة حقيقية من تجربتي كمبرمج، وكيف عانينا من مشاكل الأداء بسبب واجهات REST API التقليدية. سأشرح لكم بالتفصيل كيف كانت تقنية GraphQL هي طوق...

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

مقابلاتنا التقنية كانت يانصيباً: كيف أنقذنا ‘إطار المقابلات المنظم’ من جحيم التحيز والتقييمات غير العادلة؟

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

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

طلبات المستخدمين كانت تموت ببطء: كيف أنقذتنا ‘قوائم انتظار الرسائل’ من جحيم العمليات المتزامنة؟

أشارككم قصة حقيقية من قلب المعركة التقنية، كيف أن تطبيقنا كاد أن ينهار تحت ضغط المستخدمين، وكيف كانت "قوائم انتظار الرسائل" (Message Queues) هي طوق...

24 أبريل، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

كان الربط مع البنوك كابوساً: كيف أنقذتنا ‘الخدمات المصرفية المفتوحة’ (Open Banking) من جحيم التكاملات المعقدة؟

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

24 أبريل، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

بنيتنا التحتية كانت قصراً من ورق: كيف أنقذنا Terraform من جحيم التغييرات اليدوية

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

24 أبريل، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

كانت مساراتنا المهنية طريقاً مسدوداً: كيف أنقذتنا ‘مصفوفات الكفاءة’ من جحيم الركود الوظيفي؟

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

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

واجهاتنا كانت تتغير بشكل عشوائي: كيف أنقذنا ‘اختبار الانحدار البصري’ من جحيم الأخطاء المرئية؟

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف أنقذنا مشروعنا من أخطاء الواجهة الأمامية الكارثية باستخدام اختبار الانحدار البصري (Visual Regression Testing). مقالة عملية مع...

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