Taobaoのイメージアクセスのトラフィックの98%はCDNキャッシュに送られ、2%だけがソースサイトに戻り、多くのサーバーリソースを節約します。
ただし、ユーザー訪問のピーク時に写真の内容が大きく変化すると、多数のユーザーの訪問がCDNに浸透し、元のサイトに多大なプレッシャーがかかります。
今年のダブル11で、タオバオルバンのメインの画像価格表現アップグレードプロジェクトは、この種の課題に直面しました。それを解決する方法を見てみましょう。
CDNのしくみ
コンテンツ配信ネットワーク(CDN)は、ベアラネットワーク上で確立およびカバーされる分散ネットワークであり、さまざまなリージョンに分散されたエッジノードサーバーのクラスターで構成されます。
CDNは広く使用されており、小さな画像ファイル、大きなファイルのダウンロード、ビデオとオーディオのオンデマンド、ライブストリーミングメディア、サイト全体の高速化、セキュリティの高速化など、複数の業界と複数のシナリオでコンテンツの高速化をサポートしています。
アリババクラウドの公式ウェブサイトの例を借りて、CDNの動作原理を簡単に紹介します。
CDNによって加速されたドメイン名がwww.a.comであるとすると、CDNネットワークにアクセスして加速サービスの使用を開始した後、エンドユーザー(Beijing)がHTTP要求を開始すると、処理フローは次のようになります。
エンドユーザー(Beijing)がwww.a.comで指定されたリソースへの要求を開始すると、最初にLDNS(ローカルDNS)へのドメイン名解決要求を開始します。
LDNSは、キャッシュにwww.a.comのIPアドレスレコードがあるかどうかを確認します。はいの場合は、エンドユーザーに直接戻ります。そうでない場合は、承認されたDNSにクエリを実行します。
許可されたDNSがwww.a.comを解決すると、ドメイン名CNAMEwww.a.tbcdn.comに対応するIPアドレスが返されます。
ドメイン名解決要求がAlibabaCloud DNSスケジューリングシステムに送信され、最適なノードIPアドレスが要求に割り当てられます。
LDNSは、DNSから返された解決済みのIPアドレスを取得します。
ユーザーは解決されたIPアドレスを取得します。
ユーザーは、取得したIPアドレスへのリソースへのアクセス要求を開始します。
-
IPアドレスに対応するノードがリソースをキャッシュしている場合、データを直接ユーザーに返します。たとえば、図の手順7と8で、要求は終了します。
IPアドレスに対応するノードがリソースをキャッシュしない場合、ノードはソースステーションへのリソースの要求を開始します。リソースを取得した後、ユーザー定義のキャッシュ戦略と組み合わせて、リソースをノード(図の北京ノードなど)にキャッシュし、ユーザーに返すと、要求は終了します。
この例から学ぶことができます:
CDNのアクセラレーションリソースはドメイン名にバインドされています。
ドメイン名を介してリソースにアクセスするには、最初にDNSを介してユーザーに最も近いCDNノード(エッジサーバー)のIPを見つけることです
IPを介して実際のリソースにアクセスするときに、CDNにキャッシュされたリソースがない場合、リソースはオリジンサイトから要求され、CDNノードにキャッシュされます。このように、CDNノードは、ユーザーが次にアクセスしたときに対応するリソースキャッシュを持ちます。
タオバオルバンピクチャービジネスの背景
製品のメイン画像は、ショッピングガイドとトランザクションリンク全体に表示されます。テキストと比較すると、画像はより目を引くものであり、メイン画像は消費者の買い物の決定に大きな影響を与えます。本編で表現される内容は様々ですが、その一つが価格の表現であるに違いありません。
長い間、メインマップの価格表現は商人によって維持されており、商品価格が変更された後、マップは手動で変更されます。そうすることは3つの問題をもたらします:
価格の正確性:販売者が手動で入力した画像の価格が実際の購入価格と一致しない場合、ユーザーエクスペリエンスが低下する可能性があります。
価格更新の適時性:クーポン/カテゴリクーポンの無効により、製品の価格が頻繁に変更され、販売者が画像を変更する時間がない場合があります。
マーチャントの運用コスト:画像の価格を手動で変更しますが、コストは依然として非常に高いため、ps、再アップロード、製品の編集などのソフトウェアを使用して画像を変更する必要があります。
今年のダブル11では、タオ部門の技術部門のルバンチームが技術的な手段でこれらの問題を解決しようとしました。商品価格が変更されると、システムは自動的に新しい価格を計算し、画像を自動的に合成してから、商品のメイン画像を更新します。
Taobaoには数億の製品があり、Everbrightには数千万の製品があることがわかっているため、価格の変更による画像の変更の頻度は非常に高くなります。最高点はダブル11の0時です。すべての主要なプロモーションの価格は、毎日の価格から主要なプロモーションの価格に変更されます。
これは、プロモーションのピーク期間中に、ユーザーが生成されるとすぐに数千万の写真にアクセスすることを意味します。それでは、この状況でどのような問題が発生するのか、まずタオバオの画像空間とCDN構造を理解してみましょう。
タオバオ画像空間とCDNアーキテクチャ
Taobaoの画像アクセスリンク全体には3レベルのキャッシュ(クライアントローカル、CDN L1、CDN L2)があり、すべての画像はOSSに永続的に保存されます。実際の画像処理はimg-picassoシステムであり、OSSからのファイルの読み取り、画像サイズのスケーリング、エンコードとデコードなどの機能がより複雑であるため、マシンのコストが比較的高くなります。
CDNキャッシュは2つのレベルに分割され、L1とL2の比率が合理的に割り当てられます。一方で、一貫性のあるハッシュを使用して、同じリソースの下でより多くのコンテンツをキャッシュし、全体的なキャッシュヒット率を向上させることができます。コンピューティングとIOのバランスを取り、さまざまな構成のマシンの機能を最大限に活用します。
ユーザーが写真にアクセスするためのプロセスは次のとおりです。
ユーザーは携帯電話のタオバオで商品を検索したり、赤ちゃんの詳細を確認したりできます。
Details / search / recommendationは、製品センターに電話して、製品の画像URLを返します。
クライアント上にローカルに画像のキャッシュがある場合、画像は直接レンダリングされます。それ以外の場合は、次のステップが実行されます。
CDN L1からソース画像を返します。L1に画像のキャッシュがある場合、クライアントは画像をレンダリングしてローカルにキャッシュします。L1にキャッシュがない場合は、次の手順に進みます。
CDN L2からソース画像に戻り、L2に画像のキャッシュがある場合、クライアントは画像をレンダリングし、CDN L1とクライアントは画像コンテンツをキャッシュします。CDNL2が画像をキャッシュしない場合は、次の手順に進みます。
画像スペースからソース画像に戻ると、画像スペースはOSSから画像ソースファイルをプルし、必要に応じてサイズを拡大縮小してからコーデックを実行し、クライアントがサポートできる画像コンテンツを返します。その後、クライアントは画像とCDNL1をレンダリングできます。 、L2とクライアントは、画像コンテンツをキャッシュします。
頻繁な画像変更によってもたらされる技術的課題
製品の価格が変更された場合、新しい価格で画像を再合成し、製品センターに保存されている画像のURLを更新します。これは2つの問題をもたらします:
CDNとモバイルTaobaoの元のキャッシュされた画像コンテンツは無効であり、ユーザーがアクセスしたすべての画像はimg-picassoに返されます。
製品フィールドの変更により、トランザクションのコアアプリケーション(ショッピングカートと製品センター)のキャッシュも無効になります。ユーザーが閲覧して購入すると、製品へのアクセスはデータベースに移動します。
ソースステーションのimg-picasso画像の処理と製品DBのクエリは、非常に多くのリソースを消費します。CDNと商品のキャッシュヒット率が低下すると、元のサイトimg-picsassoとdbに大きな圧力がかかります。
CDNキャッシングを例にとると、単純に計算します。CDNの通常のヒット率は98%です。ヒット率が1ポイント減少すると仮定すると、ソースステーションへの圧力は1/3増加します(元々はトラフィックの2%を負担していましたが、現在は3を負担する必要があります)トラフィックの%)。これは、img-picassoを1/3拡張する必要があることを意味します。ネットワーク全体の写真の半分が同時に変化すると、cdnのヒット率は50%に低下し、img-picassoへのアクセス数は25倍に増加します。この拡張コストは絶対に受け入れられません。
これらの2つの問題を解決するには2つの方法があります。
画像を変更して、画像のURLを変更しないようにします。これにより、商品リンクのキャッシュ障害を回避できます。
訪問のピークが来る前に、事前に写真をCDNに予熱します。これにより、オリジンサイトでのCDNキャッシュ障害のプレッシャーを回避できます。
次に、この2つのポイントをどのように行ったかを紹介します。
頻繁な画像変更のソリューション
▐ 画像のURLを変更しないように画像を変更します
画像の内容が変わったら、次の2つの操作を行ってください。
OSSコンテンツの更新:OSSの古い画像コンテンツを新しい画像コンテンツに置き換えます
CDNキャッシュの更新:CDNの前にキャッシュされた画像コンテンツをクリアします
このようにして、ユーザーが画像に再度アクセスし、CDNがキャッシュされていないことに気付いた場合、CDNはimg-picassoに戻り、OSSから新しい画像コンテンツをプルします。
画像のURLは変更されていないため、製品センターの画像リンクを更新する必要はなく、製品リンクのキャッシュは変更されません。
このプログラムを実際に実装する過程で、いくつかの問題が発生しました。
OSSの3つの場所の同期
Taobaoの画像スペースは、すべてのTaobao画像のアップストリームとダウンストリームの安定性を保証します。高い可用性を確保するために、リソースは3つのOSSに格納されます。画像をアップロードする場合、デフォルトでは1つの場所のみがアップロードされ、OSSの機能を使用して他の2つの場所に自動的に同期されます。
ただし、URLを変更しないスキームでは、CDNキャッシュがクリアされた後、他の2つの場所のOSSが同期されていない場合、ユーザーはアクセス後に古い画像コンテンツに戻り、画像コンテンツが変更されていないことを確認します。
この問題に対応するため、OSSソフトチェーンを3箇所に非同期同期するモードを変更し、同期的にソフトチェーンを構築しました.3箇所が正常に戻ったら、CDNキャッシュをクリアし、ユーザーがアクセスする画像が最新のコンテンツであることを確認します。
画像サイズの収束
同じ製品画像がピットを示すために異なるシーンに使用され、異なるピットには画像のサイズに対する異なる要件があります。このため、画像スペースは、さまざまなサイズのサムネイルを簡単に生成できる機能を提供します。写真にアクセスするときに、写真に異なるサフィックスを追加するだけで済み、img-picassoソースステーションは必要に応じて写真をズームできます。
歴史的な理由により、以前はズームサイズの種類に制限がなく、CDN +では2,400もの画像サフィックス形式が使用され、TOP6形式で46%、TOP15形式で64%のカバレッジ率が得られました。これは、画像のCDNに最大2400以上の異なるURLが含まれている可能性があることを意味します。画像のコンテンツが変更された場合、ユーザーに表示されるすべての画像が新しいことを確認するために、これらのキャッシュをクリアする必要があります。
この問題を解決するために、ドメイン名の形式を統合しました。
画質圧縮パラメータの画像スペースのルールは次のとおりです。
画質パラメータには通常、Q90、Q75、Q50、Q30、q90、q75、q50、q30の8つの形式があります。
画像シャープニングパラメータには通常、s100、s150、s200の3つの形式があります。
画質を高品質の画像と低品質の画像に再定義しました。収束形式はq90とp50s150です。
このようにして、2,000を超えるフォーマットを6つの主要なフォーマットに統合でき、キャッシュのCDNクリアが可能になります。
複数のコピーでCDNキャッシュをクリアする
画像サイズの収束により、各画像は6つの異なるURLをクリアするだけで済みますが、更新効率をさらに向上させることはできますか?
この目的のために、Alibaba Cloud CDNはマルチコピーリフレッシュソリューションを提供します:異なるサフィックスを持つ各画像は画像のコピーとして使用され、KV構造がCDNの迅速なレイヤーに追加されてURLと異なるコピー間のマッピング関係を保存します。キャッシュをクリアすると、この構造を通じてすべてのコピーを見つけることができ、すべてのコピーをすばやくクリアできます。このように、CDNクリアキャッシュインターフェイスを画像ごとに1回呼び出すだけで済み、CDNキャッシュの更新効率が大幅に向上します。
画像ドメインの収束
タオ県には300種類以上の画像ドメインがありますが、これは主に次の2つの理由によるものです。
画像の完全なリンクが長すぎるため、保存するときに最後の段落のみが保存されることがよくあります。企業はドメイン名を使用し、多くの企業が画像のドメイン名を申請します。
PCの時代では、ブラウザには同じドメイン名での同時リクエストの数に制限があります。ブラウザが異なれば、通常は約6つです。この制限を打破するために、一部の企業は複数のドメイン名を申請し、ランダムに異なるドメイン名を綴ります。
前述したように、CDNキャッシュはドメイン名にバインドされており、キャッシュヒットかキャッシュクリアかに関係なく、1つのドメイン名のみをターゲットにできます。
明らかに、画像を変更して300のドメイン名のCDNリフレッシュを呼び出すことは不可能です。そのため、画像へのすべてのユーザーアクセスが同じドメイン名にルーティングされるように、画像ドメイン名を統合することを検討します。すべての画像アクセスをpicasso.alicdn.comに統合したいと考えています。具体的な実装は次のとおりです。
TaobaoクライアントとMaokeクライアントの両方で、イメージライブラリでイメージアクセスが閉じられます。イメージライブラリの変換を促進し、特定のルールに準拠するURLをpicasso.alicdn.comに統合して、万能のドメイン名を実現します。
PCブラウザ側にとってはもっと面倒で、統一して閉じる場所がありません。最も訪問者の多い6つのドメイン名については、cdnでドメイン名転送ルールを構成し、picassoドメイン名にリダイレクトします。
このようにして、ネットワーク全体の画像アクセストラフィックの99%以上がピカソドメイン名にルーティングされることがわかりました。画像のコンテンツが変更された場合、ピカソドメイン名のcdnキャッシュをクリアすることで、基本的にすべてのシーンで新しいシーンを確認できます。画像コンテンツ。
クライアントとブラウザのキャッシュ
複数のコピーと画像ドメイン名の収束により、CDNのキャッシングの問題が解決されました。ただし、CDNでは、ユーザーの画像アクセスは最初にクライアントまたはブラウザーから行われ、キャッシュのレイヤーもあります。
ご存知のとおり、ブラウザのキャッシュは標準のhttp max-ageプロトコルに従います。ヘッダーを指定すると、その時点で画像が無効になり、新しい画像にアクセスします。したがって、ソースサイトimg-picassoからcdnにソースを返すときにmax-ageプロトコルヘッダーを追加できます。値は1分で、cdnはそのままブラウザーに渡されるため、ブラウザーは1分以内にイメージキャッシュの無効化を認識できます。 、cdnに移動して、新しい画像リソースをプルします。
モバイルTaobaoクライアントの場合、元のLRUキャッシングメカニズムに加えて、標準のhttpプロトコルを追加でサポートします。このようにして、携帯電話のタオバオも1分以内に画像キャッシュの無効化を実現しました。
▐CDN画像を事前に予熱します
画像のURLを変更しないように画像を変更することで、商品リンクキャッシュに対する画像の変更の影響を解決しました。ただし、画像が変更されると、URLは変更されていませんが、CDNキャッシュがクリアされ、ユーザーがアクセスしたときにimg-picasso元のサイトに戻るため、画像の元のサイトへのプレッシャーは依然として存在します。
商品の価格変動のほとんどは、プロモーションのリズムが大きく変化した瞬間に発生していることがわかりました。この機能により、事前に画像を合成してCDNまでウォームアップできるため、画像の切り替えが瞬時に行われ、元のサイトにプレッシャーがかかりません。具体的な計画は次のとおりです。
マルチバンド画像を事前に合成する:大規模なプロモーションで販売者が画像の変更に集中する時点を把握した後、これらの時点に応じて画像表示を複数のバンドに分割します。各バンド画像は事前に合成され、画像URLは事前に製品センターに書き込まれます。拡張構造。
画像アクセスルーティング:マーケティングシステムは、現在どのバンドが参加しているかを構成した大きなプロモーションの雰囲気に従って、Lubanにセカンドパーティの画像パッケージを通知し、Lubanは現在のバンドとシーンに従って各シーンに正しい画像URLを返します。
画像のレンダリング:各シーンが画像のURLを取得し、独自のビジネスロジックと組み合わせた後、画像を表示するかどうかを決定します。
CDN画像の予熱:画像が集中的に切り替えられたときにソースサイトが破壊されるのを防ぐために、集中切り替えの前に、これらのコールド画像のコンテンツをCDNに予熱します。
バンド内の写真の変更:事前にさまざまなバンドの写真を合成した後、販売者が一時的にクーポンを発行したり、価格を変更したりすると、商品の価格が再び変更される場合があります。このような写真の変更のニーズについては、製品センターの写真のURLの更新を避けるために、この記事の前の章を使用します。 CDNキャッシュの保存の実装。
まとめと展望
CDNテクノロジーは、さまざまなインターネットシナリオで広く使用されています。今日のCDNサービスプロバイダーは、非常にシンプルなサービスアクセス方法を提供しており、CDNのコストは毎年減少しています。これにより、CDNアクセスと使用のコストがますます低くなっています。 。
この記事では、タオバオの写真ビジネスの例を使用して、CDNを使用する過程で発生する可能性のある問題と解決策について説明します。
タオバオのイメージビジネスへの多数の訪問に加えて、それはまた頻繁な更新に直面しています。画像を頻繁に更新すると、製品の画像URLが変更されたために製品キャッシュが無効になりますが、CDNの画像アクセスキャッシュのヒット率が大幅に低下します。
画像URLの変更による製品キャッシュ無効化の問題に対応するため、ユーザーがアクセスしたときにcdnキャッシュを更新してソースに戻し、画像URLを変更しないように画像の変更を実現しました。このプロセスでは、次のような多くの問題を解決しました。 :OSS 3箇所の同期更新、画像サイズの収束、画像ドメイン名の収束、クライアントとブラウザのローカルキャッシング。
画像を変更することでCDN画像キャッシュのヒット率が低下するという問題を考慮し、事業の特性に応じて事前に異なるバンドの画像を合成し、CDNまでウォームアップしてオリジンサイトの安全を確保します。
現在、タオバオでユーザーが見る写真はすべて事前に合成されています。将来的には、ユーザーが写真にアクセスするときにリアルタイムで写真を合成することを検討しています。このテクノロジーにより、よりリアルタイムのビジネス情報をリアルタイムで認識でき、この情報に基づいて、現在のユーザーや写真の環境により適したコピーライティング/要素などのコンテンツを合成し、ユーザーにより多くの驚きをもたらすことができます。
もちろん、リアルタイムの画像結合は、計算能力や画像結合のパフォーマンスなど、より多くの課題にも直面します。さらに、CDNの場合、各ユーザーがアクセスするコンテンツが一時的に合成されるため、CDNキャッシング戦略も大きな課題です。
タオ部門技術部門-ルバンチーム-人材募集
ビジネスを推進するテクノロジー!!!タオ部門の技術部門のルバンチームは、長い間写真とビデオの分野に焦点を当ててきました。技術革新により、ビジネスの効率とユーザーエクスペリエンスが向上しました。写真やビデオのテクノロジーに興味がある場合、または高並行性のエンジニアリングシステムに触れたい場合は、コードを通じて世界を変えたいと思っています。ぜひご参加ください。!![email protected]
✿さらに 読む
著者|ヤンウェンタオ(Zhaoming)
編集|オレンジ
生産|アリババの新しい小売技術