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

“يا زلمة، السيرفر قاعد بحرق مصاري على الفاضي!”

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

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

كنا ندفع ثمن القوة الكاملة للخادم على مدار الساعة، 24 ساعة في اليوم، 7 أيام في الأسبوع. سواء عالج صورة واحدة أو ألف صورة، التكلفة الشهرية ثابتة. شعرت وكأنني أمتلك سيارة سباق فارهة وأدفع تأمينها وصيانتها وبنزينها بالكامل، فقط لأستخدمها في مشوار واحد قصير كل يوم. كان هذا هو “جحيم التكاليف غير المبررة”، شعور بأنك تدفع مقابل لا شيء، وهذا ما يقتل روح أي مشروع ناشئ.

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

ما هي الحوسبة بدون خوادم (Serverless)؟ ولماذا الاسم خادع؟

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

فكر فيها بهذه الطريقة:

  • النموذج التقليدي (امتلاك سيارة): تشتري خادماً (أو تستأجره شهرياً)، وتكون مسؤولاً عن كل شيء: تحديث نظام التشغيل، تطبيق الرقع الأمنية، مراقبة الأداء، التأكد من أنه يعمل طوال الوقت، وتوسيع نطاقه (Scaling) عند زيادة الضغط. أنت تدفع ثمن السيارة سواء كنت تقودها أم كانت متوقفة في الكراج.
  • نموذج Serverless (استخدام سيارة أجرة/أوبر): أنت فقط تكتب “وجهتك” (الكود الخاص بك). عندما تحتاج إلى تنفيذ هذا الكود، يقوم مزود الخدمة السحابية (مثل AWS, Azure, Google Cloud) بتوفير “سيارة” (بيئة تشغيل) فوراً، وتنقلك إلى وجهتك (تنفذ الكود)، وتدفع فقط مقابل هذه الرحلة المحددة. بمجرد انتهاء الرحلة، لا تعود السيارة ملكك ولا تدفع أي شيء إضافي.

هذا النموذج يُعرف أيضاً بـ “الوظائف كخدمة” (Functions as a Service – FaaS)، حيث أن وحدة العمل الأساسية هي “وظيفة” (Function) برمجية صغيرة ومستقلة، يتم تشغيلها استجابة لحدث معين (Event Trigger).

النموذج التقليدي مقابل نموذج الحوسبة بدون خوادم

النموذج التقليدي: “الوحش الجائع”

في حالتنا، كان لدينا خادم EC2 على AWS. هذا يعني أننا كنا مسؤولين عن:

  • اختيار حجم الخادم (t3.large, m5.xlarge, …).
  • تثبيت نظام التشغيل والبرمجيات اللازمة (Node.js, ImageMagick, …).
  • كتابة شيفرة تعمل بشكل دائم (long-running process) تنتظر المهام الجديدة.
  • تأمين الخادم ضد الاختراقات.
  • الدفع مقابل كل ساعة يعمل فيها الخادم، بغض النظر عن حجم العمل الفعلي.

التكلفة كانت ثابتة ومرتفعة، والعبء التشغيلي (Operational Overhead) كان كبيراً.

نموذج الحوسبة بدون خوادم: “العامل تحت الطلب”

عندما انتقلنا إلى AWS Lambda (وهي خدمة FaaS من أمازون)، تغير كل شيء:

  • كتبنا الكود الخاص بمعالجة الصور داخل “وظيفة” Lambda واحدة.
  • لم نقم بحجز أي خادم. فقط قمنا برفع الكود إلى AWS.
  • قمنا بربط هذه الوظيفة بحدث: “عند رفع ملف جديد إلى سلة التخزين S3”.
  • الآن، لا يحدث أي شيء (ولا ندفع أي شيء) طالما لا توجد صور جديدة.
  • عندما يرفع مستخدم صورة إلى S3، تقوم AWS تلقائياً بتشغيل وظيفتنا، تمرير بيانات الصورة لها، وبعد انتهاء المعالجة، يتم إيقاف كل شيء.

