You are on page 1of 11

Tìm hiểu về NATS và những thứ có liên quan (Thu Hoạch Tuần 1)

1. Giới thiệu về NATS (chỉ tìm hiểu về NATS CORE)


1.1. NATS là gì
Theo tài liệu từ nhà phát triển, NATS là một công nghệ mã nguồn mở
được thiết kế để truyền tin và kết nối các máy tính hoặc máy chủ với hiệu suất
cao. Chức năng chính của NATS là đơn giản hóa đáng kể cách các dịch vụ của
bạn giao tiếp và quản lý luồng dữ liệu trên tất cả các hệ thống của bạn. Điều
này được thực hiện mà vẫn đảm bảo tính linh hoạt và khả năng thích ứng cao,
giúp bạn giải quyết các thách thức quy mô toàn cầu một cách dễ dàng hơn. Nói
một cách đơn giản, NATS giúp bạn thực hiện các công việc như đa đám mây,
đa địa điểm, thậm chí là mở rộng ra ngoài biên giới một cách thuận tiện hơn.
Hiện tại, tin nhắn trong NATS được chia thành hai phần:
 Nats Core: Giao diện lập trình ứng dụng (API) truyền tin tiêu chuẩn
của NATS.
 Jetstream: Một tầng được xây dựng trên nền Nats Core, cung cấp tính
năng truyền tin liên tục và khả năng xem dữ liệu cụ thể như giá trị-đối
và lưu trữ đối tượng.

1.2.Tại sao phải dùng NATS


NATS là một hệ thống truyền tin và messaging được thiết kế để giải quyết
nhiều vấn đề trong việc phát triển và quản lý các ứng dụng phân tán và hệ
thống microservices. Dưới đây là một số lý do tại sao người ta chọn sử dụng
NATS và cách họ sử dụng nó:
 Hiệu suất cao: NATS được thiết kế với hiệu suất cao là ưu tiên hàng
đầu. Nó cho phép truyền tin nhanh chóng và có thời gian phản hồi
thấp, điều này rất quan trọng trong các ứng dụng yêu cầu xử lý dữ liệu
thời gian thực hoặc đòi hỏi tương tác nhanh.
 Sự đơn giản: NATS có giao diện sử dụng đơn giản, dễ dàng triển khai
và quản lý. Điều này giúp giảm thiểu thời gian và công sức cần thiết
để tích hợp NATS vào ứng dụng hoặc hệ thống hiện có
 Khả năng mở rộng: NATS cho phép bạn mở rộng hệ thống một cách
dễ dàng bằng cách thêm các máy chủ NATS mới. Điều này giúp bạn
xử lý tải công việc lớn và đảm bảo tính sẵn sàng và khả dụng.
 Độ tin cậy: NATS cung cấp các tính năng bảo mật và độ tin cậy để
đảm bảo rằng dữ liệu được truyền tải một cách an toàn và đáng tin
cậy.
 Sử dụng trong các trường hợp sử dụng đa dạng: NATS có thể được sử
dụng trong nhiều tình huống, bao gồm việc truyền tin trong hệ thống
IoT, ứng dụng phân tán, hệ thống thời gian thực, và nhiều tình huống
khác.
1.3.Cách thức hoạt động của NATS:
1.3.1. Giới thiệu về message broken
Applications ngày nay càng ngày càng lớn, càng ngày càng phức tạp. Thời
gian và cách thức để giao tiếp giữa các Services lớn đã trở thành một bài toán
lớn. Rất may ta đã có một solutions khá tốt tên Message Brokers.
Message broker là một phần của phần mềm, cho phép services và
applicaiton giao tiếp với nhau thông qua messages. Cấu trúc message thông
thường được định nghĩa sẵn và nó động lập hoàn toàn khỏi services gửi nó.
Message Brokers còn cho phép ứng dụng chia sẻ thông tin với một cái
khác, kể cả là 2 con services viết trên 2 ngôn ngữ lập trình khác nhau!
Khi nói tới Message Broken ta lại đề cập tới 3 khái niệm là Producer,
Consumer và Queue/topic
1.3.1.1. Synchronous Communication
Synchoronous là đồng bộ. Synchronous Communication nghĩa là giao tiếp
đồng bộ. Sender và Receiver sẽ giao tiếp với nhau thông qua Direct
Communication (kết nối trực tiếp).
Ngoài kết nối trực tiếp (Direct Communication), cũng có thể thông qua Load
Balancer như hình dưới

Giao tiếp kiểu này thường yêu cầu cả Sender và Receiver đều phải work
(healthy). Trường hợp một trong hai ngủm thì tính là ngủm (sập hoàn toàn).

