Workflow Automation

Windmill كبديل لخادم بدون خادم (Serverless Backend): استبدال Lambda وAPI Gateways للأدوات الداخلية

على مدى سنوات، تضمنت الوصفة القياسية لبناء الأدوات الداخلية شبكة معقدة من دوال AWS Lambda، وإعدادات API Gateway، وسياسات IAM، ودلاء S3. وعلى الرغم من قوتها للتطبيقات الموجهة للجمهور، إلا أن هذا النهج المعتمد على البنية التحتية غالبًا ما يبدو مبالغًا فيه للوحات التحكم الداخلية، أو خطوط البيانات، أو لوحات الإدارة. هنا يأتي دور Windmill، وهو منصة مفتوحة المصدر (تستضيفها بنفسك أو عبر السحابة) تحوّل الكود إلى سير عمل، وتقدم بديلاً مبسطًا لمكدس الخادم بدون خادم التقليدي.

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

لماذا نتحول بعيدًا عن Lambda + API Gateway؟

يُعدّ الجمع بين AWS Lambda وAPI Gateway نمطًا مجرّبًا، لكنه يأتي مع تكاليف إضافية كبيرة:

  • تعقيد الإعداد: يمكن أن يكون إدارة أدوار IAM، ومراحل API Gateway، ومتغيرات البيئة الخاصة بـ Lambda عرضة للأخطاء ومستهلكة للوقت.
  • تشتت المنطق: غالبًا ما يتم تقسيم منطق الأعمال عبر عدة دوال Lambda، مما يجعل تتبع تدفق البيانات صعبًا.
  • البدايات الباردة (Cold Starts): على الرغم من التحسن، لا تزال البدايات الباردة لـ Lambda تؤثر على استجابة الأدوات الداخلية حيث يتوقع المستخدمون تغذية راجعة فورية.
  • صعوبة التصحيح: يتطلب تصحيح أخطاء دوال الخادم بدون خادم الموزعة ربط السجلات من مصادر متعددة.

يعالج Windmill هذه التحديات من خلال توفير بيئة موحدة يمكنك فيها كتابة مقاطع الكود وجدولتها وتنسيقها (باستخدام JavaScript/TypeScript، أو Python، أو Bash) مباشرة من المتصفح. يعمل كـ "خدمة كخادم" مصممة خصيصًا لحالات الاستخدام الداخلية.

كيف يعمل Windmill كخادم بدون خادم

يسمح لك Windmill بتعريف "السكربتات" (مقاطع الكود) التي يمكن كشفها كنقاط نهاية HTTP، أو تشغيلها بواسطة أحداث، أو جدولتها. هذا يلغي الحاجة إلى طبقة API Gateway منفصلة. إليك كيف يتغير الهيكل المعماري:

  1. مقاطع الكود كدوال: بدلاً من نشر دالة Lambda، تقوم بلصق كودك في Windmill. يعمل في صندوق رملي معزول.
  2. محفزات HTTP مدمجة: يمكنك توليد عنوان URL آمن فورًا لأي سكربت، ليعمل كنقطة نهاية API الخاصة بك.
  3. تنسيق سير العمل: اربط عدة سكربتات معًا لبناء منطق معقد دون الحاجة إلى إدارة الحالة أو الاستدعاءات العكسية (callbacks).

مثال عملي: بناء واجهة برمجة تطبيقات (API) لتصدير البيانات

لنقم ببناء أداة داخلية بسيطة تصدّر بيانات المستخدمين من قاعدة بيانات PostgreSQL إلى ملف CSV وتخزّنه في S3. باستخدام Lambda + API Gateway، سيتطلب هذا:

  1. دالة Lambda مع مجموعة اتصالات قاعدة بيانات (connection pool).
  2. نقطة نهاية API Gateway مُعدّة لتشغيل الدالة Lambda.
  3. أذونات IAM لـ S3 وRDS.
  4. متغيرات بيئة لبيانات اعتماد قاعدة البيانات.

باستخدام Windmill، يمكنك تحقيق نفس الشيء في سكربت واحد:

// Windmill Script: export_user_data.js
import { query } from "windmill-postgres";
import { uploadFile } from "windmill-s3";

// Fetch data from PostgreSQL
const users = await query(`SELECT * FROM users WHERE active = true`);

// Convert to CSV
const csvContent = "user_id,email,created_at\n" + users.map(u => 
    `${u.id},${u.email},${u.created_at}`
).join("\n");

// Upload to S3
const s3Key = `exports/users_${new Date().toISOString()}.csv`;
await uploadFile("my-internal-bucket", s3Key, csvContent);

// Return S3 URL
return {
    status: "success",
    url: `https://my-internal-bucket.s3.amazonaws.com/${s3Key}`
};

بمجرد الحفظ، يولّد Windmill تلقائيًا نقطة نهاية HTTP POST لهذا السكربت. يمكنك الآن استدعاء هذه النقطة من الواجهة الأمامية الداخلية الخاصة بك، دون الحاجة إلى إعداد API Gateway أو أدوار IAM. يتولى Windmill المصادقة، وتحديد معدل الطلبات، وبيئة التنفيذ نيابةً عنك.

الفوائد الرئيسية للأدوات الداخلية

  • تكرار أسرع: عدّل الكود وانشره فورًا. لا حاجة إلى خط CI/CD للتغييرات الطفيفة.
  • رؤية موحدة (Observability): جميع السجلات، والتتبعات، وسجل التنفيذ في مكان واحد.
  • كفاءة التكلفة: بالنسبة للأدوات الداخلية، غالبًا ما تكون لا تدفع مقابل سعة Lambda الخاملة. يمكن أن يكون نموذج الاستخدام المبني على الاستهلاك في Windmill أكثر قابلية للتنبؤ.
  • دعم متعدد اللغات: اخلط بين Python وJS وBash في نفس سير العمل، مستفيدًا من أفضل أداة لكل مهمة.

متى تستخدم Windmill مقابل الخادم بدون خادم التقليدي

يُعد Windmill مثاليًا لـ:

  • لوحات الإدارة ولوحات التحكم الداخلية
  • خطوط البيانات ومهام ETL
  • النمذجة الأولية السريعة لمنطق الخادم
  • التقارير والإشعارات الآلية

استمر في استخدام Lambda + API Gateway لـ:

  • واجهات برمجة التطبيقات الموجهة للجمهور مع اتفاقيات مستوى خدمة (SLAs) صارمة
  • سيناريوهات النطاق العالي والتزامن العالي
  • عندما تكون التكاملات العميقة مع خدمات AWS المحددة (مثل DynamoDB streams) مطلوبة

خاتمة

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

Share: