Slide 1

Slide 1 text

Momento Topics 使ってみた bohnen

Slide 2

Slide 2 text

そもそもTopicsと ? ● いわゆる Pub-Sub 型 メッセージチャネル 一つで、疎結合・非同期なシステム間連 携を実現する ● 一つ メッセージを複数 宛先が読み取る ことが可能 ● AWSだとSNSとかが該当 ● 類似サービス ○ JMS互換 キュー製品すべて ○ Redis pub-sub ○ Kafka ○ SNS (AWS) ○ EventBridge (AWS) エンタープライズアーキテクチャパターン より

Slide 3

Slide 3 text

金融業界で Topics 間に入っているKinesisがシ ステム間 連携を担ってい る。 ここで ポイント 、 ● データ みに依存し た処理(関数型っぽ い) ● 並列に処理が実行で きる。例え 株ならそ れぞれ 銘柄毎 ● 処理がしょっちゅう増 える・変わる。いわゆ るマイクロサービス AWS金融リファレンスアーキテクチャより

Slide 4

Slide 4 text

サンプルプログラム(Momento FX!) Rate Publisher Order Executor (本来 )LP 価格に利益を乗せて顧客に提供する 価格 topicsを使ってリアルタイ ムに同報通信 注文 RESTエンドポイントを呼び 出し 注文が実勢価格よりも一定以上 乖離しているとnothing(失効) 実際 LPに投げる LP(Liquidity Provider) 業者向けに価格を提供して、 そ 値段で注文を受け付け る業者 金融機関や取引所など

Slide 5

Slide 5 text

デモ

Slide 6

Slide 6 text

Rate Publisher 基本これだけ ● TopicClient 初期化 ● Publish 今回 websocketでレートを提供している bitflyer lightning APIを使って、レートを取 得する度にpublishしている (同時に、最新価格を cacheにも保存し、 Execution時に参照する) ※ 全然関係ないけどレート 配信頻度低す ぎない...?

Slide 7

Slide 7 text

Token API Server Topicsにブラウザから直接アクセスするため に必要な一時トークンを発行する API Chatアプリ サンプルからコードを拝借 Next.js わからなかった で使う を諦め、 fastify スタンドアロンサーバとして実装して います。 ここで 接続してきた人に 誰でもトークンを 返していますが、Chatアプリサンプル ように 認証済み 人に み返す がベターでしょ う。(認証APIも課金対象な かな?)

Slide 8

Slide 8 text

UI - トークン 取得 Chatアプリ サンプルからコードを拝借 先ほど REST APIからトークンを取得して、 CredentialProviderを初期化。 ここからtopicClientが取得できる ※変数 命名が変だったり、 cache使ってな い で不要だったり余計なも があります。

Slide 9

Slide 9 text

UI - Topicから 取得 topicClientを使って、topicにsubscribeしま す。こ ときにコールバック関数を渡して、そ れが価格が届いた時 処理になります。 UI側で useEffect内でtopicにsubscribeし、 コールバックでStateを変更して画面に反映し ています。

Slide 10

Slide 10 text

使ってみて ● Web-sdk 楽。間にいちいちwebsocket サーバを立てる必要がない で、テ ストも簡単(クライアントjavascriptだけ書いてでテストできる) ● 実務で利用する場合 同時接続数を気にする必要がある。これが万単位まで できるとかなり便利な で ?! ● 一時トークン 発行がちょっと手間。Signed URLとかでAPIなしで初期化できる ようにならないかなあ ● Typescriptサポートとcopilotが強力すぎて開発体験が爆上がり ● レイテンシ 往復20ms位出る で気になる場合 AWS/GCP内でクライアント を動かした方がよいかもしれない。