1.3.1.2. Drawbacks
Trường hợp giao tiếp trực tiếp (Direct Communication), sẽ có yêu cầu cho
cả 2 services. Cả hai application đều phải đảm bảo ổn và duy trì connection để
có thể hoàn thành một transaction.
Cũng không có vấn đề gì phát sinh để ta phải dùng Message Brokers nếu
cả hai services đều nhỏ, ít xử lí và cho thời gian phản hồi nhanh.
Nhưng đời không như là mơ, trường hợp receiver services xử lí cồng kềnh
và tốn nhiều thời gian thì sao?
Ví dụ ngay và luôn. Giả sử ta đang build một hệ thống xử lí vé (ticket), đã
là vé thì có mua bán, có thanh toán online, có xử lí đặt chỗ.
Fullfilment Services sẽ thực thi nhiều actions, kiểm tra thẻ, thanh toán và
gửi email thông báo thành công cho user. Nếu cả 3 thứ này đều tốn thời gian
thì sao?

Bài toán đặt ra lúc này là user cần có response nhanh nhất?. Không thể
chờ tới khi tất cả các services hoàn thành (giảm performance). Chính lúc này là
lúc Message Brokers ra tay.
Chưa kể là trường hợp có nhiều user truy cập cùng lúc và Services xử lí
lần lượt từng request (là một bài toán mà Message Brokers giải quyết OKE
nhất).
Chúng ta cứ nói đi nói lại rằng Message Brokers sẽ giải quyết, thì bây giờ ta sẽ coi
Message Brokers là gì và nó giải quyết điều gì nhé
1.3.1.3. Message Brokers là gì?
Message Brokers là Kiến trúc phần mềm theo các khối sử dụng queue để
lưu trữ message giữa người gửi là người nhận
Tới đây đã rõ, Brokers có nghĩa là môi giới và siêu đúng trong trường hợp
này. Đứng giữa sender và receicer để nhận messages, đem nó vào queue. Ngon

Đứng giữa hai thằng là ông Brokers, sender lúc này gửi request tới ông
trung gian và có ngay kết quả. Đôi khi là ngay lập tức. Đặt hàng phát là có
thông báo đặt hàng thành công luôn. Quá đã.
Sau khi đã done và Broker trả về cho Sender, lúc này Message Brokers
mới giao tiếp thật sự với Receiver. Đi thực hiện nốt cho xong các công việc
phía BE hoặc dữ liệu. Với kiến trúc này, ta cũng có thể chia nhỏ các services
với nhiều brokers như thanh toán lập hóa đơn, gửi mail, lưu cơ sở dữ liệu,...

1.3.1.4. Message Brokers Benefits


Về những thứ Message Brokers có thể làm được gọi chung là benefit
Chính vì cơ chế đứng trung gian giữa Sender và Receiver nên: Hầu hết
các message brokers đều implement dựa trên publish/subscrible pattern.
1.3.1.5. Message Capabalities
Về những thứ Message Brokers có thể làm, hoặc gọi chung là benefit đi.
Bao gồm một số điểm sau:
 Storing/temporarily buffering the messages
 Message routing
 Transformation validation

Với message brokers, ta cũng có thể đăng kí với các services khác, thông báo tới
end user khi một event nào đó đã hoàn thành.
1.3.1.6. Fault Tolerance
Fault Tolerance là Khả năng chịu lỗi là điểm đáng ghờm mà Mesage
Brokers đem lại. Nó cho phép các services khác nhau giao tiếp với nhau trong
khi một trong số chúng đã ngủm củ tỏi (sập server)
1.3.1.7. Availability và Scalabality trong message brokers
Tính sẵn sàng (availability) và tính mở rộng (scalabality) cũng là 2 điểm
mà Mesage Brokers đem tới. Trường hợp có rất nhiều traffic, thanh niên môi
giới này có thể trả về kết quả nhanh chóng, sau đó đi xử lí từ từ. Điều này giúp
tăng performance và giảm độ trễ của hệ thống

1.3.2. Giới thiệu hệ thống publish-subscribe (pub-sub)


1.3.2.1. Publish-Subscribe Model (Mô hình Publish-Subscribe):
- Kiến trúc dựa trên mô hình phân phối thông điệp publish-subscribe
(Pub-Sub) cho việc giao tiếp một-nhiều.
Cách thức triển khai mô hình Publish-Subscribe, nơi một người gửi
(publisher) gửi một thông điệp trên một chủ đề (subject), và tất cả các
người nghe (subscribers) đang lắng nghe chủ đề đó sẽ nhận được thông
điệp đó.
Mô hình này cho phép sự phân phối thông điệp từ một nguồn đến
nhiều người tiêu dùng một cách dễ dàng, đây là một loại mô hình "fan-
out" (phân phối rộng).

1.3.2.2. Publish-Subscribe Model trong NATS


Thành phần cấu trúc trong công nghệ NATS bao gồm:
- Các Thông Điệp (Messages):
 Mỗi thông điệp trong NATS gồm các thành phần sau:
 Chủ đề (Subject): Mô tả về nội dung hoặc loại thông điệp.
 Dữ liệu (Payload): Dữ liệu thông điệp, thường là một mảng byte.
 Trường tiêu đề (Header Fields): Các trường bổ sung có thể được
