خوادمنا كانت تلتهم الميزانية: كيف أنقذتنا الحوسبة بدون خوادم (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، وراقب الأرقام بنفسك. دع الأرقام تتحدث، وفي معظم الأحيان، ستجد أنها تقول شيئاً واحداً: “كان يجب أن أفعل هذا منذ زمن طويل”.

أبو عمر

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

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

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

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

آخر المدونات

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

كانت تطبيقاتنا تعتمد على التحديث اليدوي: كيف أنقذتنا WebSockets من جحيم ‘الاستقصاء المستمر’ (Polling)؟

مقالة تستعرض تجربة عملية في الانتقال من تقنية الاستقصاء المستمر (Polling) المرهقة إلى استخدام WebSockets لتطبيقات الوقت الحقيقي. اكتشف كيف يمكن لهذا التغيير أن يحسّن...

26 مايو، 2026 قراءة المزيد
الحوسبة السحابية

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

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

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

كان ملفي على GitHub مقبرة للمشاريع: كيف أنقذتني المصادر المفتوحة من جحيم “ليس لديك خبرة عملية”؟

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

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

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

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

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

من كابوس “أرسل هويتك مجدداً” إلى التحقق الفوري: كيف أنقذنا الذكاء الاصطناعي في عالم الـFintech

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

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

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

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

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

كان كل خطأ كارثة شخصية: كيف أنقذتنا ‘السلامة النفسية’ من جحيم ‘إخفاء الأخطاء’؟

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

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

كان إطلاقنا رهاناً محفوفاً بالمخاطر: كيف أنقذتنا اختبارات التحمل (Load Testing) من جحيم ‘هل سيصمد الخادم؟’

أشارككم قصة حقيقية من قلب المعركة التقنية، حيث كان إطلاق منتجنا الجديد على المحك. لولا اختبارات التحمل (Load Testing) وأدوات مثل k6، لكنا غرقنا في...

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