Một số ghi chú về NATS Broker

NATS là gì?

NATS (Neural Autonomic Transport System) là một message broker được viết bằng Go, khá mới mẻ, hiện đại và được sử dụng khá phổ biến.

Ưu điểm của NATS là đơn giản, nhanh, nhẹ và cực kỳ dễ dùng.

Lưu ý : 

Phiên bản NATS broker thông thường không có chức năng lưu trữ các bản tin được truyền tải qua nó. Đối với các hệ thống cần lưu trữ, ghi nhận các lịch sử bản tin, cẩn sự chắc chắn an toàn ta có thể sử dụng NATS Streaming.

NATS Streamming được xây dựng dựa trên NATS Server core nhưng có thể các tính năng như : Lưu trữ bản tin khi qua broker (Memory, File, Database), Sử dụng Google Protocol Buffers binary message, Rate limit cho Publisher và Subscribers, ...

Dưới đây là một số tính năng cơ bản mà NATS cung cấp

Publish-Subscribe

Tính năng cho phép các Publisher gửi bản tin đến một hoặc nhiều các Subscribers

Request-Reply

Tính năng cho phép Publisher có thể nhận phản hồi từ một trong các Subscribers

Queue Groups

Tính năng cho phép tạo nhóm các Subscribers cùng xử lý một subject


Các khái niệm và thành phần trong NATS

Publisher

Thành phần thực hiện quá trình gửi bản tin lên NATS

Subscriber

Thành phần thực hiện việc lấy các bản tin từ NATS về

Subject

NATS truyền và phân loại, gom nhóm các bản tin dựa trên các chủ đề được gọi là Subject. Tên các Subject này được định danh là duy nhất

NATS cho phép các Subscribers có thể nhận được các bản tin từ một hoặc nhiều Subjects khác nhau thông qua việc định nghĩa các wildcards 

NATS dùng ký tự . để phân cách các token trong tên Subject

Một số trường hợp hay dùng

Nhận hết tất cả các bản tin được gửi đến NATS (Subscribe tất cả các Subject) : >

Matching A Single Token

foo.* sẽ nhận bản tin từ các Subject foo.bar, foo.baz, ...  nhưng ko nhận được bản tin từ Subject foo.bar.baz

Matching Multiple Tokens

foo.> sẽ nhận bản tin từ các Subject foo.bar, foo.baz, foo.bar.baz, foo.bar.1, ...

Cluster

Cơ chế này có thể hiểu là chạy NATS trên nhiều instance hoặc cài trên nhiều máy và kết nối chúng lại tạo thành một mạng gọi là Cluster. Việc này giúp tăng tính sẵn sàng và ổn định cho broker và cũng giúp scale mở rộng hệ thống.



Cài đặt NATS Server

Tải binary tương ứng với hệ điều hành đang sử dụng

https://github.com/nats-io/nats-server/releases

Ví dụ ở đây để cài cho Windows 64bit

https://github.com/nats-io/nats-server/releases/download/v2.1.7/nats-server-v2.1.7-windows-amd64.zip

Ngoài ra có thể cài dùng Docker, Cài trên K8S dùng Operator, ...

https://docs.nats.io/nats-server/installation

Chạy với câu lệnh

nats-server.exe

nats-server.exe -c nats-server.conf

Tham khảo việc tạo và thiết lập các thông số cho NATS

https://docs.nats.io/nats-server/configuration

Giám sát

NATS Server đã cung cấp module cho việc giám sát dưới dạng một HTTP server thông qua việc cấu hình ở bên trên. Server này cung cấp các thông tin như

Các thông tin liên quan đến cấu hình hiện tại

Số lượng các client đang kết nối và đã kết nối

Số lượng, dung lượng các bản tin đi đến và ra ngoài tổng hoặc với từng client

Các thông tin liên quan mạng cluster

Các thông tin liên quan đến các Subscribers

...

Tham khảo thêm

http://demo.nats.io:8222

https://docs.nats.io/nats-server/configuration/monitoring

Các công cụ giám sát khác lấy thông tin từ server

Chuyển đổi thông tin giám sát theo định dạng của Prometheus và chuyển đến cho server cài đặt Prometheus

https://github.com/nats-io/prometheus-nats-exporter

Công cụ lấy dữ liệu và hiển thị dưới dạng đồ thị 

https://github.com/repejota/nats-mon

Công cụ dưới dạng binary và hiển thị trên cửa sổ dòng lệnh

https://github.com/nats-io/nats-top

Để test nhanh hệ thống ta có thể dùng sẵn broker được host trên trang chủ của NATS

http://demo.nats.io:4222

Thư viện C#

NATS Server

https://www.nuget.org/packages/NATS.Client

https://github.com/nats-io/nats.net


NATS Streamming Server

https://www.nuget.org/packages/STAN.Client

https://github.com/nats-io/stan.net


Hỗ trợ việc kết nối tới NATS ổn định thông qua các cơ chế retry

https://github.com/App-vNext/Polly


Tham khảo thêm

https://nats.io

https://github.com/nats-io/nats-server

https://github.com/nats-io/nats-streaming-server

https://www.youtube.com/watch?v=VPHGgJiQUHw&t=182s

https://www.youtube.com/watch?v=2-KdyI1bC_s


Tiếp tục cập nhật ...