ข้ามไปยังเนื้อหา
บทความทั้งหมด

เปิดตัว Sukarix 0.4.0: ระบบคิว Redis ปริมาณงานสูงสำหรับไปป์ไลน์ที่รับโหลดหนักในการใช้งานจริง

โดย Ghazi Triki · อ่าน 7 นาที

ในบทความนี้

ประกาศเปิดตัวรุ่นใหม่

การรัน Lua แบบอะตอมมิก การตัดรายการซ้ำด้วยการตรวจสอบสมาชิกในตัว การบันทึกความคืบหน้าแบบมีโครงสร้าง และ Dependency Injection แบบเข้มงวด มาดูกันว่า Sukarix มอบขีดความสามารถระดับองค์กรได้อย่างไรโดยไม่ทำให้เฟรมเวิร์กอุ้ยอ้าย และขับเคลื่อนไปป์ไลน์ BigBlueButton Analytics แบบเรียลไทม์ของเราอย่างไร

ในการสร้างระบบแบ็กเอนด์ที่มีความสำคัญสูงและไปป์ไลน์สตรีมมิงแบบเรียลไทม์ ทุกมิลลิวินาทีและทุกเมกะไบต์ของ RAM ล้วนมีความหมาย แม้ PHP สมัยใหม่จะพัฒนาจนแข็งแกร่งทั้งด้านระบบชนิดข้อมูลและความเร็ว แต่เฟรมเวิร์ก PHP ยอดนิยมหลายตัวกลับไปในทิศทางตรงกันข้าม ทั้งลำดับชั้นการสืบทอดที่ลึก โอเวอร์เฮดจาก reflection ที่สูง กราฟการพึ่งพาที่บวมเกินจำเป็น และการบูตที่กินหน่วยความจำหลายเมกะไบต์ ซึ่งทำให้เวิร์กเกอร์ CLI ที่ทำงานต่อเนื่องเป็นเวลานานติดขัด

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

เฟรมเวิร์กนั้นคือ Sukarix วันนี้เราภูมิใจที่จะประกาศเปิดตัว Sukarix 0.4.0 ซึ่งมาพร้อมเอนจินคิวที่แข็งแกร่งบนพื้นฐาน Redis ออกแบบมาโดยเฉพาะสำหรับเวิร์กโหลดไปป์ไลน์แบบหลายขั้นตอน

ทำไมต้อง Sukarix: เกิดจากความท้าทายในการใช้งานจริง

Sukarix ไม่ได้เกิดขึ้นจากแบบฝึกหัดเชิงวิชาการ แต่เป็นผลลัพธ์โดยตรงจากงานวิศวกรรมที่ผ่านการพิสูจน์มาหลายปีในสภาพแวดล้อมใช้งานจริงที่มีทราฟฟิกสูง ได้แก่ การจัดการเหตุการณ์เทเลเมทรีของ WebRTC นับล้านรายการ การประมวลผลการย้ายฐานข้อมูลอย่างต่อเนื่อง และการส่งต่อการเรียก API ผ่าน reverse proxy ที่รับโหลดสูง

Sukarix สร้างขึ้นบนแกนของ Fat-Free Framework (F3) ที่เร็วเป็นพิเศษ จึงยังคงการกำหนดเส้นทางที่รวดเร็วและการใช้หน่วยความจำที่น้อยของ F3 ไว้ พร้อมเพิ่มสิ่งจำเป็นระดับองค์กรสมัยใหม่

  • สถาปัตยกรรม PHP 8.4+ และ 8.5+ สมัยใหม่: ความปลอดภัยของชนิดข้อมูลเต็มรูปแบบ การกำหนดชนิดข้อมูลแบบเข้มงวด และการออกแบบเชิงวัตถุที่สะอาด
  • Dependency Injection (DI) และ IoC ที่ไม่อุ้ยอ้าย: การเริ่มต้น processor แบบไดนามิกโดยอาศัย trait โดยไม่มีคอขวดจาก reflection
  • เครื่องมือสำหรับการใช้งานจริงในตัว: ผสานรวมกับ Monolog อย่างสมบูรณ์ ดีบักด้วย Tracy ย้ายฐานข้อมูลด้วย Phinx และมีชุดเครื่องมือทดสอบ Statera
  • เสถียรภาพมาก่อนการเปลี่ยนแปลงบ่อย: ออกแบบให้การอัปเกรดต้องแก้ไขน้อยที่สุด ปกป้องเวิร์กโหลดใช้งานจริงจากการออกแบบ API ใหม่ที่ทำให้ระบบเดิมใช้งานไม่ได้
