إدراج الدوال في قائمة انتظار مع "مهام Cloud"


تستفيد دوال قائمة المهام من ميزات Google مهام Google Cloud لمساعدة تطبيقك في تشغيل تطبيقك، ما يستهلك وقتًا طويلاً أو يستهلك موارد كثيرة أو يعتمد على معدّل نقل بيانات محدود المهام بشكل غير متزامن، خارج مسار التطبيق الرئيسي.

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

للتخفيف من هذا التعقيد، يمكنك كتابة دالة قائمة انتظار المهام التي تحدد خيارات المهام مثل scheduleTime وdispatchDeadline، ثم تسليم تعمل في قائمة انتظار في Cloud Tasks. مهام السحابة الإلكترونية صُممت خصيصًا لضمان التحكم الفعال في الازدحام إعادة محاولة تطبيق السياسات لهذه الأنواع من العمليات.

حزمة تطوير البرامج (SDK) لمنصّة Firebase for Cloud Functions في الإصدار 3.20.1 والإصدارات الأحدث من Firebase مع الإصدار 10.2.0 أو الإصدارات الأحدث من حزمة تطوير البرامج (SDK) لمشرف Firebase لدعم وظائف قائمة انتظار المهام.

يمكن أن يؤدي استخدام وظائف قائمة انتظار المهام مع Firebase إلى تحصيل رسوم جارٍ معالجة "مهام Google" في السحابة الإلكترونية. عرض أسعار Cloud Tasks لمزيد من المعلومات.

إنشاء دوال قائمة المهام

لاستخدام وظائف قائمة انتظار المهام، اتبع سير العمل التالي:

  1. اكتب دالة قائمة انتظار المهام باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase لوظائف السحابة الإلكترونية.
  2. اختبِر الدالة من خلال تشغيلها باستخدام طلب HTTP.
  3. انشُر الدالة باستخدام واجهة سطر الأوامر في Firebase. عند نشر مهمتك لأول مرة، سيقوم CLI بإنشاء قائمة انتظار المهام في Cloud Tasks مع تحديد الخيارات (تحديد المعدل وإعادة المحاولة) في رمز المصدر.
  4. إضافة مهام إلى قائمة انتظار المهام التي تم إنشاؤها حديثًا، وتمرير المعلمات لإعداد جدول التنفيذ إذا لزم الأمر. يمكنك تحقيق ذلك عن طريق كتابة التعليمات البرمجية باستخدام SDK للمشرف ونشره في Cloud Functions for Firebase.

كتابة دوال قائمة المهام

استخدام onDispatch للبدء في كتابة دوال قائمة المهام. من المهم جزءًا من كتابة دالة قائمة انتظار المهام هو تعيين إعادة المحاولة لكل قائمة انتظار ومعدّل تقييد التهيئة. تستند عيّنات التعليمات البرمجية في هذه الصفحة إلى تطبيق يحدِّد خدمة تحتفظ بنسخة احتياطية من جميع الصور من وكالة ناسا صورة اليوم الفلكية:

ضبط وظائف قائمة انتظار المهام

تأتي وظائف قائمة انتظار المهام مع مجموعة فعالة من إعدادات التهيئة للتحكم بدقة في حدود المعدل وإعادة محاولة سلوك قائمة انتظار المهام:

