ข้อมูลหลักงานเบื้องหลัง

คิวงาน

คิว FIFO ที่ไม่ทำงานหายเมื่อเวิร์กเกอร์ตาย โดยผู้ผลิตและผู้บริโภคทำงานขนานกัน

LPUSH/s แบบไปป์ไลน์ ที่วัดได้
31.6M
งานที่หายเมื่อล่ม
0
การโพล
0
ขั้นที่ 1 จาก 5
ผู้ผลิตผลักงานเข้าคิว

เซอร์วิสใดๆ เพิ่มงานโดยไม่ต้องรอผู้บริโภค

เซสชันตัวอย่างplaying
# ผู้ผลิตผลักงานเข้าคิว
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

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

ปัญหา

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

HotKV จัดการอย่างไร

List ให้คิว FIFO แบบเรียบง่าย BLMOVE ย้ายแต่ละงานไปยังลิสต์ประมวลผลในขณะที่ส่งให้เวิร์กเกอร์ งานที่กำลังทำอยู่จึงถูกเก็บไว้ที่ใดที่หนึ่งเสมอหากเวิร์กเกอร์นั้นหายไป ผู้ผลิตและผู้บริโภคได้รับบริการจากเวิร์กเกอร์เธรดที่ทำงานขนานกัน

ทีละขั้นตอน

เกิดอะไรขึ้นบ้าง ทีละคำสั่ง

  1. 01

    ผู้ผลิตผลักงานเข้าคิว

    เซอร์วิสใดๆ เพิ่มงานโดยไม่ต้องรอผู้บริโภค

    LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  2. 02

    เวิร์กเกอร์รับงานอย่างปลอดภัย

    BLMOVE บล็อกจนกว่าจะมีงาน แล้วย้ายงานไปยังลิสต์ประมวลผลในขั้นเดียว

    BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0
  3. 03

    ตอบรับเมื่อเสร็จ

    อีเมลส่งออกไปแล้ว งานถูกลบออกจากลิสต์ประมวลผล

    LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  4. 04

    เวิร์กเกอร์ล่ม

    เวิร์กเกอร์ 2 ตายกลางงาน งานของมันยังอยู่ในลิสต์ประมวลผล ไม่หาย

    LRANGE queue:emails:processing 0 -1
  5. 05

    ใส่กลับเข้าคิวแล้วทำงานต่อ

    ตัวมอนิเตอร์ย้ายงานที่ถูกทิ้งไว้กลับเข้าคิว และเวิร์กเกอร์อีกตัวรับไปทำ

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
เหมาะกับงานแบบไหน

สถานการณ์จริง

อีเมลและ SMS ธุรกรรม

ข้อความสมัครสมาชิก ใบเสร็จ และการรีเซ็ตถูกเข้าคิวโดยเว็บแอปและส่งโดยกลุ่มเวิร์กเกอร์

การประมวลผลสื่อ

ไฟล์ที่อัปโหลดถูกเข้าคิวเพื่อสร้างภาพขนาดย่อและแปลงรหัส และตัวแปลงรหัสที่ล่มไม่ทำไฟล์หาย

การส่งเว็บฮุก

เว็บฮุกขาออกถูกเข้าคิวและลองใหม่โดยไม่บล็อกคำขอที่ทำให้เกิดมัน

อยู่ในตัว

สิ่งที่คุณได้รับ

FIFO พร้อมการอ่านแบบบล็อก

LPUSH กับ BRPOP และเวิร์กเกอร์หลับจนกว่าจะมีงานเข้ามา

LPUSHBRPOP

ไม่มีงานหาย

BLMOVE ส่งแต่ละงานให้ลิสต์ประมวลผลแบบอะตอมมิก

BLMOVELREM

ผู้ผลิตและผู้บริโภคขนานกัน

ผู้ผลิตและผู้บริโภคได้รับบริการจากเวิร์กเกอร์เธรดที่ทำงานขนานกัน

ต้องการมากกว่านี้ไหม

สำหรับการตอบรับ consumer group และการเล่นซ้ำ ให้ใช้สตรีม

XADDXREADGROUP
ข้อมูลอ้างอิง:BLMOVEBRPOPLPUSHLMOVE

คำถามที่พบบ่อย

จะเกิดอะไรขึ้นกับงานหากเวิร์กเกอร์ล่ม

หากคุณรับงานด้วย BLMOVE งานจะอยู่ในลิสต์ประมวลผล ตัวมอนิเตอร์ย้ายสิ่งที่อยู่ที่นั่นนานเกินไปกลับเข้าคิวได้

เวิร์กเกอร์ต้องโพลไหม

ไม่ต้อง BRPOP และ BLMOVE บล็อกจนกว่าจะมีงานเข้ามา พร้อม timeout ที่เลือกใช้ได้

ลิสต์หรือสตรีม

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

กรณีใช้งานที่เกี่ยวข้อง

ลองกับเวิร์กโหลดของคุณเอง

HotKV ใช้โปรโตคอลของ Redis คุณจึงชี้ไคลเอนต์ที่มีอยู่มาที่ HotKV แล้วรันคำสั่งเดียวกันนี้ได้