[フレーム]
BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

InfoQのすべての体験をアンロックして、そのメリットを最大限に活用しましょう

ログインして、InfoQのすべての体験をアンロックしましょう!お気に入りの著者やトピックの最新情報を入手し、コンテンツと交流し、限定リソースをダウンロードできます。

ログイン
または

アカウントをお持ちでない方

登録
  • あなたにとって重要なトピックや同僚の最新情報を入手しましょう最新の洞察とトレンドに関する最新情報を即座に受け取りましょう。
  • 継続的な学習のために、無料のリソースに手軽にアクセスしましょうミニブック、トランスクリプト付き動画、およびトレーニング教材。
  • 記事を保存して、いつでも読むことができます記事をブックマークして、準備ができたらいつでも読めます。

Topics

地域を選ぶ

InfoQ ホームページ ニュース Slackのリアルタイムメッセージングアーキテクチャ

Slackのリアルタイムメッセージングアーキテクチャ

2023年5月24日 読了時間 3 分

作者:

翻訳者

Slackは最近、世界中で毎日数百万件のリアルタイムメッセージを送信する方法を公開した。同社は、リアルタイムメッセージを大規模に管理するために設計されたPub/Subアーキテクチャについて包括的な洞察を提供している。この記事では、異なるタイムゾーンや地域をまたぐリアルタイムメッセージの配信がもたらす独自の課題と、それを処理するためにSlackのエンジニアがどのようにインフラを設計したかが紹介されている。

SlackのシニアソフトウェアエンジニアであるSameera Thangudu氏は、このアーキテクチャの重要性を説明している。

私たちのサーバーは、ホストごとに数千万のチャンネルと接続された数千万のクライアントを提供し、システムは500ミリ秒で世界中にメッセージを配信しています。現在のアーキテクチャの線形なスケーラビリティにより、私たちの予測ではさらに多くのお客様にサービスを提供できるのです。

彼女は同社がより多くの顧客にサービスを提供するために、そのアーキテクチャを強化する計画であると述べる。

システムのバックエンドは、いくつかのサービスから構成されている。チャンネルサーバー(CS)は、チャンネル履歴を保持するステートフルなインメモリサーバーだ。一貫したハッシュメカニズムにより、各CSはチャンネルのサブセットにマッピングされる。ピーク時には、各ホストが約1600万チャンネルに対応する。コンスタント・ハッシュ・リング・マネージャー(CHARM)は、CSのコンスタント・ハッシュ・リングを管理し、20秒以内に不健康なCSを交換することを保証する。Consulは、一貫性のあるハッシュの最新構成を保存するのだ。

画像

Source: https://slack.engineering/real-time-messaging/

Gateway Servers(GS)は、CSと同様にステートフルなインメモリサーバーだ。ユーザー情報やWebSocketチャネルのサブスクリプションを管理し、SlackクライアントとCSの間のインターフェイスとして機能する。GSは接続速度を最適化するために、複数の地域に配置されるのだ。Admin Servers (AS)はステートレス、インメモリサーバーで、WebappバックエンドとCSの間のインターフェイスである。最後にプレゼンスサーバー(PS)はオンラインユーザーを追跡し、Slackクライアントの緑色のプレゼンスドットを表示する機能を提供するのだ。

すべてのSlackクライアントは、Slackのサーバーとの永続的なWebSocket接続を持ち、状態を維持するためのリアルタイムイベントを受信する。クライアントは、WebアプリのバックエンドからユーザートークンやWebSocket接続の設定情報を取得するなど、いくつかのステップを経てWebSocket接続をセットアップするのだ。その後、クライアントは最も近いエッジリージョンへのWebSocket接続を開始し、GSはユーザー情報を取得し、クライアントに最初のメッセージを送信する。Envoyは受信トラフィックの負荷分散を行い、TLSの終了を処理する。

画像

Source: https://slack.engineering/real-time-messaging/

クライアントの設定が完了すると、チャネルで送信された各メッセージは、そのチャネルでオンラインになっているすべてのクライアントにブロードキャストされる。メッセージは、Webapp API、AS、CSを経由して、世界中のGSに送信されるのだ。メッセージを受信した各GSは、そのチャネルIDに登録されているすべての接続クライアントにメッセージを送信する。

画像

Source: https://slack.engineering/real-time-messaging/

チャットメッセージとは別に、イベントはリアルタイムでクライアントの状態を変化させるもう一つのメッセージタイプである。ユーザーがチャンネルに入力するような一時的なイベントは、データベースがこれらのイベントを永続化しないため、少し異なるフローに従う。下図はこのフローを表している。

画像

Source: https://slack.engineering/real-time-messaging/

作者について

Eran Stiller

もっと見るより少なく

この記事に星をつける

おすすめ度
スタイル
  • 関連記事

    • 関連スポンサーコンテンツ

特集コンテンツ一覧

InfoQ ニュースレター

毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。 サンプルを見る

We protect your privacy.

BT

AltStyle によって変換されたページ (->オリジナル) /