ฟีเจอร์ / ตัวชี้วัดSukarix 0.4.0เฟรมเวิร์กขนาดใหญ่ (Laravel / Symfony)ไมโครเฟรมเวิร์กทั่วไป
การใช้หน่วยความจำ (CLI / เว็บ)ต่ำมาก (~2-4 MB)สูง (~15-35 MB)ต่ำมาก (~2-3 MB)
ความเร็วการบูตและการกำหนดเส้นทางทำงานเสร็จในเวลาต่ำกว่ามิลลิวินาทีโอเวอร์เฮดสูงกว่า (สแตก middleware ซับซ้อน)ทำงานเสร็จในเวลาต่ำกว่ามิลลิวินาที
เอนจินคิวสำหรับไปป์ไลน์Lua แบบอะตอมมิกในตัว + การตัดรายการซ้ำชั้นนามธรรมคิวทั่วไป (โอเวอร์เฮดสูง)ไม่มี (ต้องพัฒนาเอง)
เครื่องมือระดับองค์กร (การย้ายฐานข้อมูล, DI, ล็อก)มีในตัวและตั้งค่าไว้ล่วงหน้ามีในตัวไม่มี / ต้องประกอบเองจากหลายส่วน
ความซับซ้อนของกราฟการพึ่งพากระชับ คัดสรรแพ็กเกจ PSRการพึ่งพาเชิงลึกหลายสิบรายการน้อยที่สุด

มีอะไรใหม่ใน Sukarix 0.4.0: การอัปเดตด้านระบบคิว

Sukarix 0.4.0 เพิ่มเนมสเปซ Sukarix\Queue ซึ่งเป็นสถาปัตยกรรมคิว FIFO บน Redis ที่ออกแบบมาโดยเฉพาะเพื่อรองรับปริมาณงานสูง และปรับให้เหมาะกับไปป์ไลน์การประมวลผลแบบอะซิงโครนัสหลายขั้นตอน

การรัน Lua แบบอะตอมมิกและการตัดรายการซ้ำอัตโนมัติ

คิวแบบลิสต์ของ Redis ทั่วไปมีแนวโน้มเกิดสภาวะแข่งขัน (race condition) หรือรายการซ้ำเมื่อเวิร์กเกอร์ล้มเหลว Sukarix แก้ปัญหานี้ด้วยการจับคู่ลิสต์ FIFO ของ Redis กับเซตติดตามสมาชิกคู่กัน ซึ่งทำงานผ่าน สคริปต์ Lua ของ Redis แบบอะตอมมิก การเพิ่มรายการที่อยู่ในคิวแล้วจะไม่มีผลใด ๆ โดยอัตโนมัติ และเวิร์กเกอร์ที่ถูกหยุดกลางคันจะไม่มีทางทิ้งสถานะไว้อย่างไม่สอดคล้องกัน

ติดตามจำนวนครั้งที่พยายามต่อรายการโดยไม่ยัดเยียดนโยบาย

แทนที่จะบังคับใช้ขีดจำกัดการลองใหม่หรือ dead-letter แบบตายตัวภายในเอนจินคิว Sukarix มีตัวนับจำนวนครั้งที่พยายามต่อรายการไว้ใน Redis hash โดเมนธุรกิจของคุณจึงมีอิสระเต็มที่ในการตัดสินใจว่างานที่ล้มเหลวควรลองใหม่ทันที เลื่อนออกไป พักไว้เพื่อตรวจสอบ หรือส่งไปยัง dead-letter

Trait HasQueue พร้อมการเริ่มต้นแบบล้มเหลวทันที (Fail-Fast)

