Yandex.Mailでは、クライアント側の高速化に多くの努力を払っています。 Habréでのみ、 レイアウトを最適化する方法について話し、XSLを放棄し、新しいテンプレートエンジンに切り替えました 。
ただし、フロントエンドの最適化だけでなく、速度の向上を実現できます。 今日は、静的Yandex.Mailファイルを静的用の特別なYandex CDNに移動することと、特に地域でこれがどのように作業を加速したかについてお話します。
彼らが移動した場所、新しいホスティングがどのように配置されているのか、なぜこのように配置されているのか、そしてそれがどれくらい速くなったかを測定した方法の詳細については、読んでください。
読み込みが遅くなるのは何ですか?
人がメールに入ると、最初に読み込むのは最小限のHTMLと、いわゆるブートストラップ(ブートローダー)です。 彼は、インターフェイスをレンダリングするために必要なすべてのJavaScriptモジュール、テンプレート、CSSファイルの非同期ロード、および初期データのロードを担当しています。 Yandex.Mailでは、HTMLはメインドメインmail.yandex.ruからダウンロードされ、ブートストラップは静的クラスターmailstatic.yandex.netからダウンロードされます。
モスクワおよびモスクワ地方のいくつかのデータセンターにある約100台の車が含まれます。 このクラスターの唯一のタスクは、メールWebインターフェースの表示と操作に必要な静的ファイルをクライアントに提供することです。
完全な成長の速度の問題を見るためには、Yandex.Mailのユーザーの地理を考える必要があります。 世界最大の国であるロシアについてだけ話しても。 たとえば、シベリア横断鉄道の長さに注目すると、モスクワとウラジオストック間の距離はほぼ9,300 kmです。 もちろん、ユーザーデータを含むパケットは鉄道では移動しません。通信回線に沿って移動します。 また、光ファイバ内のデータ転送速度は、真空中の光の速度の約1.5倍です。 データのルートに沿ったネットワーク機器も遅延の一因となります。 したがって、モスクワのデータセンターからウラジオストクまでのRTTは120〜130ミリ秒、たとえば、ノボシビルスク-約60ミリ秒です。
ローカルサーバー
速度の問題を解決するため、YandexにはCDNホスティング-yandex.stがあります。 Yandex.stはいくつかのマシンのクラスターであり、そのほとんどは、mailstatic.yandex.netのように、モスクワのデータセンターにあります。 しかし、mailstatic.yandex.netとは異なり、彼はロシアの多くの大都市、海外、世界に代表オフィスを構えています。
現在、CDNホスティングは11の地域で300を超えるプロバイダーをサポートしています。 ところで、yandex.stは世界で3番目に人気のあるjqueryライブラリです 。
エニーキャスト技術で動作します。 これは、ユーザーがトポロジ的に最も近いサーバーでファイル要求のプロンプトが表示されることを意味します。 つまり、人がウラジオストクにいる場合、リクエストはウラジオストクにあるサーバーに送信されます。つまり、リクエストがモスクワに送られた場合よりも速く応答を受け取ります。
Yandex.Mailをyandex.stに移動する
引っ越す前に、引っ越しがどれほど効果的で、どのようなメリットがあるかを評価する必要がありました。 これを行うために、センサーを備えたメールWebインターフェースを上回り、グラフを作成し、ユーザーの50%だけをyandex.stに転送しました。 これは、すべてが標準と比較できるように行われました-mailstatic。
Webインターフェースのクライアント部分には、静的読み込み速度用の特別なタイマーが組み込まれています。 最新のブラウザのほとんどに見られるNavigation Timing APIがこれを助けてくれました。 APIは、ユーザーがメールを開き始める時点でのミリ秒単位の精度と、JavaScriptプラットフォーム-必要なすべての静的ファイルが読み込まれる時点を知っています。 2番目のタイムスタンプから最初のタイムスタンプを減算すると、すべての静的がロードされた時間を取得できます。 結果の数値は、他のメトリックとともに、ユーザーからのGET要求によって特別なサーバーに送信されます。
nginxアクセスログのタイミング(もちろん、グラフもあります)とは異なり、このメトリックでは、どのファイルや各ユーザーがロードするかに関係なく、すべてのメールのロード時間を考慮することができます。 大まかに言えば、ユーザーが各ファイルを個別に読み込むのではなく、すべてのメールを読み込む必要がある正確な時間を知ることができます。
理解できない理由により、1パーセント未満のケースでは、これらの数字は露骨に信じられないほどになっています。 たとえば、負または50年に等しい。
このような値をカットするために、ダウンロードの75%、95%、99%が収まるタイムラインを作成することにしました。
しかし、これらの数値は十分ではありません-ファイルサイズとその数の変化を含め、ダウンロード速度は変化しています。 KPIの移行に伴い、他の地域でどのくらいの静的メールがロードされ始めたかを理解するために、各地域のダウンロード速度とモスクワのダウンロード速度を比較することにしました。 つまり、モスクワからの積み込み時間を地域から積み込み時間から遠ざけ始めました。 値が負であることが判明した場合、私たちはすべてを正しく行っていて、この領域の速度が速くなったと考えました。
このグラフは、地域のマシンでいくつかのボトルネックと問題を見つけるのに役立ちましたが、すぐに修正しました。
結果
移動の結果、Yandex.Mailは応答とロードを高速化し始めました。地域によっては、数百ミリ秒から数秒になりました。 ノボシビルスクとカザンの静力学の読み込み速度は、エカテリンブルクとウラジオストクで2倍になり、約1.5倍になりました。
一部の都市での平均静的負荷時間のグラフ
地域サーバーを設定したおかげで、「ホーム」地域で速度を上げるいくつかの方法が見つかりました。Yandex.Mailは地域だけでなくモスクワでも高速になりました。
サイト所有者
プロジェクトでjqueryまたはその他の一般的なjavascriptフレームワークとライブラリを使用している場合、サーバーからそれらを接続できます 。
地域性に加えて、yandex.stはYandex管理者による24時間のサポートを提供しています。 ipv6をサポートし、ダウンタイムを最小限に抑えています。yandex.stを使用する人が増えるほど、jqueryがキャッシュから「洗い流されない」可能性が高くなります。 もちろん、Yandexサービスは既にyandex.stからライブラリを取得しているため、通常のユーザーの場合、これらのバージョンは多くの場合キャッシュにあります。 これは、サイトでyandex.stを使用すると、読み込みが速くなることを意味します。
地域プロバイダーの代表者
すべての地域プロバイダーがルーティングを構成して、ユーザーがローカルマシンに到達するわけではありません。 プロバイダーを代表し、ユーザーのYandexを高速化する(およびトラフィックを減らす)場合は、yandex.st(およびその他のサービス)をサポートするCDNサーバーのトポロジを近接させる必要があります。 これを行うには2つの方法があります。
- Yandexが存在し、CDNサーバーがインストールされているトラフィック交換ポイントに接続し(たとえば、 www.peeringdb.com / private / participant_view.php?id = 1751を参照)、そこでCDNが自動的に動作するようにピアリングを上げます;
- プロバイダーとYandex間のトラフィックが大きい場合(同等または500Mb / s以上)は、noc @ yandex.netに書き込みます。 プロバイダーのネットワークにCDNサーバーをインストールすることを検討する準備ができました。