Synchronous, Asynchronous và Message-driven programming.
Trong bài này, ta h?y cùng n?m ba khái ni?m v?:
Synchronous và Asynchronous programming:
Ta l?y 1 ví d? cho d? hi?u:
H?m nay, khi c?ng ty NT b? cúp ?i?n, leader quy?t ??nh r? c? team ra Coffee House ?? u?ng n??c và bàn c?ng vi?c. M?i ng??i trong team nhanh chóng ?? v? ??a ?i?m h?n và t? s?p x?p vào các hàng ch? ?? ??i ??n l??t order. Ng??i ??n sau s? ??ng sau ng??i ??n tr??c, và b?t k? ai "l?n hàng" s? b? yêu c?u r?i hàng và ph?i x?p l?i t? ??u. Bên c?nh ?ó, n?u có ai ?ó ch?a cài ??t ?ng d?ng ??t hàng tr??c ?ó và c?n s? h??ng d?n t? nhan viên, vi?c này s? làm ch?m quá trình order c?a c? hàng.
Trong ví d? này, các nhan viên trong c?ng ty NT có th? ???c xem là các client, trong khi m?i nhan viên c?a quán là các service trong server. Client t??ng tác tr?c ti?p v?i service, ?ó là hình ?nh c?a synchronous programming - l?p trình ??ng b?. Client ph?i ??i cho t?i khi service x? ly xong request m?i có th? th?c hi?n các thao tác ti?p theo. Nh? v?y, m?u ch?t c?a synchronous programming kh?ng n?m ? s? l??ng client, s? l??ng request hay s? l??ng service mà n?m ? cách client và các service t??ng tác v?i nhau.
??Qu?n ly ?? t?ng hi?u su?t lên b?ng cách:
Sau khi quan sát, qu?n ly c?a c?a hàng ph?i ra quy?t ??nh t?ng c??ng thêm nhan viên order và m? thêm các qu?y, ?i?u này giúp c?i thi?n ?áng k? t?c ?? ph?c v?.
?? Nh?ng trong th?c t? làm vi?c này là kh?ng kh? thi, và nó c?ng kh?ng gi?i quy?t tri?t ?? v?n ?? giao ti?p, ch? ??i gi?a Service - Client.
Gi?i pháp khác ???c ??a ra:
M?i khách vào s? ch? c?n th?ng báo v?i nhan viên nh?ng món mà mình mu?n order, nhan viên xác nh?n. Trong lúc nhan viên nh?p và x? ly yêu c?u order thì khách có th? ?i t?i ch? ng?i và làm vi?c khác. Khi order hoàn thành, nhan viên s? th?ng báo khách t?i l?y và thanh toán.
?ay là hình ?nh c?a asynchronous programming. Ta s? tách bi?t gi?a khau request và response, client và service v?n có th? t??ng tác tr?c ti?p v?i nhau nh?ng kh?ng c?n ch? ??i nhau.
Ch? c?n service g?i l?i tin nh?n ?? xác nh?n thì client có th? làm vi?c khác trong th?i gian service x? ly yêu c?u. Khi nào xong thì service s? th?ng báo.
?????? Khi tách bi?t ???c hai lu?ng request và response, ta hoàn toàn có th? th?c hi?n giao ti?p gi?a nhi?u service v?i nhau.
?? Tuy nhiên ph??ng án này s? v?n g?p ph?i v?n ??:
Message-driven programming:
?? ??i v?i tr??ng h?p này sau khi trao ??i v?i các chuyên gia thì l?a ch?n s? d?ng d?ch v? bên th? ba, c? th? ? ?ay là d?ch v? SMS.
Khách hàng s? order qua h? th?ng SMS, h? th?ng x? ly và g?i request t?i các c?a hàng, nhan viên ?? th?c hi?n nhi?m v?. ?i?u này có l?i th? là n?u c?a hàng này ?óng c?a thì s? có c?a hàng khác, ho?c n?u mu?n th? n??c ho?c bánh ? các c?a hàng khác nhau thì c?ng ch? c?n li?t kê ra danh sách và ??t nó vào trong m?t request. Nhi?m v? còn l?i là vi?c c?a h? th?ng SMS. Trên th?c t? ?? có nh?ng ?ng d?ng áp d?ng ph??ng pháp này nh?: Grab, Beamin, Now,…
Message-driven programming giúp các service và client kh?ng c?n t??ng tác tr?c ti?p v?i nhau. T?t c? request s? ???c g?i d??i d?ng message cho bên th? ba. Bên th? ba s? có nhi?m v? ?i?u h??ng message ??n ??a ch? c? th? v?i hai m?c tiêu:
Message Broker:
V?i ví d? trên, ta th?y r?ng h? th?ng SMS có ch?c n?ng là ?i?u h??ng, trung chuy?n message t? ng??i g?i t?i ng??i nh?n v?i 4 ?u ?i?m chính:
Message distribution patterns:
Message Broker cung c?p 2 pattern chính ?? x? ly vi?c ?i?u h??ng message:
Tóm l?i:
M? hình s? d?ng Message broker:
Kh?ng còn khái ni?m Client và Server mà thay vào ?ó s? là producer/publisher và consumer/subscriber. V? b?n ch?t nó v?n là m?t bên g?i m?t bên nh?n.
T?ng k?t:
Ta th?y r?ng h? th?ng message broker có nhi?u ?u ?i?m trong quá trình g?i và nh?n message cùng v?i s? ??m b?o message ???c ?i t?i ?ích. V?i nh?ng ?u ?i?m nh? v?y Apache Kafka ???c ra ??i v?i hi?u su?t m?nh m? và s? an toàn cho d? li?u.
Fullstack Software Engineer, AWS Cloud Practitioner
3 天前m? hình message broker gi?ng ki?u facade design pattern