Samza Aeon: Latency Insights for Asynchronous One-Way Flows
Bài tóm tắt LinkedIn 2018 3. Quy mô lớn Độ khó: Trung bình
LinkedIn · 2018 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Metric request/response chỉ đo được tới khi response trả về. Một request khởi động chuỗi xử lý bất đồng bộ qua nhiều hệ (gửi tin nhắn → push notification tới APNS/GCM) trông như rất nhanh trên dashboard nhưng thật ra kéo dài không đo được.
Thay đổi chính
- Chọn event bắt đầu và event kết thúc của luồng (ví dụ nhận request tạo tin nhắn và lúc publish push tới APNS/GCM), cả hai đều là tracking event đã có trên Kafka.
- Aeon trên Samza gồm hai job:
- Partitioner: đổi khoá theo trường chung (ví dụ
pushId) để cặp start/end về cùng một Joiner. - Joiner: giữ cache trong bộ nhớ các event chưa ghép, ghép xong thì trừ thời gian phát và đẩy latency lên inGraphs; entry tự hết hạn sau vài phút để không đầy bộ nhớ.
- Partitioner: đổi khoá theo trường chung (ví dụ
- Ứng dụng: push notification từng chậm thất thường; đưa từng đoạn của luồng vào Aeon chỉ ra đoạn gây trễ, sửa xong đặt alert theo SLA nội bộ. Real-time Platform theo dõi typing indicator, seen receipt và giao tin nhắn.
- Theo bài, công cụ được dùng rộng vì dựa trên tracking event sẵn có, onboard đơn giản, và team Realtime vận hành hộ.
Vì sao
- LinkedIn đã phát tracking event cho gần mọi hành động, nên đo luồng bất đồng bộ chỉ cần một stream join chứ không cần sửa code các hệ trong luồng.
Bài học cho SWE
- Với luồng một chiều, latency đầu-cuối là một stream-stream join theo khoá chung trên event start/end, cửa sổ có TTL.
- Đo từng đoạn của luồng để biết đoạn nào gây trễ trước khi tối ưu.
Liên quan
- LinkedIn 2015 (trace cho luồng đồng bộ) · LinkedIn 2018 · LinkedIn 2013
- Tracing phân tán và log theo request · Stream processing · Observability và monitoring
#Async latency#one-way flow#tracking events#Kafka#Samza#partitioner#joiner#stream-stream join#TTL cache#inGraphs#push notification#ATC#real-time platform
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (1)