التكلفة أصبحت متغيرة وتعتمد 100% على الاستخدام الفعلي. والعبء التشغيلي؟ شبه معدوم. شغل مرتب من الآخر!

كيف أنقذتنا Serverless عملياً: مثال من أرض الواقع

لنجعل الأمر عملياً أكثر. كانت وظيفتنا بسيطة: عند رفع صورة إلى مجلد /uploads في S3، تقوم الوظيفة بإنشاء نسخة مصغرة (thumbnail) وحفظها في مجلد /thumbnails.

الكود: من الخادم الدائم إلى وظيفة Lambda

هذا مثال مبسط جداً لوظيفة Lambda مكتوبة بلغة Python باستخدام مكتبة boto3 للتعامل مع خدمات AWS، ومكتبة Pillow لمعالجة الصور. (ملاحظة: ستحتاج إلى تضمين مكتبة Pillow في حزمة النشر الخاصة بالـ Lambda).


import boto3
from PIL import Image
import io

s3_client = boto3.client('s3')

def resize_image_handler(event, context):
    # 1. استخلاص معلومات الملف من الحدث القادم من S3
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    object_key = event['Records'][0]['s3']['object']['key']
    
    # التأكد من أننا لا نعالج الصور المصغرة نفسها في حلقة لا نهائية
    if "thumbnails/" in object_key:
        return

    print(f"تم رفع صورة جديدة: {object_key} في السلة: {bucket_name}")

    try:
        # 2. تحميل الصورة من S3 إلى الذاكرة
        response = s3_client.get_object(Bucket=bucket_name, Key=object_key)
        image_content = response['Body'].read()
        
        image = Image.open(io.BytesIO(image_content))
        
        # 3. تغيير حجم الصورة
        thumbnail_size = (128, 128)
        image.thumbnail(thumbnail_size)
        
        # 4. حفظ الصورة المصغرة في الذاكرة بصيغة JPEG
        buffer = io.BytesIO()
        image.save(buffer, format="JPEG")
        buffer.seek(0)
        
        # 5. رفع الصورة المصغرة إلى مجلد آخر في S3
        thumbnail_key = object_key.replace("uploads/", "thumbnails/")
        s3_client.put_object(
            Bucket=bucket_name,
            Key=thumbnail_key,
            Body=buffer,
            ContentType='image/jpeg'
        )
        
        print(f"تم إنشاء وحفظ الصورة المصغرة: {thumbnail_key}")
        
        return {
            'statusCode': 200,
            'body': 'Image processed successfully!'
        }
    except Exception as e:
        print(f"حدث خطأ: {e}")
        raise e

مقارنة التكاليف: الأرقام لا تكذب

  • التكلفة القديمة (خادم EC2 t3.medium): حوالي $30 شهرياً، سواء عالجنا 10 صور أو 100,000 صورة.
  • التكلفة الجديدة (AWS Lambda + S3):
    • لنفترض أننا نعالج 100,000 صورة في الشهر.
    • كل صورة تستغرق 500 ميللي ثانية للمعالجة باستخدام 512 ميجابايت من الذاكرة.
    • تكلفة استدعاء Lambda: حوالي $0.02 (100,000 استدعاء * $0.20 لكل مليون استدعاء).
    • تكلفة وقت التشغيل: حوالي $2.1 (إجمالي وقت التشغيل بالجيجابايت-ثانية * سعر الجيجابايت-ثانية).
    • إجمالي تكلفة Lambda: حوالي $2.12 شهرياً.

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

متى تختار Serverless؟ ومتى تبتعد عنها؟ (نصائح من خبرة أبو عمر)

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

أفضل حالات الاستخدام (شغل مرتب لـ Serverless):

  • المهام الخلفية (Background Jobs): مثل مثالنا السابق، معالجة الصور، إرسال إشعارات، إنشاء تقارير PDF، تشغيل مهام ETL.
  • واجهات برمجة التطبيقات (APIs): بناء APIs RESTful باستخدام خدمات مثل Amazon API Gateway و Lambda. مثالية للـ Microservices.
  • أتمتة مهام البنية التحتية: تشغيل سكربتات استجابة لأحداث معينة في بيئتك السحابية (مثلاً: حذف الموارد غير المستخدمة تلقائياً).
  • التطبيقات ذات الاستخدام المتقطع أو غير المتوقع: أي تطبيق لا تعرف حجم استخدامه المستقبلي هو مرشح مثالي للبدء بـ Serverless.

