Access Hub Collector
Đồng bộ từ mã nguồn lúc 15:42, 03/10/2026
Skip to content
Quan hệ với ADR khác
  1. 0009 Trừu tượng hóa Bus, phân shard...Đang xem
  2. 0012 Bus Redis Streams, outbox dùng...Thay một phần
ADR 0009Chấp nhậnThay một phần ADR 0012

ADR 0009: Trừu tượng hóa Bus, phân shard theo máy chủ ​

1. Định nghĩa interface Bus (Publish, Subscribe). GĐ 1 dùng inproc (channel có giới hạn), GĐ 3 dùng NATS JetStream. 2. Chia 64 shard logic với shard = hash(server_id) mod 64. Mỗi shard có một chủ sở hữu (worker) tại một thời điểm, quản lý bằng lease trong Redis.

Ngày quyết định
30/09/2026
Chấp nhận
30/09/2026
Phạm vi
Collector
Người chấp nhận
Chưa ghi
  1. Đề xuất30/09/2026
  2. Chấp nhận30/09/2026

Trạng thái: Chấp nhận, một phần bị thay thế bởi ADR 0012 (bus là Redis Streams, không phải NATS JetStream ở GĐ 3; interface Bus và 64 shard vẫn giữ). Ngày: 2026-09-30.

Bối cảnh ​

Cần đơn giản ở GĐ 1 (một tiến trình) nhưng phải scale ngang và bền vững ở GĐ 3 mà không viết lại.

Quyết định ​

  1. Định nghĩa interface Bus (Publish, Subscribe). GĐ 1 dùng inproc (channel có giới hạn), GĐ 3 dùng NATS JetStream.
  2. Chia 64 shard logic với shard = hash(server_id) mod 64. Mỗi shard có một chủ sở hữu (worker) tại một thời điểm, quản lý bằng lease trong Redis.

Lý do ​

  • Toàn bộ mẫu của một máy chủ luôn đến cùng một worker, nên trạng thái đánh giá luật nằm trong bộ nhớ, không cần khóa phân tán.
  • Đổi từ inproc sang JetStream chỉ là đổi triển khai, không đổi logic.
  • JetStream: lưu file, nhân bản, consumer bền vững, đủ cho NFR-07 (đệm 2 giờ khi mất TSDB) và nhẹ hơn Kafka để vận hành.
  • 64 shard cố định dễ phân bổ lại, đủ cho hàng chục worker.

Đánh đổi ​

  • Thay đổi số shard sau này cần di chuyển trạng thái, do đó chọn số lớn từ đầu.
  • inproc không bền vững, chấp nhận ở GĐ 1 vì agent còn giữ đệm và ingest trả 503 khi bus đầy.
  • Kafka và Redis Streams đã cân nhắc và không chọn (Kafka nặng vận hành, Redis Streams khó bảo đảm bền vững khi mất Redis).

Hệ quả ​

Xem 04-data-model (Bus) và 08-scaling-ha (sở hữu shard, lease).

Trang này có giúp được bạn không?
Sửa trang này

Nội dung đồng bộ từ kho mã access-hub-collector lúc 15:42, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.