نحوه استفاده از صف در 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 ما در رسانه های اجتماعی بیشتر بدانید.