حالات قد لا تكون فيها Serverless الخيار الأمثل (فكّر مرتين يا خوي):

  • التطبيقات ذات الاتصال المستمر (Stateful): مثل خوادم الدردشة التي تستخدم WebSockets أو خوادم الألعاب التي تحتاج إلى الحفاظ على حالة الاتصال لفترة طويلة.
  • المهام التي تتطلب وقتاً طويلاً جداً للتنفيذ: معظم مقدمي الخدمة يضعون حداً أقصى لوقت تنفيذ الوظيفة (مثلاً 15 دقيقة في AWS Lambda). إذا كانت مهمتك تحتاج ساعات، فالخادم التقليدي قد يكون أفضل.
  • مشكلة “البداية الباردة” (Cold Start): عند استدعاء وظيفة لم تُستخدم منذ فترة، تحتاج المنصة إلى بضع ثوانٍ (أو أجزاء من الثانية) لتهيئة بيئة التشغيل. هذه التأخير البسيط قد يكون غير مقبول في التطبيقات شديدة الحساسية للزمن (low-latency).
  • الحاجة للتحكم الكامل في البيئة: إذا كنت تحتاج إلى تعديل نواة نظام التشغيل (Kernel) أو استخدام عتاد خاص جداً (مثل GPUs بطريقة معينة)، فالخوادم المخصصة تمنحك هذا التحكم.

الخلاصة: هل Serverless هي الحل السحري؟ 💡

لا، ليست حلاً سحرياً، لكنها نقلة نوعية في التفكير. إنها أداة استراتيجية لتحويل نفقاتك الرأسمالية والتشغيلية الثابتة (CAPEX/OPEX) إلى تكاليف متغيرة بحتة. لقد حررتنا من عبء إدارة الخوادم وسمحت لنا بالتركيز على ما يهم حقاً: كتابة كود يقدم قيمة للمستخدم.

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

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

أبو عمر

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

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

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

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

آخر المدونات

تجربة المستخدم والابداع البصري

الهياكل العظمية للواجهات (Skeleton Screens): كيف أنقذت مشروعي من جحيم شاشات التحميل؟

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

21 أبريل، 2026 قراءة المزيد
برمجة وقواعد بيانات

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

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

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

مساهماتي في المصادر المفتوحة كانت حلمًا مؤجلًا: كيف أنقذتني ‘قضايا المبتدئين الجيدة’ (Good First Issues) من جحيم ‘من أين أبدأ؟’

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

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

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

أشارككم قصة حقيقية عن انهيار كاد أن يدمر سمعتنا، وكيف كان نمط تصميم بسيط مثل "قاطع الدائرة" (Circuit Breaker) هو طوق النجاة. سنتعلم معاً كيف...

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

عمليات الاحتيال كانت أشباحًا في نظامنا: كيف أنقذنا ‘التعلم الآلي لكشف الشذوذ’ من جحيم الخسائر الصامتة؟

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

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

خوادمنا كانت كائنات ثلجية فريدة: كيف أنقذنا ‘Ansible’ من جحيم ‘الانحراف في الإعدادات’ (Configuration Drift)؟

أنا أبو عمر، وهذه قصتي مع "الانحراف في الإعدادات" (Configuration Drift)، الكابوس الصامت الذي يحوّل خوادمك المنظمة إلى فوضى من "الكائنات الثلجية" الفريدة. اكتشف كيف...

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

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

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

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

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

أشارككم قصة حقيقية من قلب المعركة البرمجية، يوم ظننا أننا وصلنا للكمال بتغطية اختبار 100%، لنكتشف أننا كنا نطارد وهمًا. اكتشفوا معنا كيف غيّر "الاختبار...

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