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
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
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://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 ...