บริการที่ใช้งานคิวสามารถเพิ่มความสามารถด้านคิวได้ง่ายด้วย behaviour trait HasQueue หากยังไม่ได้ลงทะเบียนบริการคิวไว้ใน injector, Sukarix จะโยน \LogicException ที่ชัดเจนตั้งแต่ตอนบูต ป้องกันการแครชจาก null pointer ที่ตรวจหาได้ยากระหว่างการทำงานจริง

QueueProgressLogger แบบมีโครงสร้างและการบันทึกล็อกบนคอนโซล CLI

Sukarix 0.4.0 เพิ่มการบันทึกล็อกแบบมีโครงสร้างที่เครื่องอ่านได้สำหรับเหตุการณ์ในวงจรชีวิตของคิว (เริ่มต้น ความคืบหน้าของแต่ละชุด ปริมาณงาน และการเสร็จสิ้น) ข้อมูลเพย์โหลดจะถูกกรอง (เช่น บันทึกเป็น array[3]) เพื่อรับประกันว่าไม่มีข้อมูลอ่อนไหวของลูกค้ารั่วไหลเข้าสู่ระบบล็อก นอกจากนี้ LogWriter ยังรองรับการแสดงล็อกบนคอนโซลแบบมีสี (เลือกเปิดได้) สำหรับติดตามเวิร์กเกอร์ CLI แบบเรียลไทม์

ตัวอย่างโค้ด: ไปป์ไลน์เวิร์กเกอร์ขณะทำงาน

PHP
// Worker implementation with HasQueue trait
namespace App\Workers;

use Sukarix\Behaviours\HasQueue;
use Sukarix\Behaviours\LogWriter;
use Sukarix\Core\Processor;

class EventIngestionWorker
{
    use HasQueue, LogWriter;

    public function __construct()
    {
        Processor::instance()->initialize($this);
    }

    public function consume(): void
    {
        while (null !== ($payload = $this->queueService->popFromQueue('queue.events.pending'))) {
            try {
                $this->processEvent($payload);
                $this->queueService->clearAttempts('queue.events.failed', $payload);
            } catch (\Throwable $e) {
                $attempts = $this->queueService->incrementAttempts('queue.events.failed', $payload);
                $this->logger->error('Failed processing item', ['attempts' => $attempts, 'error' => $e->getMessage()]);
            }
        }
    }
}

การใช้งานจริง: ขับเคลื่อนไปป์ไลน์แบบเรียลไทม์ของ BigBlueButton Analytics

Sukarix 0.4.0 ทำงานได้อย่างไรภายใต้โหลดระดับองค์กรจริง คำตอบอยู่ที่ แพลตฟอร์ม BigBlueButton Analytics ของ RIADVICE เอนจินวิเคราะห์ข้อมูลแบบเรียลไทม์สำหรับ BigBlueButton ของเรา

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

เบื้องหลัง คิว Redis ของ Sukarix 0.4.0 ประสานการแปลงสตรีมเหตุการณ์ดิบปริมาณมากให้เป็นชุดข้อมูลที่มีโครงสร้าง ซึ่งจัดเก็บในฐานข้อมูลอนุกรมเวลา (time-series) และแสดงผลบนแดชบอร์ดผ่าน Apache Superset ไปป์ไลน์ได้รับประโยชน์โดยตรงจาก

  • ไม่มีการรับข้อมูลซ้ำ: การตัดรายการซ้ำด้วยการตรวจสอบสมาชิกป้องกันการนับตัวชี้วัดซ้ำเมื่อเซิร์ฟเวอร์ส่งสัญญาณซิงก์ซ้ำซ้อน
  • กู้คืนเวิร์กเกอร์ได้ทันที: ทรานแซกชันแบบอะตอมมิกของ Redis รับประกันว่าการรีสตาร์ตเวิร์กเกอร์หรือการปรับขนาดโหนดจะไม่ทำให้ดัชนีคิวเสียหายหรือเหตุการณ์ของการประชุมสูญหาย
  • ใช้ทรัพยากรอย่างมีประสิทธิภาพสูงมาก: เนื่องจากเวิร์กเกอร์ CLI ของ Sukarix ใช้ RAM เพียงเศษเสี้ยวของเฟรมเวิร์กอื่น จึงรันเวิร์กเกอร์คิวพร้อมกันหลายสิบตัวบนเครื่องเสมือนขนาดเล็กได้อย่างสบาย
  • สังเกตการณ์ระบบได้แม้ภายใต้โหลดสูง: QueueProgressLogger แบบมีโครงสร้างช่วยให้เห็นปริมาณงานของเวิร์กเกอร์ การเสร็จสิ้นของแต่ละชุด และข้อมูลวินิจฉัยข้อผิดพลาดได้ทันทีในระบบรวบรวมล็อก

