مقالات

نحوه استفاده از صف در Firebase


اگر شما یک کاربر Firebase هستید ، احتمالاً بسیاری از ویژگی های تعبیه شده مانند عکس های زمان واقعی ، محرک های آتش نشانی و احراز هویت را ارزیابی می کنید. من به تازگی در مورد صف های دنو خوانده ام و بعد از سالها استفاده از Firebase ، که هرگز در مورد صف های Firebase نخوانده ام ، فهمیدم. فقط صف های Firebase کجا هستند؟

با استفاده از دم دم

Ayrshare در Firebase ساخته شده است و به شدت با استفاده از ویژگی های Firebase ساخته شده است. Ayrshare یک API برای رسانه های اجتماعی است و ما به کاربران اجازه می دهیم تجزیه و تحلیل را در شبکه های اجتماعی منتشر یا دریافت کنند. با این حال ، با رشد ما ، فهمیدیم که نحوه پردازش نشریات برنامه ریزی شده کامل نیست و مرزهای معماری را تحت فشار قرار می دهد.

هر بار که کاربر با استفاده از API اجتماعی ما یک پست برنامه ایجاد می کند ، ما یک رکورد در مجموعه Firestore ایجاد می کنیم – یک صف مبتنی بر خانه. یک ویژگی Firebase برنامه ریزی شده یک بار در دقیقه کار می کند تا تمام پست های حلق آویز را پردازش کند. این بدان معناست که چندین موقعیت برنامه ریزی شده با هم پردازش می شوند ، استثنائات مربوط به یک نشر می تواند بر سایر انتشارات تأثیر بگذارد و عملکرد حداکثر نه دقیقه انتظار محدودیت های Firebase دارد.

یک پیشرفت آشکار ، عملکرد برنامه ریزی شده فقط یک پست را به طور همزمان پردازش می کند ، اما این به معنای پردازش همزمان است ، که باعث کاهش چشمگیر انتشار می شود. اگرچه ما می توانستیم با شن و ماسه بیشتر بر این چالش ها غلبه کنیم ، اما می توانستیم مکانیسم دم پیچیده خودمان را در پایان روز توسعه دهیم. آنچه ما واقعاً به راهی برای تنظیم توابع و پردازش آنها به طور مستقل نیاز داریم.

عملکردهای Enqueue با کارهای ابری

پس از جستجوی زیاد “دمهای Firebase” با چیزی به نام “توابع Enqueue با کارهای ابری” همراه خواهید بود. همانطور که Firebase توضیح می دهد:

ویژگی های Task Tail از وظایف Google Cloud استفاده می کند تا به برنامه شما کمک کند تا زمانی را انجام دهد که زمان ، منابع فشرده یا کارهای نوار فرکانس ، ناهمزمان ، خارج از جریان اصلی برنامه شما باشد.

در نگاه اول ، این ممکن است مانند راه حل مناسب به نظر نرسد ، اما حفر کمی عمیق تر ، خواهید دید که اگر یک جواب کمی پیچیده باشد ، عالی است.

برای قرار دادن یک فرم ، شما یک دم Firebase ایجاد می کنید ، یعنی.

چگونه می توانم از صف Firebase استفاده کنم

بیایید در مورد نحوه ایجاد ، اضافه کردن وظایف و پردازش این کارها در Firebase به برخی از کد ها شیرجه بزنیم.

دم را ایجاد و اضافه کنید

ما شروع به ایجاد دم و اضافه کردن وظایف خواهیم کرد.

const { getFunctions } = require("firebase-admin/functions");
const enqueueScheduledPosts = async () => {
  log("Starting enqueueScheduledPosts");

  const posts = await gatherScheduledPosts();

  const queue = getFunctions().taskQueue("postTask");
  const targetUri = await getFunctionUrl("postTaskFunction");

  const enqueues = [];
  posts.forEach((post) => {
    enqueues.push(
      queue.enqueue(post, {
        scheduleDelaySeconds: 1,
        dispatchDeadlineSeconds: 60 * 8, // 8 minutes
        uri: targetUri
      })
    );
  });

  await Promise.all(enqueues).catch((err) =>
    el("Error with enqueues:", posts, err)
  );

  log("Ending enqueueScheduledPosts");
};

این اولین عملکرد gatherScheduledPosts تمام نشریاتی را که باید پردازش شوند جمع می کند.

سپس یک صف با یک نام ایجاد می کنیم postTask با getFunctions().taskQueue("postTask")همه انتشارات به این دم اضافه می شود.

سپس ما می گیریم targetUri عملکرد با getFunctionUrl("postTaskFunction") این کار هر کار دم را پردازش می کند. یافتن محل URI در زیر مورد بحث قرار گرفته است.

اکنون می توانیم هر کار را با آن فتح کنیم queue.enqueue(data, options)S شما داده های پارامتر را که شامل اطلاعاتی است که می خواهید پردازش کنید و گزینه های Tail JSON را انتقال می دهید. در مثال ما ارسال می کنیم:

  • scheduleDelaySeconds – چه مدت بین هر پردازش کار کاهش می یابد. این اختیاری است.
  • dispatchDeadlineSeconds – زمان انتظار برای روند کار. این اختیاری است.
  • uri – URI هدف عملکرد پردازش کار. این لازم است

