Dead Letter Message - giải pháp để monitor các hệ thống xử lý bất đồng bộ dựa trên message
Distributed System
7
Message Queue
6
White

Nghia Minh Le viết ngày 26/09/2016

Khi xây dựng hệ thống xử lý bất đồng bộ dựa trên message thì việc monitor có tính chất cốt tử. Đó là một thách thức rất khó khăn, không có một hệ thống monitor tốt thì không thể chạy trên môi trường production. Khó khăn nằm ở chỗ tất cả các module đều giao tiếp thông qua message, mà các message được xử lý bất đồng bộ. Do đó không thể nào biết một message gửi đi thì hiện tại đối tượng nhận đã xử lý được hay chưa. Rất có thể message đó đã được lấy ra khỏi message queue xử lý, nhưng quá trình xử lý gặp vấn đề dẫn tới message đó bị biến mất. Yêu cầu đặt ra phải biết một message gửi đi đang được xử lý thế nào? Việc này phải phát hiện realtime, nhanh chóng đưa ra các cảnh báo nếu một quá trình xử lý message nào đó không thành công. Vì nếu một quá trình xử lý nào đó không thành công có thể dẫn tới toàn bộ luồng xử lý bị tắc lại.

Mấy tuần qua tôi đã đặt ra khá nhiều phương án khác nhau. Các phương án đó nằm ở các hệ thống log nơi xử lý, log các message gửi đi. Nhưng tất cả đều không hoàn toàn chắc chắn. Bởi có thể ngay khi một exception xảy ra thì có thể cả ứng dụng đó cũng có thể bị crash ngay lập tức dẫn tới việc ghi log bị thiếu do đó việc cảnh báo và trace back cũng rất khó khăn, không đáp ứng được yêu cẩu monitor realtime quá trình xử lý các luồng message.

Nhưng cuối cùng một phút lóe lên khi nghe nhạc Jazz tối qua đã phá vỡ những rào cản cuối cùng của việc xây dựng giải pháp monitor. Ý tưởng đó thật đơn giản và trực quan. Nó có liên hệ với cô bạn tối đi nghe nhạc Jazz, khi mà mấy ngày trước tôi có gửi chuyển phát cho một chiếc phone Nokia cho cô ấy. Mặc dù chuyển phát nhanh mà gần tuần rồi cô ấy vẫn không nhận được. Chuyện gì đã xảy ra với gói hàng đó, người chuyển phát có vấn đề hay vì họ không thể tìm được địa chỉ, hay họ tìm được địa chỉ mà không thể tìm thấy người nhận? Trong lĩnh vực bưu chính, nhưng thứ như gói bưu phẩm đó sau nhiều lần không gửi được sẽ xếp vào nhóm dead letter - những lá thư chết. Bởi có thể người nhận đã không còn tồn tại nữa rồi. Vậy thì việc monitor quá trình xử lý một message mà tôi đau đầu sẽ chuyển từ monitor tại điểm đích thì giờ tôi sẽ monitor ở khâu gửi. Nếu quá trình chuyển từ message queue tới nơi xử lý liên tục nhiều lần mà không thành công thì message đó sẽ bị đánh dấu là dead letter. Như vậy nếu message queue có thể hỗ trợ điều đó thì việc monitor thật đơn giản. Tôi chỉ cần theo dõi xem liệu có message nào đó bị xếp vào nhóm deadletter hay không? Nếu có thì message đó hẳn đã gặp vấn đề gì đấy trong quá trình xử lý, ngay lập tức hệ thống cảnh báo được kích hoạt. Và thật tuyệt vời khi nền tảng message queue tôi đang dùng là windows service bus đã hỗ trợ mặc định. Kết hợp với các hệ thống log khác, tôi đã định hình đủ các giải pháp để có thể monitor realtime mọi quá trình xử lý trong hệ thống mà chúng tôi đang xây dựng. Chúng tôi sẽ có thể theo dõi từng bước xử lý của một quá trình nào đó ví dụ như xử lý đơn hàng. Ngay khi lỗi xảy ra, chúng tôi sẽ có thể phát hiện và nhanh chóng can thiệp, xác định nguyên nhân, tiến hành retry hoặc các xử lý khác để việc xử lý không bị gián đoán quá lâu.

Cảm giác thật tuyệt vời, việc nghiên cứu đòi hỏi một sự kiên nhẫn, liên tục suy nghĩ cho tới khi mọi thứ sáng tỏ hoàn toàn. Mấy ngày hôm nay, tôi cảm giác như gần tới đích, nhưng có cái quái gì đó cứ mù mờ không rõ ràng, mấy việc ghi log không thể nào thỏa mãn 100% trong mọi trường hợp. Quả thật lúc nghe nhạc Jazz mà cảm giác như muốn nổ tung, nhưng vẫn đủ kiềm chế để không trở thành thằng dở trong mất mấy em gái Sài Gòn, khi mà nghe Jazz mà vẫn nghĩ tới mấy giải pháp kĩ thuật. Thôi thì đành vào group của nhóm chửi thề loạn xạ lên. Tiên sư, cảm giác thật là tuyệt vời!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Nghia Minh Le

10 bài viết.
120 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
32 0
1. Nguyên lý consistency của relational database – SQL Server. SQL Server nói riêng và các database quan hệ nói chung là dạng database có độ nhất...
Nghia Minh Le viết 2 năm trước
32 0
White
19 0
Nhân đọc cuốn The Pragmatic Programmer Lập trình viên thực dụng, note lại mấy dòng về tính thực dụng trong thiết kế. Có một câu chuyện vui: có căn...
Nghia Minh Le viết 2 năm trước
19 0
White
18 2
Mô hình Event Sourcing là một mô hình thiết kế hệ thống mà theo đó sẽ lưu giữ trạng thái thay đổi của một đối tượng là một chuỗi các thay đổi đã xả...
Nghia Minh Le viết 2 năm trước
18 2
Bài viết liên quan
White
14 1
Transaction và Distributed Transaction là các vấn đề phải đối mặt rất nhiều trong xây dựng các hệ thống lớn Enterprise Software. Nó ảnh hưởng rất l...
Nghia Minh Le viết 2 năm trước
14 1
White
5 0
Tranh chấp tài nguyên là vấn đề lớn cần phải giải quyết trong việc xây dựng hệ thống lớn. Việc tranh chấp tài nguyên ảnh hưởng lớn tới hiệu năng và...
Nghia Minh Le viết 2 năm trước
5 0
White
8 2
Có 5 nhà thám hiểm cùng đi tìm một di tích cổ xưa giữa một một vùng rừng núi rộng lớn. Các nhà thám hiểm đi theo 5 hướng khác nhau, sử dụng radio ...
Nghia Minh Le viết 2 năm trước
8 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
10 bài viết.
120 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!