オープンソースのメッセージングソフトウェアNATS 2.0がリリースされた。高度なセキュリティ管理、グローバルなディザスタリカバリ、大幅なパフォーマンス向上が実現されている。NATSは、クラウドネイティブシステム、IoTメッセージング、マイクロサービスのためのメッセージングサービスを提供する、Cloud Native Computing Foundation(CNCF)のインキュベーションプロジェクトである。開発を指揮する企業であるSynadiaによると、最新リリースは、"現代の分散システムに適した高度な通信システムに対する市場ニーズに応える"ことを目標としている。
NATSは、分散システムの通信管理に使用可能な製品グループであり、NATS上に構築されて通信システムを提供するSynadiaによって管理される。 NATSの採用するメッセージングアプローチは、クライアントがURL経由でシステムに接続し、サブジェクトにメッセージをサブスクライブまたはパブリッシュするという、パブリッシャ/サブスクライバモデルである。NATSは、高々1回(at most once)のデリバリを保証する、ファイア・アンド・フォーゲット型のメッセージングシステムであるため、メッセージを受信可能なサブスクライバがいない場合、そのメッセージは失われる。NATSストリーミングを使えば、構成可能なメッセージの永続性が提供され、メッセージ確認応答を経由した、最低1回(at least once)のメッセージ配信が可能になる。
NATSによるPub-Subメッセージング
NATSの2.0リリースは、オリジナルのコードベースがリリースされて以来最大となる機能リリースであり、大規模な分散メッセージングにおける課題をターゲットとしている。NATSチームによると、最新リリースの目標は、総所有コストと保守コストの削減、アイソレーションの改善による運用コストの削減、シンプルなディザスタリカバリの提供、セキュリティ管理の分散化、といったものだ。また、主な新機能としては、アカウント、グローバルデプロイメント、分散セキュリティがある。
アカウントは、安全かつアイソレートされた通信コンテキストを実現する。クライアント接続時に、アカウントを指定するか、デフォルトのグローバルアカウントかを指定する。データはユーザ定義のアクセス制限に基づいてアカウント間で共有されるため、アカウントは必要なサブジェクトとデータにのみアクセスすることになる。アカウントのデータ共有は、サービスあるいはストリームを経由して行う 。サービスは、アカウントによるアクセスを可能にするエンドポイントのように機能する。サービスをエクスポートして、他のアカウントからインポート可能にすることもできる。サービスをインポートすれば、インポートしたアカウントへのリクエスト送信が可能になる。ストリームは、アカウント間の連続的なデータフローを作成する。エクスポートされることで出力が可能になり、インポートされることで入力が可能になる。
NATSグローバルデプロイメントは、リージョンを越えたNATSクラスタによるクラスタのように機能することで、スーパークラスタの概念を備えたグローバルトポロジを実現する。クライアントのルーティングでは、ローカルクライアントが最優先され、次にラウンドトリップ遅延時間 (RTT)を考慮して、スーパークラスタ内で最も遅延の少ないNATSクラスタが選択される。サービスが中断した場合、トラフィックはリージョンクラスタ間で自動的にルーティングされるため、新たな構成を行わなくてもディザスタリカバリが可能になる。スポークとハブのトポロジによるリーフノードも使用可能だ。リーフノードは、指定されたのローカルデータを、より広範なNATSデプロイメントに透過的かつ安全にブリッジするもので、エッジコンピューティングやIoTアプリケーションに使用できる。
NATS 2.0のセキュリティは、オペレータ、アカウント、ユーザを介して管理される。オペレータはシステムのRoot Trustを定義し、アカウントはサービスとストリームの制限や公開を行う。ユーザは、アカウントにアクセスするための特定の資格情報と権限を備える。
NATS自体はGoで記述されているが、C、Java、Elixir、Node.js、Rubyなど、いくつかの言語用のクライアントが提供されている。同種の製品としては、RabbitMQ、Kafka、ActiveMQなどがある。 NATSのインストールと実行に関する詳細な情報は、NATSのドキュメントに記載されている。