2020/05/21

NATS Messaging 試してみる

WRITER: s.ri

こんにちは。開発G、開発研究チームのサーバサイドエンジニアです。

最近のマイクロサービスのサンプルを作成しながら、様々な技術の中で、メッセージングについて紹介してみます。

NATSとは

NATSはオープンソース、軽量の高性能クラウドネイティブメッセージングシステムです。高レベルの拡張性を備えたpub-subメッセージングシステムです。
NATSと比較されるものはActiveMQ、Kafka、Kestreal、NSQ、RabbitMQ、Redis等がある
(Chart source: bravenewgeek.com/dissecting-message-queues)

 

NATSの主要な機能/特徴は、以下の通りです。

  • 高性能(fast)
  • 常時利用可能(dial tone)
  • 非常に軽量(small footprint)
  • 最大1回の配信(fire and forget)
  • 複数のメッセージ通信モデルとユースケースシナリオをサポート(flexible)
NATS

 

 NATSメッセージングモデル

 

NATSを動かしてみる

以下は、NATSサーバーをダウンロードするためのさまざまなディストリビューションです。
https://nats.io/download/nats-io/nats-server/
様々なクライアント言語提供しているので、ここで確認することができます。
Go言語クライアントを使用してNATSサーバーをインストールすることもできます。
nats-server起動

汎用的なexamplesクライアントとして、メッセージングモデル毎に動作を見てみます。


Pub/Sub

pub-sub
まずはPub/Subを確認するため、以下の準備しておきます。
nats-pubとnats-subクライアントビルドします。

メッセージ受信可能なsubjectをそれぞれchannel.1, channel.2, channel.*起動しておきます。
pubクライアントでメッセージを送ってみます。

マッチングされたsubjects(channel.1, channle.*)でメッセージを受信することがわかります。


Request Reply

request-reply
続いてrequest reply確認する、以下の準備しておきます。
nats-reqとnats-rplyクライアントビルドします。

subject channel.1というsubscribeクライアントを起動します。
channel.1にreplyするクライアント起動します。
準備ができたらRequestを送ってみると、リクエストに対して結果メッセージを受け取っていることがわかります。

SubとReplyはPub/Sub時と同様にメッセージを受け取っていることがわかります。


Queue Groups

queue-groups

最後queue groups確認する、以下の準備しておきます。

nats-qsubクライアントビルドします。

各グループ別にsubscribe (a, b)を起動します。

Pubクライアントからメッセージを送ってみます。

メッセージ送った際のそれぞれのQueue-Subクライアントの出力は以下になります。
group1 a
group1 b

group2 a
group2 b
同じグループ内ではどれか1つのサブスクライバーにメッセージを投げていることがわかります。
メッセージングの基本はここまです。その他にも、
・NATSサーバー認証、権限、セキュリティ、ロギング、モニタリング、クラスタの設定などは、CLIまたは設定ファイルで行うことができます。
 参考:https://docs.nats.io/developing-with-nats/security
・NATSの全体的な統計データは、別のツール(nats-top)を使用して監視することができます。
 参考:https://docs.nats.io/nats-tools/nats-tools

NATS Streamingとは

NATS Serverは、pub / subメカニズムに基づく高性能なnativeのメッセージングシステムであり、メッセージの永続性はありません。NATS Streamingは、NATSを利用したデータストリーミングシステムで、Golangで作成して、メッセージ永続化機能が追加されました。

nats-streaming

NATS Streamingも動かしてみます

nats streamingサーバー

nats streamingクライアント

nats-streaming-server起動します

nats-streamingサーバーはデフォルトでメモリーにデータを保存するので、起動する時storeタイプとdir指定必要です。

monitoring url: http://127.0.0.1:8222/
汎用的なexamplesクライアントとして、動作確認します。

Pubでメッセージ送ってみます。
メッセージを受信できることがわかります。

ファイルで永続化保存しているものを確認します。

最後に

簡単に基本的な機能について試してみました。
今後は、NATS Streamingの詳細やクラスタリングの動作を掘り下げていったり、
Goクライアントの紹介や実際にNATSを使用したサンプルアプリケーションの実装なんかも試してみたいところです。

参考

https://docs.nats.io/

https://synadia.com/

s.ri

s.ri

開発研究チームのサーバエンジニア
Always a student, forever a junior developer