exports.backupApod = functions
    .runWith( {secrets: ["NASA_API_KEY"]})
    .tasks.taskQueue({
      retryConfig: {
        maxAttempts: 5,
        minBackoffSeconds: 60,
      },
      rateLimits: {
        maxConcurrentDispatches: 6,
      },
    }).onDispatch(async (data) => {
  • retryConfig.maxAttempts=5: يتم تلقائيًا إعداد كل مهمة في قائمة المهام وتكرار المحاولة حتى 5 مرات. يساعد ذلك في الحدّ من الأخطاء العابرة، مثل أخطاء الشبكة حدوث أخطاء أو انقطاع مؤقت في خدمة خارجية تابعة.
  • retryConfig.minBackoffSeconds=60: تتم إعادة محاولة كل مهمة لمدة 60 ثانية على الأقل عن كل محاولة. يوفر هذا موردًا احتياطيًا كبيرًا بين كل محاولة حتى لا ننتهك من المحاولات الخمس لإعادة المحاولة بسرعة كبيرة.
  • rateLimits.maxConcurrentDispatch=6: يتم إرسال 6 مهام على الأكثر في في أي وقت. ويساعد هذا في ضمان تدفق ثابت للطلبات إلى المصدر وتساعد في تقليل عدد الحالات النشطة وعمليات التشغيل على البارد.

اختبار دوال قائمة المهام

عرض وظائف قائمة المهام في "مجموعة أدوات المحاكاة المحلية من Firebase" ببساطة دوال HTTP. يمكنك اختبار دالة تمت محاكاتها عن طريق إرسال طلب HTTP POST طلب يحتوي على حمولة بيانات بتنسيق json:

 # start the Firebase Emulators
 firebase emulators:start

 # trigger the emulated task queue function
 curl \
  -X POST                                            # An HTTP POST request...
  -H "content-type: application/json" \              # ... with a JSON body
  http://localhost:$PORT/$PROJECT_ID/$REGION/$NAME \ # ... to function url
  -d '{"data": { ... some data .... }}'              # ... with JSON encoded data

نشر دوال قائمة المهام

نشر دالة قائمة انتظار المهام باستخدام واجهة سطر الأوامر لـ Firebase:

$ firebase deploy --only functions:backupApod

عند نشر دالة قائمة انتظار مهام لأول مرة، ينشئ واجهة سطر الأوامر قائمة انتظار المهام في Cloud Tasks مع خيارات (تحديد المعدّل وإعادة المحاولة) المحددة في رمز المصدر.

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

إدراج دوال قائمة انتظار المهام

يمكن إدراج دوال قائمة المهام في قائمة انتظار المهام في Cloud Tasks من خادم مثل Cloud Functions for Firebase باستخدام حزمة SDK للمشرف في Firebase Node.js. إذا كنت مستخدمًا جديدًا لحزم SDK للمشرف، يُرجى مراجعة يمكنك إضافة Firebase إلى خادم للبدء.

في التدفق النموذجي، تنشئ SDK للمشرف مهمة جديدة، وتدرجها في قائمة انتظار "مهام Google" وضبط إعدادات المهمة:

exports.enqueueBackupTasks = functions.https.onRequest(
async (_request, response) => {
  const queue = getFunctions().taskQueue("backupApod");
  const enqueues = [];
  for (let i = 0; i <= 10; i += 1) {
    // Enqueue each task with i*60 seconds delay. Our task queue function
    // should process ~1 task/min.
    const scheduleDelaySeconds = i * 60 
    enqueues.push(
        queue.enqueue(
          { id: `task-${i}` },
          {
            scheduleDelaySeconds,
            dispatchDeadlineSeconds: 60 * 5 // 5 minutes
          },
        ),
    );
  }
  await Promise.all(enqueues);
  response.sendStatus(200);

});
  • scheduleDelaySeconds: يحاول الرمز النموذجي نشر تنفيذ المهام من خلال الارتباط بتأخير الدقائق العددية للمهمة ترتيب. هذا النمط ويترجم إلى تشغيل حوالي مهمة واحدة في الدقيقة. لاحظ أنه يمكنك أيضًا استخدام scheduleTime إذا كنت تريد تفعيل Cloud Tasks لمهمة ما في وقت محدد.
  • dispatchDeadlineSeconds: أقصى مدة زمنية ستنتظر خدمة "مهام Google" في السحابة الإلكترونية. لإنجاز مهمة ما. ستتم إعادة المحاولة من خلال "مهام Google" الْمَهَمَّة بَعْدَ إِعَادَةِ الْمُحَاوَلَة تهيئة قائمة الانتظار أو حتى الوصول إلى هذا الموعد النهائي. في العينة، تمت تهيئة قائمة الانتظار لإعادة محاولة المهمة حتى 5 مرات، ولكن المهمة يتم إلغاؤها تلقائيًا في حالة تنفيذ العملية بأكملها (بما في ذلك محاولات إعادة المحاولة) يستغرق أكثر من 5 دقائق

تحديد المشاكل وحلّها

تفعيل تسجيل "مهام Google" في السحابة الإلكترونية

تحتوي السجلات من Cloud Tasks على معلومات تشخيصية مفيدة مثل حالة الطلب المرتبط بمهمة ما. بشكل افتراضي، السجلات من تم إيقاف "مهام Google Cloud" بسبب الحجم الكبير من السجلات التي يمكنها الوصول إليها. التي قد تنشئها على مشروعك. ننصحك بتفعيل سجلات تصحيح الأخطاء. أثناء تطوير وظائف قائمة انتظار المهام وتصحيحها. عرض تشغيل تسجيل الدخول.

أذونات "إدارة الهوية وإمكانية الوصول"

قد تظهر لك PERMISSION DENIED أخطاء عند إضافة المهام أو في حال تحاول خدمة Cloud Tasks استدعاء وظائف قائمة المهام. تأكَّد من أنّ سمات يلتزم مشروعك بالتزامات إدارة الهوية وإمكانية الوصول التالية:

  • الهوية المستخدمة لإدراج المهام في قائمة انتظار مهام Cloud Tasks إذن "إدارة الهوية وإمكانية الوصول" (IAM) (cloudtasks.tasks.create)

    في النموذج، هذا هو حساب الخدمة التلقائي في App Engine.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer
  • تحتاج الهوية المستخدمة لإدراج المهام في قائمة "مهام Cloud" إلى إذن استخدام حساب الخدمة المرتبط بمهمة في "مهام Google" في السحابة الإلكترونية.

    في النموذج، يكون هذا هو حساب الخدمة التلقائي في App Engine.

الاطّلاع على مستندات Google Cloud IAM للحصول على تعليمات حول كيفية إضافة حساب خدمة App Engine التلقائي كمستخدم لحساب خدمة App Engine التلقائي.

gcloud functions add-iam-policy-binding $FUNCTION_NAME \
  --region=us-central1 \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudfunctions.invoker