ขยายโครงสร้างพื้นฐาน BigBlueButton ของคุณกับ RIADVICE

ไม่ว่าคุณต้องการแดชบอร์ดเรียลไทม์ BigBlueButton Analytics แบบพร้อมใช้สำหรับมหาวิทยาลัยหรือองค์กรของคุณ ไปป์ไลน์ประมวลผลข้อมูลประสิทธิภาพสูงที่พัฒนาเฉพาะ หรือคำปรึกษาด้านสถาปัตยกรรมสำหรับคลัสเตอร์ BigBlueButton ขนาดใหญ่ RIADVICE พร้อมให้ความช่วยเหลือ

นัดหมายการสาธิตหรือขอรับคำปรึกษา

การอัปเกรดเป็น Sukarix 0.4.0

Sukarix 0.4.0 เป็นการเพิ่มความสามารถทั้งหมด และไม่มีการเปลี่ยนแปลงใดที่ทำให้แอปพลิเคชันเดิมใช้งานไม่ได้ หากคุณใช้ Sukarix 0.3.x บน PHP 8.4+ คุณสามารถอัปเกรดได้ทันทีผ่าน Composer

composer update sukarix/sukarix

อ่านบันทึกการเผยแพร่ฉบับเต็มได้ที่ Sukarix Github Discussions


แท็ก: Sukarix, PHP 8.5, เฟรมเวิร์ก PHP, คิว Redis, การประมวลผลแบบอะซิงโครนัส, BigBlueButton, Learning Analytics, เทคโนโลยีการศึกษา (EdTech), ไปป์ไลน์ข้อมูลแบบเรียลไทม์, RIADVICE, PHP ประสิทธิภาพสูง, โอเพนซอร์ส

แชร์บทความนี้

  • ZcaleRight 1.0.0 พร้อมให้บริการทั่วไป
    BigBlueButton · อ่าน 2 นาที

    ZcaleRight 1.0.0: บริหารเซิร์ฟเวอร์สิบเครื่องได้ง่ายเหมือนเครื่องเดียว

    ZcaleRight จัดสรรการประชุม BigBlueButton ในระบบใช้งานจริงมาตั้งแต่ปี 2019 วันนี้รุ่น 1.0.0 พร้อมให้บริการทั่วไป: เผยแพร่ความสามารถทั้ง 69 รายการอย่างเปิดเผย มีคู่มือในตัวผลิตภัณฑ์ มีข้อตกลงระดับการให้บริการรองรับ และมีเว็บไซต์ของตนเอง

  • การเปิดตัว WebSummoner
    Open Source · อ่าน 4 นาที

    WebSummoner 1.0: ปลุก Selenoid ให้กลับมามีชีวิตอีกครั้ง

    เบราว์เซอร์รุ่นปัจจุบันเจ็ดตัวใน Docker หนึ่งคอนเทนเนอร์ต่อหนึ่งเซสชัน และวิดีโอบันทึกพร้อมเสียง: WebSummoner สานต่อ Selenoid ที่ถูกเก็บถาวรตั้งแต่ธันวาคม 2024 อย่างไร และเหตุใดจึงทำงานเป็นแกนหลักของโครงสร้างพื้นฐานโฮสติ้งของเราเอง

  • การอัปเดต BigBlueButton 2.3.0
    BigBlueButton · อ่าน 1 นาที

    สิ่งใหม่ที่น่าสนใจในการอัปเดต BigBlueButton 2.3.0

    ทำความรู้จักการอัปเดต BigBlueButton 2.3.0 ที่ใช้งานง่ายขึ้น มีเครื่องมือเชิงโต้ตอบใหม่ ประสิทธิภาพดีขึ้น และฟีเจอร์ที่ปรับปรุงสำหรับห้องเรียนเสมือนจริง