او enqueue این عملکرد یک وعده را بازگرداند تا بتوانید آنها را با قول پردازش کنید. پس از اتمام ، تمام کارها در صف قرار دارند و برای پردازش آماده هستند.

URI را در عملکرد دم پیدا کنید

ویژگی URI فقط URL ویژگی است که برای هر کار فراخوانی می شود: https://functionName-code-locId.a.run.app

اگرچه می توانید URI را در ویژگی پردازش کار رمزگذاری کنید ، بهتر است از عملکرد استفاده مجدد و پشتیبانی کنید.

const getFunctionUrl = async (name, location = "us-central1") => {
  const { GoogleAuth } = require("google-auth-library");
  const gAuth = new GoogleAuth({
    scopes: "https://www.googleapis.com/auth/cloud-platform"
  });
  const projectId = await gAuth.getProjectId();

  const url =
    "https://cloudfunctions.googleapis.com/v2beta/" +
    `projects/${projectId}/locations/${location}/functions/${name}`;

  const client = await gAuth.getClient();
  const res = await client.request({ url });
  const uri = res.data?.serviceConfig?.uri;
  if (!uri) {
    throw new Error(`Unable to retreive uri for function at ${url}`);
  }

  console.log("Function URL for Task:", name, uri);

  return uri;
};

اگر URI از ویژگی باشد ، تمام این کد به نظر می رسد. به عنوان مثال ، جستجو ممکن است بازگردد: https://postTaskFunction-93ks02p21-uc.a.run.app

وظایف صف را پردازش کنید

آخرین مرحله پردازش تمام وظایف صف است.

const { onTaskDispatched } = require("firebase-functions/v2/tasks");
exports.processScheduledPosts = onTaskDispatched(
  {
    retryConfig: {
      maxAttempts: 1
    },
    rateLimits: {
      maxConcurrentDispatches: 25
    },
    timeoutSeconds: 480,
    memory: "2GiB"
  },
  async (req) => {
    const { data } = req;
    return processPost(data);
);

ما از ویژگی Firebase ساخته شده استفاده می کنیم onTaskDispatched برای پردازش هر کار فردی. شما داده های ارسال شده به عملکرد را در موضوع درخواست بازیابی می کنید req و استخراج data شیء. پردازش را می توان در مجموعه داده ها انجام داد ، به عنوان مثال processPostحرف

او onTaskDispatched کار به چندین پارامتر نیاز دارد:

  • retryConfig – در صورت بروز خطا ، چند تکرار می کنند.
  • rateLimit – تعداد فرآیند موازی مجاز.
  • timeoutSeconds – تعداد ثانیه قبل از عملکرد عملکرد.
  • memory – چه مقدار حافظه برای عملکرد توزیع می شود. لطفاً به قیمت گذاری عملکرد Cloud Firebase مراجعه کنید.

تبدیل صف Firebase در Log Explorer

یکی دیگر از مزایای بزرگ استفاده از صف کار ابری ، تقسیم سیاهههای مربوط به یک کار است.

در Google Cloud Log Explorer ، سابقه ای را پیدا کنید که کار را ثبت کند:

عکس صفحه نمایش از صفحه نمایش که برنامه روند انتشار را نشان می دهد.

روی چهار خط آبی کلیک کنید:

صفحه نمایش نشان دهنده سوابق مسابقه است.

و “نمایش سوابق برای این ردیابی” را انتخاب کنید. اکنون فقط خاطرات مربوط به این کار ابری خاص را مشاهده خواهید کرد … مهمترین مزیت در تلاش برای رمزگشایی سیاهههای مربوطه. حتماً سوابق موجود در این زمینه را حذف کنید ، به جز “Trace = …”.

چه موقع باید از وظایف (استفاده نکنید) برای Enquue Firebase استفاده کنید؟

اگر نیاز به پردازش وظایف به طور مستقل ، ناهمزمان و در عین حال ، صف Firebase با کار ابر عالی است. حتی اگر نیازهای ساده ای داشته باشید ، می توانید از کارهای ابری استفاده کنید. بعد از تنظیم همه چیز بسیار آسان است.

محل Caveat هزینه ها است. همانطور که برای هر کار دم ، ویژگی Firebase را می نامید ، برای هر عملکرد پرداخت خواهید کرد. شما باید هزینه این کارهای ابری را وزن کنید و می توانید یک دم ساده Firestore را پیدا کنید ، همانطور که در مورد فوق ذکر شد ، نیازهای شما را برآورده می کند.

به طور کلی ، Ayrshare ، که به صف های Firebase با کارهای ابری منتقل می شود ، معماری جدید کاملی بود که باعث افزایش ثبات ، سرعت و نگهداری ما شد.

برای iirshare

Ayrshare یک API برای رسانه های اجتماعی است که به شما امکان می دهد انتشارات را ارسال کنید ، تجزیه و تحلیل دریافت کنید ، نظرات را مدیریت کنید و پیام های مستقیم را به طور مستقیم به شبکه های اجتماعی از سیستم عامل خود ارسال کنید. در اسناد API ما در رسانه های اجتماعی بیشتر بدانید.


Source link

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا