Thursday, April 17, 2025
Homeโซเชียลมีเดียวิธีใช้คิว Firebase

วิธีใช้คิว Firebase

-


หากคุณเป็นผู้ใช้ Firebase คุณน่าจะชื่นชมความสามารถในตัวในตัวเช่นสแน็ปช็อตแบบเรียลไทม์ทริกเกอร์ Firestore และการรับรองความถูกต้อง ฉันเพิ่งอ่านเกี่ยวกับ คิว deno และตระหนักได้ว่าหลังจากหลายปีของการใช้ Firebase ฉันไม่เคยอ่านเกี่ยวกับคิว Firebase คิว Firebase อยู่ที่ไหน?

กรณีใช้คิว firebase คิว

Ayrshare ถูกสร้างขึ้นบนฐาน Firebase โดยใช้ฟังก์ชั่น Firebase อย่างหนัก Ayrshare เป็นโซเชียลมีเดีย API และเราอนุญาตให้ผู้ใช้เผยแพร่หรือได้รับการวิเคราะห์บนเครือข่ายสังคมออนไลน์ อย่างไรก็ตามเมื่อเราเติบโตขึ้นเราก็ตระหนักว่าวิธีที่เราประมวลผลโพสต์ตามกำหนดเวลานั้นไม่เหมาะและกำลังผลักดันขีด จำกัด ทางสถาปัตยกรรม

เมื่อใดก็ตามที่ผู้ใช้สร้างโพสต์กำหนดการโดยใช้ Social API ของเราเราจะสร้างรายการในคอลเลกชัน Firestore ซึ่งเป็นคิวที่บ้าน อัน ฟังก์ชั่น Firebase ที่กำหนด รันหนึ่งนาทีเพื่อประมวลผลโพสต์ที่รอดำเนินการทั้งหมด ซึ่งหมายความว่าโพสต์ที่กำหนดเวลาหลายรายการจะถูกประมวลผลเข้าด้วยกันข้อยกเว้นในโพสต์เดียวอาจส่งผลกระทบต่อโพสต์อื่น ๆ และฟังก์ชั่นมีการหมดเวลาสูงสุดเก้านาทีต่อขีด จำกัด ของ Firebase

การปรับปรุงที่ชัดเจนคือฟังก์ชั่นที่กำหนดเวลาจะประมวลผลเพียงโพสต์ทีละโพสต์ แต่นั่นหมายถึงการประมวลผลแบบซิงโครนัสซึ่งจะทำให้การเผยแพร่ช้าลงอย่างมาก ในขณะที่เราสามารถเอาชนะความท้าทายเหล่านี้ด้วยกรวดมากขึ้นในตอนท้ายของวันเราจะพัฒนากลไกคิวที่ซับซ้อนของเราเอง สิ่งที่เราต้องการวิธีการเข้าคิวฟังก์ชั่นและประมวลผลอย่างอิสระ

ฟังก์ชั่น enqueue พร้อมงานคลาวด์

หลังจากค้นหา “คิว firebase” จำนวนมากคุณจะได้รับสิ่งที่เรียกว่า “ฟังก์ชั่น enqueue พร้อมงานคลาวด์“. ตามที่ Firebase อธิบาย:

ฟังก์ชั่นคิวงานใช้ประโยชน์จาก Google งานเมฆ เพื่อช่วยให้แอปของคุณใช้งานที่ใช้เวลานานการใช้ทรัพยากรมากหรือแบนด์วิดท์ จำกัด งานแบบอะซิงโครนัสนอกแอปพลิเคชันหลักของคุณ

เมื่อมองแวบแรกสิ่งนี้อาจไม่เหมือนทางออกที่ถูกต้อง แต่การขุดลึกลงไปเล็กน้อยคุณจะเห็นว่ามันสมบูรณ์แบบถ้ามีคำตอบที่ซับซ้อนเล็กน้อย

หากต้องการใส่คำศัพท์คนธรรมดาคุณจะสร้างคิว Firebase เช่นงานคลาวด์เพิ่มข้อมูลลงในคิวและกระบวนการ Firebase อื่นจะทำงานสำหรับแต่ละรายการเช่นงานในคิว

แผนภาพที่แสดงกระบวนการสร้างคิว

วิธีใช้คิว Firebase

มาดำดิ่งลงไปในรหัสบางอย่างเกี่ยวกับวิธีการสร้างเพิ่มงานและประมวลผลงานเหล่านั้นในฐาน Firebase

สร้างและเพิ่มลงในคิว