thêm vào để chứa thông tin bổ sung về thông điệp.
 Địa chỉ phản hồi (Reply Address): Trường tùy chọn cho phép xác
định nơi mà phản hồi sẽ được gửi đến.
- Kích thước tối đa của Thông Điệp (Message Size):
 NATS giới hạn kích thước tối đa của mỗi thông điệp
(max_payload).
 Mặc định, kích thước tối đa là 1 MB, nhưng bạn có thể tăng nó
lên tối đa 64 MB theo cấu hình máy chủ NATS.
 Tuy nhiên, được khuyến nghị rằng bạn nên duy trì kích thước tối
đa của thông điệp ở một mức hợp lý như 8 MB để đảm bảo hiệu
suất và độ tin cậy.
- Wildcard Subjects (Chủ đề đại diện):
 NATS cho phép subscribers đăng ký sự quan tâm đến các chủ đề
dưới dạng "wildcard subjects," tương tự như biểu thức chính quy.
 Điều này cho phép subscribers lắng nghe thông điệp trên nhiều
chủ đề mà có cùng mẫu hoặc loại thông điệp.

1.3.2.3. Cơ chế hoạt động:


Cơ chế hoạt động của NATS dựa trên mô hình publish-subscribe (Pub-
Sub) và được thiết kế để đảm bảo hiệu suất, tính đơn giản và độ tin cậy trong
việc truyền tin giữa các thành phần của hệ thống. Dưới đây là cơ chế hoạt động
của NATS:
1 Gửi Thông Điệp:
Người gửi (publisher) tạo một thông điệp và gửi nó lên NATS Server thông
qua một chủ đề (subject) cụ thể:
Chủ đề (Subject): weather.nyc
Thông điệp (Message): "Hôm nay có nắng ở New York City."

2 Phân Phối Thông Điệp:


NATS Server nhận thông điệp từ người gửi.
NATS Server xác định các subscribers đã đăng ký cho chủ đề cụ thể.
NATS Server phân phối thông điệp đến tất cả các subscribers đã đăng ký
cho chủ đề đó.
Ví dụ: Subscriber 1 đã đăng ký "weather.nyc," nên nó nhận thông điệp: "Hôm nay
có nắng ở New York City." Từ publisher gửi ở ví dụ bước 1 trên
3 Nhận và Xử Lý Thông Điệp:
Các subscribers đã đăng ký cho chủ đề cụ thể nhận thông điệp.
Subscribers xử lý thông điệp dựa trên nội dung và chủ đề của nó.
Ví dụ: Subscriber 1 nhận thông điệp và xử lý nó.
Subscriber 1: Nhận thông điệp - "Hôm nay có nắng ở New York City."

4 Tích hợp với Wildcard:


NATS cung cấp khả năng sử dụng wildcard subjects. Điều này cho phép
subscribers đăng ký để lắng nghe một loạt các chủ đề có cùng tiền tố hoặc
mẫu thông điệp.
Ví dụ: Một subscriber có thể đăng ký "weather.*" để lắng nghe tất cả các chủ đề
liên quan đến thời tiết.
Subscriber 1: Đăng ký "weather.*"
Subscriber 2: Đăng ký "weather.*"

Khi một thông điệp mới về thời tiết được gửi với chủ đề "weather.boston," cả
Subscriber 1 và Subscriber 2 sẽ nhận được thông điệp:
Subscriber 1: Nhận thông điệp - "Hôm nay có nắng ở Boston."
Subscriber 2: Nhận thông điệp - "Hôm nay có nắng ở Boston."

5 Phản Hồi (Reply) (Tùy chọn):


Người gửi có thể gắn một địa chỉ phản hồi (reply address) vào thông điệp để
nhận phản hồi từ subscribers.
Subscribers có thể gửi phản hồi trực tiếp đến địa chỉ này để tương tác với
người gửi.
Quá trình này đảm bảo rằng thông điệp được phân phối đến các subscribers
đúng chủ đề mà họ đã đăng ký và cho phép các thành phần trong hệ thống
truyền tin một cách hiệu suất và đáng tin cậy.
Ví dụ: Người gửi gửi một thông điệp yêu cầu dự báo thời tiết và gắn một địa chỉ
phản hồi:
Chủ đề (Subject): weather.forecast
Thông điệp (Message): "Dự báo thời tiết cho ngày mai là gì?"
Địa chỉ phản hồi (Reply Address): "reply_to.weather"

Subscriber 1 và Subscriber 2 nhận thông điệp và có thể gửi phản hồi trực tiếp đến
"reply_to.weather" để đáp ứng yêu cầu dự báo thời tiết.

1.4.Nats ClI
Tích hợp nhiều thứ như máy chủ tích hợp và tất cả các tính năng bạn cần
để mô phỏng môi trường của Nats

You might also like