HRTWorker: A SharedWorker Framework
Bài tóm tắt Hudson River Trading 2025 3. Quy mô lớn Độ khó: Trung bình
Hudson River Trading · 2025 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Đội Fullstack của HRT xây bộ web app nội bộ "Ops GUIs" cho đội Run The Day và các đội khác theo dõi, phản ứng với trạng thái giao dịch trong ngày: trạng thái process, reject từ sàn, kết quả health check, cập nhật dưới một giây. Kèm một trình dựng dashboard WYSIWYG gồm các widget tóm tắt dữ liệu của app đầy đủ.
- Người dùng thường mở dashboard riêng cùng vài GUI cố định; mỗi tab nạp và xử lý cùng một lượng dữ liệu lớn.
- Ràng buộc: tránh nạp và xử lý trùng mà không đại tu frontend stack (không chuyển sang framework phía server, không bắt hệ giao dịch biết về frontend).
Thay đổi chính
- Dùng SharedWorker (một thread nền dùng chung giữa các tab), nhưng bọc lại vì SharedWorker khó dùng: chỉ nói chuyện qua
MessageChannelthay vì gọi hàm (càng khó với hàm async hay trả nhiều kết quả), structured clone làm mất prototype, và không phải trình duyệt nào cũng có (fallback dễ sai). - HRTWorker: developer viết logic trong một class duy nhất; class đó khởi tạo ở chế độ client trong GUI hoặc oracle trong SharedWorker. Ở client, lời gọi được proxy sang instance oracle.
- Ba phần: quản lý kết nối (oracle theo dõi từng
MessagePort, gán id client để log); giao thức "conversation" trên kênh multiplex (CALL,RESPONSEnhiều lần choAsyncGeneratorđể stream,COMPLETE,ERROR,CANCEL); decorator TypeScript@remoteExecutebiến lời gọi method thành message để không phải viết boilerplate.
Vì sao
- Dồn việc nạp và xử lý dữ liệu về một chỗ cho mọi tab của một người dùng, trong khi developer vẫn viết code như gọi hàm async bình thường.
Bài học cho SWE
- Trùng lặp ở phía client (nhiều tab, nhiều widget hỏi cùng dữ liệu) cũng là một dạng fan-out; gom về một worker dùng chung là cách giảm mà không đụng backend.
- API trình duyệt cấp thấp đáng bọc thành mô hình lập trình quen thuộc (RPC, async generator) trước khi cho cả đội dùng.
Liên quan
- Optiver 2026 (công ty trading khác, cũng dựng công cụ realtime nội bộ) · Hudson River Trading 2025
- Kiến trúc frontend · Realtime và fan-out
#SharedWorker#MessageChannel#MessagePort#structured clone#internal ops GUI#dashboard builder#widgets#deduplicated data loading#RPC over postMessage#AsyncGenerator streaming#TypeScript decorators#cancellation
Được nhắc tới trong
Chủ đề (2)
Công ty (1)