ADR 0003Chấp nhận
ADR 0003: Ngôn ngữ Go cho agent và collector
Trạng thái: Chấp nhận. Ngày: 2026-09-30.
Bối cảnh
Agent chạy trên Linux và Windows, phải nhỏ, ít tài nguyên, dễ phân phối. Collector phải chịu hàng trăm request mỗi giây với độ trễ thấp.
Lựa chọn
Go, Rust, C#/.NET, Python, PHP (để tận dụng đội Laravel).
Quyết định
Go cho cả hai thành phần.
Lý do
- Biên dịch chéo dễ, binary tĩnh một tệp, không phụ thuộc runtime (khác Python, .NET, PHP).
- Mức dùng bộ nhớ và CPU thấp, đáp ứng NFR-09.
- Thư viện hệ thống chín (gopsutil,
golang.org/x/sys/windows, dịch vụ Windows quax/sys/windows/svc), hệ sinh thái Prometheus, NATS, Redis đều viết bằng Go. - Đồng thời (goroutine) phù hợp máy chủ ingest.
- Dùng cùng ngôn ngữ ở hai repo cho phép dùng chung mã giao thức.
Hệ quả
- Nhóm Laravel cần thời gian làm quen Go (rủi ro R12), giảm bằng cấu trúc dự án đơn giản và review.
- Go từ 1.21 bỏ Windows 7, 8, Server 2012 R2 trở xuống (xem ma trận hỗ trợ).
- Tắt CGO để có binary tĩnh (quy tắc này áp dụng cho Agent, do dự án Agent quy định).