WhatsApp Toolkitの概要





2014年3月、WhatsAppのチーフエンジニアであるリックリードは、ユーザー数の増加により必要とされた会社のインフラストラクチャの最適化について話しました。 リックの資料、トピックや出版物に関する他のスピーチを研究し、会社の代表者との会話に基づいて準備し、WhatsAppの基本ツールの概要を説明しました。



また、リックのスピーチの記録と彼のプレゼンテーションのスライドを自分で読むこともできます。







WhatsAppのアーキテクチャの説明に移る前に、Facebookが通常のメッセンジャーに190億ドルを支払った理由を理解してみましょう。 Facebookが必要としている主なものは、アクティブなWhatsAppユーザーのほぼ10億人の聴衆であり、それはまだ成長しています。



アナリストのベネディクトエヴァンスは、モバイルアプリケーションの1兆ドルの市場について次のように述べています。 現時点では、数十人の開発者のみが社内で働いているという条件で、10億人以上がメッセンジャーを積極的に使用しています。



WhatsAppの従業員は技術的なソリューションに特に焦点を合わせていませんが、2015年9月にカリフォルニア州サンノゼで会社の開発者Jamshid Mahdaviがインタビューを行い、その間に使用された技術について簡単に話しました。 秘密の一部は、同社がErlangプログラミング言語を使用してサービスを構築することです。







アーランは、前世紀の80年代に始まりました。 電気通信会社のハードウェアおよびソフトウェア会社であるエリクソンのエンジニアは、高速電話ネットワークで動作する言語を開発しました。



「言語を作成し、その言語で何をすべきかを決定する代わりに、彼らはそれが意図する特定のタスクをすぐに特定しました」と、Erlang言語の第一人者フランチェスコ・セサリーニは言います。 -彼はスケーラビリティと信頼性の問題を解決しました。 当時、電話ネットワークは、これら2つの特性を持つべき唯一のシステムでした。」


さらに、Erlangは古いバージョンと新しいバージョンの両方のコードがアプリケーションで同時に機能できる場合に、ホットスワップ可能なコードを提供します。 Erlangのソフトウェアは、ダウンタイムなしでアップグレードできることがわかりました。



WhatsApp は、 SSLおよびTLS暗号化を使用してXMPP(以前のJabber)の存在に関するメッセージと情報を交換するために変更されたプロトコルを使用します。 SSLおよびTLSは、インターネット上で安全なデータ伝送を提供する広く使用されている暗号化プロトコルです。 WhatsAppに加えて、プロトコルはWebブラウザーで使用され、電子メールを操作するときに使用されます。







XMPPアーキテクチャ



ユーザーがアプリケーションを起動するまで、すべての受信メッセージはキューに入れられ、サーバーのメモリに保存されます。 メッセージがユーザーのデバイスに届くとすぐに、サーバーのメモリから消去され、送信者は受信確認を受け取ります。 StackOverflowの参加者の1人がメッセージングプロセスについて説明しました。



「アリスはメッセージをボブに送ることにしました。 AliceのスマートフォンはWhatsAppサーバーとの接続を確立し、そのサーバーが誰のデバイスであるかを決定します。 アリスはTCPメッセージを送信します。「ボブの場合:巨大なモンスターがゴールデンゲートブリッジを攻撃します。」 WhatsAppフロントエンドサーバーの1つがこのメッセージをデシリアライズし、アクターAliceに配信します。



アクターアリスは、メッセージをシリアル化し、アリスの送信済みメッセージと呼ばれるファイルに保存することにしました。 それから、俳優アリスは次のようにそれを俳優ボブに転送することに決めます:「アリスからのメッセージ1:巨大な怪物がゴールデンゲートブリッジを攻撃します。」 アクターアリスはメッセージを送信し、アクターボブからの配信確認を待ちます。



メッセージを受信した俳優のボブは、「ボブへの着信メッセージ」というファイルにメッセージを保存し、手紙の受信通知を送信します。 次に、ボブのスマートフォンがサーバーに接続されているかどうかを確認します。 その場合、アクターBobはTCPを介してメッセージを送信します。



