Log開発のことから合間に読んだ本の感想まで、マイルドに書きます2019-07-31メッセージング基盤のNATSを超ざっくり解説するシステム間を疎結合に保ちつつ非同期で通信しようとすると、必然的にメッセージング基盤が必要になります。Pub/Subを使うのが一番です。(自分で環境を立てなくて済むならその方法を選択した方がいいというのが自論です)ただし、手元に環境を用意したり接続用のロールやサービスアカウントを作るのは面倒です。OSSはどうでしょうか?メッセージングやストリーミング処理のデファクトスタンダードとなっているKafkaという素晴らしいプロダクトがあります。耐障害性もありスケーラビリティを実現するためにZookeeperの複雑性を受け入れなければいけないので、これまた面倒臭いです。Cloudのようなマネージドサービスを使う手もあります)aws.amazon.comでは、もっと簡単にPub/Subスタイルのメッセージングを自前で用意できないのかと探して見つけたのがNATSでした。NATSは何が特徴で何が他よりもすごいのか、頭の整理のためにもブログ記事として書き記しておきます。messagingメッセージのやりとりは全てSubjectを通じて行います。SNSのようなPub/Sub型のメッセージングに慣れた方はメッセージの購読にTopicやSubscriptionを作成したでしょう。TopicやSubscriptionがありません。Subjectただ1つです。PublisherはSubjectを指定してメッセージを配信し、同じSubjectを購読しているSubscriberにNATSがメッセージをルーティングしてくれるのです。「NATSは(メッセージ)キューではなくルータ」であると主張している方もいます。Subject全てのメッセージのやりとりはSubjectを通じて行うと書きましたが、配信先は1つに限定されません。Subjectにはワイルドカードを使えます。向けて配信したメッセージのどちらからも受け取れます。ようなさらに下の階層までSubjectが指定されてメッセージが配信され場合はSubscriberはメッセージを受け取れません。いうもう1つのワイルドカードを使ったSubjectならば受け取ることができます。Kafkaに慣れた方ならば、1Topicに対して複数のSubscriptionがぶら下がり、これらのSubscription全てをSubscribeしている状態をイメージしていただくと良いです。messagingメッセージングのスタイルにも3種類あります。GroupPub/Subを拡張してメッセージの返信(Request/Reply)もできることが特徴です。Queueというものができましたが、やっていることはこれと近いですね。Groupのようなロードバランサーの仕組みがあるのも特徴ですね。Configuration設定なしにメッセージングを始められるのも特徴です。以下のようなことを実現するのに設定は全く不要です。サーバーやクライアントを構成したら自動的に設定されます。Clientクライアントも実装が楽チンです。クライアントライブラリ自体が30以上の言語の実装があり、インターフェイスもシンプルであるためです。例にとると、以下のようにしてメッセージの配信・購読が可能になります。NATS全てのメッセージがSubjectを通じてやりとりされるため、クライアント側も実装が簡単です。見た目もスッキリしていますね。ONCENATSはメッセージを1回しか配信しません。Once戦略)これはディスクやDBのような2次ストレージにメッセージを保存していないためです。裏を返すとメッセージを管理する手間が省けるのでシンプルではあると言えます。購読する前に配信されたメッセージを再送する手段がありません。その一方でKafkaは稼働しているマシンのディスクにメッセージを書き込んでいるため、始点を指定してメッセージを再送できます。once)配信できるようになります。月別アーカイブはてなブログをはじめよう!accelerkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。