เราจะเริ่มต้นด้วยการสร้างคิวและเพิ่มงาน

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

  const posts = await gatherScheduledPosts();

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

  const enqueues = ();
  posts.forEach((publish) => {
    enqueues.push(
      queue.enqueue(publish, {
        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 นั้นกล่าวถึงด้านล่าง

ตอนนี้เราสามารถ enqueue แต่ละงานด้วย queue.enqueue(information, choices)– คุณส่งผ่านข้อมูลพารามิเตอร์ที่มีข้อมูลที่คุณต้องการประมวลผลและตัวเลือกคิว JSON ในตัวอย่างของเราเราส่ง:

  • scheduleDelaySeconds – ระยะเวลาที่จะล่าช้าระหว่างการประมวลผลงานแต่ละครั้ง นี่เป็นทางเลือก
  • dispatchDeadlineSeconds – การหมดเวลาของฟังก์ชั่นการประมวลผลงาน นี่เป็นทางเลือก
  • uri – URI เป้าหมายของฟังก์ชั่นในการประมวลผลงาน สิ่งนี้จำเป็น

ที่ enqueue ฟังก์ชั่นส่งคืนสัญญาเพื่อให้คุณสามารถประมวลผลได้ด้วย สัญญาทั้งหมด การทำงาน. เมื่อเสร็จสิ้นงานทั้งหมดจะอยู่ในคิวและพร้อมที่จะประมวลผล

ค้นหาฟังก์ชันคิว URI

ฟังก์ชั่น URI เป็นเพียง URL ของฟังก์ชั่นที่จะเรียกสำหรับแต่ละงาน: https://functionName-code-locId.a.run.app

ในขณะที่คุณสามารถกำหนดรหัส URI ของฟังก์ชั่นการประมวลผลงานได้ แต่ก็เป็นการดีกว่าสำหรับการใช้ซ้ำและการบำรุงรักษาเพื่อทำการค้นหาฟังก์ชั่น

const getFunctionUrl = async (identify, 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/" +
    `tasks/${projectId}/areas/${location}/features/${identify}`;

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

  console.log("Perform URL for Job:", identify, uri);

  return uri;
};

รหัสทั้งหมดนี้ดูว่า URI ของฟังก์ชั่น ตัวอย่างเช่นการค้นหาอาจกลับมา: https://postTaskFunction-93ks02p21-uc.a.run.app

ประมวลผลงานคิว

ขั้นตอนสุดท้ายคือการประมวลผลงานทั้งหมดในคิว

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

เราใช้ฟังก์ชั่น firebase ในตัว onTaskDispatched เพื่อประมวลผลแต่ละงาน คุณดึงข้อมูลที่ส่งไปยังฟังก์ชั่นในวัตถุคำขอ req และแยกไฟล์ information วัตถุ. การประมวลผลสามารถทำได้ในชุดข้อมูลเช่น processPost

ที่ onTaskDispatched งานต้องการพารามิเตอร์หลายตัว:

  • retryConfig – มีการพยายามลองกี่ครั้งหากเกิดข้อผิดพลาด
  • rateLimit – จำนวนกระบวนการพร้อมกันที่อนุญาต
  • timeoutSeconds – จำนวนวินาทีก่อนฟังก์ชั่นหมดเวลา
  • reminiscence – หน่วยความจำที่จัดสรรให้กับฟังก์ชั่นมากแค่ไหน โปรดดูฐาน Firebase การกำหนดราคาฟังก์ชันคลาวด์

การบันทึกคิว Firebase ใน Log Explorer

ข้อได้เปรียบที่ยอดเยี่ยมอีกประการหนึ่งของการใช้คิวงานคลาวด์คือการแบ่งส่วนของบันทึกต่องาน

ใน Google Cloud Log Explorer ค้นหารายการที่งานบันทึก:

ภาพหน้าจอของหน้าจอแสดงตารางกระบวนการสำหรับโพสต์

คลิกที่เส้นสีน้ำเงินสี่เส้น:

หน้าจอแสดงรายการสำหรับการแข่งขัน

และเลือก“ รายการแสดงสำหรับการติดตามนี้” ตอนนี้คุณจะเห็นเฉพาะบันทึกสำหรับงานคลาวด์โดยเฉพาะ … ข้อได้เปรียบที่สำคัญในการพยายามถอดรหัสบันทึกผสม ตรวจสอบให้แน่ใจว่าได้ลบในฟิลด์ค้นหารายการยกเว้น“ hint = …”

คุณควรใช้งาน (และไม่ใช้) งาน Firebase enqueue เมื่อใด

หากคุณต้องการประมวลผลงานอย่างอิสระแบบอะซิงโครนัสและพร้อมกันคิว Firebase กับงานคลาวด์นั้นเหมาะสมมาก แม้ว่าคุณจะมีความต้องการในการเข้าคิวอย่างง่ายคุณก็สามารถใช้งานคลาวด์ได้ มันง่ายจริงๆเมื่อคุณได้รับการตั้งค่าทุกอย่าง

ค่าใช้จ่ายข้อแม้เป็นค่าใช้จ่าย เพราะคุณกำลังเรียกฟังก์ชั่น firebase สำหรับทุกงานคิวที่คุณจะต้องจ่ายสำหรับทุกการวิ่ง คุณจะต้องมีน้ำหนักค่าใช้จ่ายเทียบกับมูลค่าของงานคลาวด์เหล่านี้และคุณอาจพบคิว Firestore อย่างง่ายตามที่กล่าวไว้ในกรณีการใช้งานข้างต้นตรงกับความต้องการของคุณ

โดยรวมแล้ว Ayrshare เปลี่ยนไปใช้คิว Firebase ด้วยงานคลาวด์เป็นสถาปัตยกรรมใหม่ที่สมบูรณ์แบบซึ่งเพิ่มความยืดหยุ่นความเร็วและการบำรุงรักษาของเรา

เกี่ยวกับ Ayrshare

Ayrshare เป็น โซเชียลมีเดีย API ที่ช่วยให้คุณเผยแพร่โพสต์รับการวิเคราะห์จัดการความคิดเห็นและส่งข้อความโดยตรงบนเครือข่ายสังคมออนไลน์โดยตรงจากแพลตฟอร์มของคุณ เรียนรู้เพิ่มเติมใน เอกสาร API โซเชียลมีเดีย

Related articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0FollowersFollow
0SubscribersSubscribe
spot_img

Latest posts