Snapchatは25代の若者の間でよく知られています。 それがどのように機能するかを理解できない場合、あなたはおそらくXNUMX歳以上です。 最も人気のあるソーシャル メディア アプリケーションの XNUMX つである Snapchat は、子供や青少年がまさに望んでいること、つまり日常の出来事を共有しながらクールに見せる簡単な方法を提供します。
ユーザーの行動すべてを記録して公開する Facebook や Twitter とは異なり、Snapchat では消えるはずのメッセージが採用されています (どのように消えるかを見てください)。
Snapchat についてはたくさんありますが、開発者であればさらに詳しくなります。 したがって、この投稿では、Snapchat の概要を説明します。 システム設計 さらに多くの洞察が得られます。
概要
Snapchatは米国に拠点を置く ソーシャルネットワーキング ユーザーがすぐに接続したり、画像を共有したりできるアプリです。
- メッセージと画像 (またはスナップ) には 24 時間の制限があります。 人々が自分のストーリーをグループで共有することを奨励します。
- スナップマップを使用すると、ユーザーは友達がどこにいるかを地図上で確認できます。
- 思い出は、XNUMX 年後に保存または共有した写真を思い出させます。
- Snapchatは若い世代、特に319代の若者に非常に人気があります。 このアプリには 5.4 億 XNUMX 万人のアクティブ ユーザーがおり、毎日 XNUMX 億枚のスナップが送信されます。
重要な設計用語
モノリシック建築 – 他のアプリケーションから独立して動作する単一層アプリケーションは、モノリス (モノリシック アーキテクチャ) として知られています。 モノリスは、タスクを完了するために必要なすべてのアクティビティを実行および処理するように設計されています。 アプリケーションは最初から最後まですべての機能を実行します。
Microservices – モノリスとは正反対です。 Microservices は、アプリケーションをサービスのコレクションとして編成するアーキテクチャ アプローチです。 これらのサービスは、アプリケーションの多くの側面を制御するために使用されます。 顧客が注文し、ウェイターが注文を受けて配達し、シェフが調理します。 この例では、各コンポーネントは独立して機能し、他のコンポーネントとは別個に機能します。 他の人が何をしているかを正確に知る人は誰もおらず、同じ情報にアクセスできる人もいません。
JSONの: JavaScript オブジェクト、リテラル、配列、データの表示に使用できるテキストベースの形式です。 このテキストベースの形式は、読み書きが簡単であり、ソフトウェアで理解しやすいことを目的としています。 JSON は、サーバーとオンライン アプリケーション間でデータや情報を転送するために一般的に使用されます。
編成: 多くの操作を自動化する手法は、オーケストレーションとして知られています。 これらの仕事には、コンピュータ システムとソフトウェアの構成、調整、管理が含まれます。
プロキシ: プロキシは、リソースを探しているクライアントとそれを提供するサーバーの間の仲介者として機能します。
メッシュ: サービス メッシュは、インフラストラクチャ層に層を追加して、プロキシを介したサービス間の規制された監視可能な安全な通信を可能にするソフトウェア アーキテクチャ パターンです。
高レベルの設計
モノリシックな問題
Snapchat は、Google App Engine をベースにしたクラウドベースのモノリスとして誕生しました。 しかし、プログラムの人気が高まり、より多くのユーザーとデータが得られるようになると、スケーラビリティが問題になりました。
さらに、モノリス内の爆発半径が非常に広いため、システム全体に混乱が生じる可能性が高くなりました。 Snapchat の問題の XNUMX つは、リソースへのアクセスをめぐって機能が競合する「コモンズの悲劇」として定義されていました。 機能はアプリの起動時に読み込まれるため、特定の機能の読み込みは速くなりますが、他の機能の読み込みは遅くなります。
また、エンジニアは、サービスが柔軟で効率的になるように、開発の観点からコンポーネントの明確な可視性、分離、所有権を追求しました。
変換
Snapchat が拡大するにつれて、同社はモノリシックなインフラストラクチャをより小さく、より効率的な部分に分割する必要があることに気づきました。 待ち時間を短縮するために、組織はマイクロサービス ベースの設計を開発することを決定しました。
これらの目標を達成するために、Snapchat はスケーラブルな NoSQL データベース サービスである Amazon DynamoDB を使用してソフトウェアを更新することを選択しました。 同社はその努力の結果、待ち時間の中央値を 20% 削減することができました。
このアプリは、同社によって多数の小さなアプリケーションに書き直されました。 Snapchat は、カメラ、チャット、思い出、写真編集、コンテンツ消費、地図などの多数のアプリケーションから始まりました。 これらのプログラムを単一のモノリスに統合することは消費者にとって便利でしたが、良好なパフォーマンスを維持するという点で重大な技術的問題が生じました。
書き換えのために、同社は多くの基本ルールを確立しました。 プリロードしないでください。 各機能は独自のアプリである必要があり、高速である必要があります。 Snapchatは書き換えを可能にするために数カ所で修正を停止し、厳密に技術的な作業とした。
追加機能の統合
Snapchat のカメラ アプリには、レンズ、フィルター、ビット文字、拡張現実アニメーションなどを追加する機能が備わっています。 Snapchat のチャット アプリでは、写真の保存、トークの保存、絵文字の追加なども可能です。
とりわけ、Snapchat のマップを使用すると、必要に応じて友達を監視できます。 思い出、写真編集、コンテンツの消費はすべて、独自の機能を備えた個別の Snapchat アプリです。
メモリーを使用すると、写真やビデオを後で使用できるように保存または変更したり、アップロードしたり送信したりすることができます。 ユーザーは、画像編集を利用してフィルムをカットしたり、テキストを追加したり、ステッカーを追加したりすることもできます。
Snapchat の外部コンテンツ消費とは、さまざまなパラメーターに基づいてユーザーに表示される内容を指します。
Microservices
当時、プログラムはネットワーク クエリを実行するために JSON に大きく依存していました。 ただし、JSON の解析には時間がかかり、非効率的でした。 Snapchat は、この問題に対処するための実装の詳細として、集中ネットワーク管理 API を使用して JSON の使用をマスクしました。
マイクロサービスにより、アプリケーションの状態管理、サービス通信、障害管理という課題が生じます。 Snapchat は、Temporal などのオープンソース テクノロジーを使用してオーケストレーションの問題を克服し、強力で信頼性の高いシステムを構築しました。
その結果、組織はサービス メッシュ設計パターンを使用することを決定しました。 Snapchat は、プロキシとして機能する別のオープンソース ツールである Envoy を使用して、このパターンを実現しました。 Envoy はインフラストラクチャを介してサービス トラフィックのフローを管理し、開発者に潜在的な問題を可視化しました。
Snapchat は、サービス メッシュ内に Switchboard と呼ばれる内部アプリを作成しました。 スイッチボードは Snap のサービスのコントロール パネルとして機能し、ユーザーがトラフィックをシフトしたり、サービスの依存関係 (あるサービスを他のサービスの状態に応じて管理できるようにする機能) を管理したり、リージョンをドレインしたりすることができます。
サービス内の潜在的な構成の複雑さを簡素化するために、Envoy API 全体を公開する代わりに Switchboard が利用されました。 Snap には、サービス メッシュのおかげで、マイクロサービス用の共通の内部ネットワークと地域ネットワークがあります。
同じリージョン内のサービスは、パブリック インターネットを使用せずに相互に接続でき、外部ネットワーク トラフィックが内部ネットワーク部分と通信することはできません。
セキュリティ上の理由から、ゲートウェイのみがインターネットに公開することを許可されます。 たとえば、API ゲートウェイは、クライアント/ユーザーからのリクエストを処理し、ネットワークに沿ってルーティングするフロント ドアとして簡単に機能します。
ネットワークとAPIゲートウェイ
Snapchat クライアントからのすべてのクエリは API ゲートウェイを介して送信されます。 同じ Envoy イメージを使用し、内部マイクロサービスと同じコントロール プレーンに接続します。 コントロール プレーンを使用すると、カスタム Envoy フィルターを有効にすることができます。
Snapchat の認証システム、およびレート制限および負荷制限テクノロジーは、これらのフィルターによって処理されます。 Envoy は、フィルター チェーンが完了した後、サービス メッシュを使用してリクエストを関連するマイクロサービスにルーティングします。
まとめ
Snapchat の API ゲートウェイは、外部トラフィックをアプリの多くの機能にルーティングします。 構成状態を変更するユーザーのリクエストはサーバーによって管理され、 データを提供する アプリの多数のサービスに情報を返します。
全体として、Snapchat の現在の設計は、単一のオペレーティング システム上で実行される複数のプログラム (この場合は Snapchat アプリ) に例えることができます。 Snapchat システム設計の概要を説明するために一生懸命努力しました。 お役に立てば幸いです。
コメントを残す