ボブはメッセージを見て、「アリスのために:巨大なロボットを作って彼と戦おう」と答えることにしました。 現在、このメッセージは俳優のボブによって受け入れられ、アリスが人類を救うという考えを得るために上記のすべてのステップを繰り返します”


DBMSとして、約2 TBのRAMを使用し 、約180億件のレコードを保存するMnesia DBマルチユーザー分散システムが使用されます。 Erlangで書かれています。 クエリ処理速度の観点から、かなり効果的な統合が得られます。 メッセージに添付された写真、オーディオ、ビデオがYAWS Webサーバーにアップロードされ、それらへのリンクが受信者に送信されます。



Erlangを使用すると、信じられないほどのスケーラビリティメトリックがもたらされます。 WhatsAppの初期ロードは、サーバーへの200,000の同時接続でした。 少し後に、この数値は大幅に増加し、280万化合物に達しました。 約550台のサーバーこの素晴らしさをすべて処理し、そのうち150台は最大100万台のスマートフォンをサポートするチャットサーバーです。 さらに約250台のマシンがマルチメディアサーバーです。 データベースの操作を担当するノードには512 GBのRAMがあり、通常のコンピューティングノードには64 GBがあります。 High Scalabilityのこの投稿から、スケーリングプロセスの複雑さと特性について詳しく知ることができます。



2015年1月、WhatsAppは人気のモバイルアプリのWebバージョンを開始しました。 これは非常に興味深い点です。というのも、同社はユーザーメッセージをサーバーに保存したことはなく、すべての情報がスマートフォンに保存されていたからです。 開発者が使用したツールを見てみましょう。



Biplav Saraf ブログで、主なフレームワークはReact.js( Facebookからインターフェイスを作成するためのフレームワーク)、 Underscore.js-配列、オブジェクト、関数、およびVelocity.jsを操作するための追加機能を実装するJavaScriptライブラリであると書いています-アニメーションを操作するためのエンジン。



WhatsApp Webは、携帯電話のWhatsAppアカウントに追加されるため、モバイルデバイスに接続してメッセージを同期します。 Webクライアントを使用するには、メッセージングに直接関与しているため、電話をオンにする必要があることがわかります。



Biplavは、Webクライアントを開いてQRコードを表示するとどうなるかを確認するために、Chrome用のプラグインを作成しました。







彼はまず、現在のクライアント、OS、ブラウザに関する情報が送信され、セッションIDが送信されることを発見しました。 Biplavは、リストの3番目のフレームがTTLフレームであると考えています。 QRコードをスキャンすると、モバイルクライアントはWebSocketプロトコルを使用して指定されたチャネルに接続します。 WebSocketは、ブラウザとWebサーバー間のリアルタイムメッセージング用に設計されたTCP接続を介した二重プロトコルです。 Webクライアントは次のフレームを受け入れます。







ハイライトされたフレームは、モバイルクライアントからWebクライアントに送信されたデータが含まれているため、最も重要です。 スマートフォンのバッテリーの状態や、モバイルデバイスが充電中かどうかに関する情報も含まれていることがわかりました。



結論



WhatsAppは、会社の規模は問題ではないことを証明しています。 数十人の開発者のチームは、安価な機器とオープンソースソフトウェアを使用して人気のメッセンジャーを作成することができました。 もちろん、会社が適切なタイミングで適切な場所にあり、適切な顧客に製品を提供したという事実によって一定の役割が果たされましたが、開発者が真の目標を設定して実装を達成したという事実を軽視しません。



会社がこのような大きな成功を収めた方法について尋ねられたとき、マーダウィは自分の目標に集中する必要があると答えました。 「サードパーティのタスク、他の技術、会議などのオフィスでの不要な活動に気を取られないでください」とマダビは指摘します。 WhatsAppの従業員はほとんど会えません。 もちろん、数十人の労働者しかいませんが、彼らはまさにそのような量を達成しています。



PSもちろん、私たちは私たち自身の経験を共有しています-つい最近、1cloudでプロジェクトサイトをアップグレードし、いくつかのユーザー定義関数を開発した方法について話しました。



All Articles