Skip to content

Data Dictionary · Vận hành ​

⚙️ Trang này sinh tự động từ source code bằng scripts/gen-reference.mjs — đừng sửa tay, sửa code rồi chạy npm run gen:reference.

Thuộc Data Dictionary. 2 bảng, queue_dead_letters tới rate_limit_buckets.

queue_dead_letters ​

--------------------------------------------------------------------------- 1. queue_dead_letters — DLQ có đường quay lại (AS-08.2.3) --------------------------------------------------------------------------- wrangler.jsonc đã khai dead_letter_queue 'nemo12-events-dlq' với max_retries 5, nhưng message rơi vào đó thì hiện không ai biết và không có cách chạy lại. Bảng này là sổ của DLQ: giữ nguyên payload để replay được, giữ error để biết vì sao chết, giữ replay_status để không replay hai lần.

migration: 0036_ops.sql

CộtKiểuRàng buộc / ghi chú
idTEXTPRIMARY KEY
message_idTEXTNOT NULL, -- id message của Cloudflare Queues
queue_nameTEXTNOT NULL
payload_jsonTEXTNOT NULL, -- nguyên văn body để replay đúng như cũ
error_textTEXT, -- lỗi lần cuối khiến message bị đẩy sang DLQ
received_atTEXTNOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))
replayed_atTEXT—
replay_statusTEXT—
—table constraintCHECK (replay_status IN ('pending','replayed','failed','discarded'))

Index: idx_dlq_message(queue_name, message_id) UNIQUE · idx_dlq_status(replay_status, received_at DESC)

rate_limit_buckets ​

--------------------------------------------------------------------------- 2. rate_limit_buckets — cửa sổ đếm request --------------------------------------------------------------------------- Chọn D1 chứ không phải KV, vì hai lý do: KV eventually consistent giữa các colo nên hạn mức bị rò (mỗi colo đếm riêng), và ta cần đọc lại được ai đang bị chặn khi điều tra sự cố. Đổi lại là mỗi lần đếm tốn một lượt ghi D1 — chỉ đặt trên các route đắt tiền (gọi AI, đăng nhập, gửi bài), KHÔNG đặt trên route đọc thường. key = '<scope>:<định danh>', vd 'ai-chat:user_abc' hoặc 'login:203.0.113.9' window_start = mốc đầu cửa sổ dạng ISO UTC; đổi cửa sổ thì reset count về 1

migration: 0036_ops.sql

CộtKiểuRàng buộc / ghi chú
keyTEXTPRIMARY KEY
window_startTEXTNOT NULL
countINTEGERNOT NULL DEFAULT 0

Index: idx_rate_limit_window(window_start)