Synchronous, Asynchronous và Message-driven programming.

Synchronous, Asynchronous và Message-driven programming.

Trong bài này, ta h?y cùng n?m ba khái ni?m v?:

  • Asynchronous programming.
  • Message-driven programming.
  • Message broker.

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 requestresponse, 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 requestresponse, ta hoàn toàn có th? th?c hi?n giao ti?p gi?a nhi?u service v?i nhau.

  1. Service A g?i request t?i service B.
  2. Service B nh?n ???c request và g?i response xác nh?n.
  3. Service A có th? làm nh?ng vi?c khác trong khi service B x? ly.
  4. Service B s? g?i ph?n h?i ng??c l?i service A sau khi x? ly xong,.

?? Tuy nhiên ph??ng án này s? v?n g?p ph?i v?n ??:

  1. N?u các service b? quá t?i, b? s?p hay t? ch?i nh?n thêm request. Thì client c?n ph?i có c? ch? retry ?? g?i l?i request.
  2. Khi mà client mu?n order các món khác nhau ? t?i nhi?u c?a hàng khác nhau trong h? th?ng thì s? ph?i g?i order t?i t?ng c?a hàng.

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:

  • ??m b?o message ???c g?i thành c?ng.
  • G?i ??n ?úng ??a ch?.

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:

  • Gi?m t?i cho các service b?ng vi?c gi?m t??ng tác tr?c ti?p.
  • L?u tr? request, trong tr??ng h?p server g?p s? c?.
  • Có kh? n?ng phan ph?i request t?i nhi?u service.
  • ??n gi?n hóa quá trình g?i nh?n message trong m?i tr??ng multi-services.

Message distribution patterns:

Message Broker cung c?p 2 pattern chính ?? x? ly vi?c ?i?u h??ng message:

  • Point to point messaging (Queue): là d?ng phan ph?i message gi?a 1 client và 1 ??a ch? service duy nh?t.
  • Broadcast messaging: m?t message có th? ???c g?i t?i nhi?u ??a ch? khác nhau, nh?ng ai subscribe m?i có th? th?y ???c tin nh?n. Pattern ?ó là topic.

Tóm l?i:

  • Nh?n tin gi?a 2 ng??i ta s? d?ng Queue:
  • Nh?n tin gi?a nhi?u ng??i trong group ta s? s? d?ng topic.

M? hình s? d?ng Message broker:

Kh?ng còn khái ni?m ClientServer mà thay vào ?ó s? là producer/publisherconsumer/subscriber. V? b?n ch?t nó v?n là m?t bên g?i m?t bên nh?n.

  • Producer/Publisher: N?i g?i message.
  • Consumer/Subscriber: N?i nh?n message.
  • Message Broker: h? th?ng ?i?u h??ng message.

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.

Reference:

[1]. Dat Bui (August, 8 2021) Message-driven programming v?i Message broker và Apache Kafka

Nguyen Manh Ha

Fullstack Software Engineer, AWS Cloud Practitioner

3 天前

m? hình message broker gi?ng ki?u facade design pattern

要查看或添加评论,请登录