現在、CPU の計算能力とディスク アクセスの遅延のギャップは徐々に拡大しており、ユーザーのクラウド ホストのディスク IO が深刻なパフォーマンスのボトルネックになることが多く、これはクラウド コンピューティング環境ではより顕著になっています。機械式ハードディスクの IO パフォーマンスが低いという問題を解決するために、当社は自社開発のクラウド ホスト IO アクセラレーション ソリューションを開発し、4K ランダム書き込みの最大パフォーマンスを従来の 300 IOPS から 4.5W IOPS に向上させました。これは 150 倍の増加であり、機械式ハードディスクのコストで SSD のパフォーマンスを実現したことを意味します。このソリューションは、2013 年の開始以来、5 年間の運用実績を経て、ネットワーク全体の標準クラウド ホストの 93% に適用され、合計容量 26PB の 127,000 インスタンスをカバーしています。
IO アクセラレーションが必要な理由は何ですか? 従来の機械式ディスクでは、アドレス指定時にヘッドをターゲット位置に移動する必要があります。ヘッドを動かす動作が、機械式ディスクのパフォーマンスが低下する主な原因です。さまざまなシステム ソフトウェアや IO スケジューラは、パフォーマンスを向上させるためにヘッドの動きを減らすことに取り組んでいますが、ほとんどのシナリオでは効果が向上するだけです。一般的に、SATA メカニカル ディスクの 4K ランダム IOPS は約 300 しかありません。ほとんどのクラウド ホストでは、300 のランダム IOPS は、排他的に使用しても十分ではありません。さらに、クラウド コンピューティングのシナリオでは、1 台の物理ホスト マシン上に複数のクラウド ホストが存在します。したがって、IO パフォーマンスを大幅に向上させるには他の方法が必要です。 初期の SSD は高価であり、SSD を導入すると必然的にユーザー コストが増加します。そこで、私たちは技術的な観点からこの問題を解決できないか考え始めました。ディスクのパフォーマンス特性を分析することで、次世代の IO アクセラレーション ソリューションの開発を開始しました。 SSD は今日ますます普及していますが、機械式ハードディスクは低コストで安定したストレージであるため、依然として広く使用されています。 IO アクセラレーション テクノロジーにより、機械式ハード ディスクはほとんどのアプリケーション シナリオの高い IO パフォーマンス要件を満たすことができます。 第2のIO加速原理と最新世代のIO加速 機械式ディスクの特性として、ランダム IO パフォーマンスは劣るが、シーケンシャル IO パフォーマンスは優れていることがわかっています。たとえば、前述のように、4K ランダム IO のパフォーマンスは 300 IOPS しかありませんが、シーケンシャル IO のパフォーマンスは 45,000 IOPS に達します。 IO アクセラレーションの基本原理は、機械式ディスクのパフォーマンス特性を活用することです。まず、システムには 2 つのディスクがあります。1 つはキャッシュ ディスクです。これは、書き込まれたデータを一時的に保存するために使用される、わずかに小さい容量の機械式ディスクです。もう 1 つはターゲット ディスクです。これは、より大きな容量を持つ機械的なディスクであり、最終的なデータを保存します。 1. IOの読み取りと書き込み 書き込み時は、上位層 IO がキャッシュ ディスクに順次書き込まれます。順次書き込まれるため、パフォーマンスは非常に良好です。次に、キャッシュ ディスクがアイドル状態のときに、専用スレッドがディスク上のデータを書き込み順にターゲット ディスクにフラッシュし、キャッシュ ディスクに新しい書き込みデータを保存するための一定量の空き領域が維持されるようにします。 上位層のビジネスに意識させないために、この機能をホストマシンのカーネル状態のデバイス マッパー レイヤー (略して DM レイヤー) に実装することを選択しました。 DM レイヤーは構造が明確で、モジュール化が容易です。実装後は、上位層に対して DM ブロック デバイスとして表示されます。上位層では、このブロックデバイスがどのように実装されているかを気にする必要はありません。必要なのは、これがファイル システムとして直接使用できるブロック デバイスであるということだけです。 上記の方法によれば、新しい IO が書き込まれると、DM レイヤー モジュールはまず IO をキャッシュ ディスクに書き込み、次にそれをターゲット ディスクにフラッシュします。ここでは、キャッシュ ディスク上の書き込まれた IO の場所とターゲット ディスク上の位置情報を記録するためのインデックスが必要です。後続のフラッシュ スレッドは、インデックスを使用して IO データ ソースの場所とターゲットの場所を決定できます。ディスクセクターは 512 バイトなので、インデックス サイズを 512 バイトに設計し、各書き込み情報は 4K データ + 512 バイトのインデックス モードになります。パフォーマンスを考慮して、インデックス情報のコピーもメモリ内に保持されます。 読み取りプロセスは比較的簡単です。メモリ内のインデックスを使用して、読み取る場所のデータがキャッシュ ディスク内にあるか、ターゲット ディスク内にあるかを判断し、対応する場所でデータを読み取ることができます。 書き込まれるデータのサイズは通常 4K で、カーネル DM レイヤーの特性によって決まります。書き込み IO が 4K を超える場合、DM レイヤーはデフォルトでデータを分割します。たとえば、書き込み IO が 16K の場合、4 つの 4K IO に分割されます。書き込まれたデータが 1024 バイトのみなど 4K に従って整列されていない場合は、まず特別な処理が実行されます。まず、IO によってカバーされるデータ領域がチェックされます。カバーされているメモリ領域のキャッシュ ディスクにデータがある場合は、まずそのデータをターゲット ディスクに書き込む必要があり、その後 IO がターゲット ディスクに書き込まれます。この処理プロセスは比較的複雑ですが、ファイル システムのシナリオでは、ほとんどの IO が 4K に揃えられており、非揃えの IO はごくわずかであるため、ビジネス パフォーマンスに大きな影響を与えることはありません。 2. インデックスの迅速な回復とバックアップ システムの動作中、予期しない停電やシステムのシャットダウンは避けられません。堅牢なシステムは、このような状況に遭遇した場合でもデータの信頼性を確保できる必要があります。システムが回復を開始すると、メモリ内のインデックス データを再構築する必要があります。このデータはIOデータと一緒にキャッシュディスクに書き込まれていますが、インデックスは間隔を置いて保存されるため、毎回キャッシュディスクからインデックスを読み込むと、データの回復速度が非常に遅くなります。 この目的のために、メモリ インデックスの定期的なダンプ メカニズムを設計しました。このメカニズムは、メモリ内のインデックス データを約 1 時間ごとにシステム ディスクにダンプします。起動時には、最初にダンプ インデックスが読み取られ、次にダンプ インデックスの後の過去 1 時間以内のインデックスがキャッシュ ディスクから読み取られます。これにより、システム回復の起動時間が大幅に改善されます。 上記の原則に基づいて、UCloud は独自の *** 世代 IO アクセラレーション ソリューションを開発しました。このソリューションを採用した後、システムはランダム書き込みの高速化において顕著な成果を達成し、オンラインで安定して稼働しています。 第3世代IOアクセラレーションソリューションの問題点 しかし、システムが稼働するにつれて、いくつかの問題も見つかりました。 1) インデックスのメモリ使用量が大きい ディスク インデックスの最小サイズはセクターのため 512 バイトですが、メモリ内でこれほど多くのインデックスを使用する必要はありません。インデックスが大きすぎると、メモリを大量に消費します。 2) 負荷が高い場合、キャッシュディスクに蓄積されるIOデータが増える IO アクセラレーションの原理は、主にランダム IO を加速することです。機械式ディスク自体のパフォーマンスが優れているため、シーケンシャル IO を高速化する必要はありません。ただし、このバージョンでは、シーケンシャル IO とランダム IO が区別されません。すべての IO がキャッシュ ディスクに均一に書き込まれるため、キャッシュに蓄積される IO が多すぎます。 3) ホットアップグレードは不親切 初期設計時にオンライン アップグレード シナリオが十分に考慮されていなかったため、最新世代の IO アクセラレーション ソリューションのホット アップグレードはユーザーフレンドリーではありません。 4) 新しい512eメカニカルディスクとは互換性がありません 従来の機械式ディスクの物理セクターと論理セクターはどちらも 512 バイトですが、新しい 512e ディスクの物理セクターは 4K です。論理セクターは依然として 512 バイトを使用できますが、パフォーマンスは大幅に低下します。そのため、新世代 IO 加速ソリューションの 4K データ + 512 バイト インデックスの書き込み方法を調整する必要があります。 5) パフォーマンスを拡張できない システムのパフォーマンスはキャッシュ ディスクの負荷に依存し、拡張することはできません。 4. 第2世代IOアクセラレーションテクノロジー 上記の問題は、*** 世代 IO アクセラレーション テクノロジのオンライン運用中に発見されました。また、新しい機械式ディスクとの互換性の点では、512 バイトの物理セクターと論理セクターを持つ従来の 512n タイプのディスクが徐々に生産されなくなるため、システムが改善されなければ、将来のニーズに適応できなくなる可能性があります。そこで、第 1 世代のソリューションに基づいて、第 2 世代の IO アクセラレーション テクノロジの開発と最適化を開始しました。 1. 新しいインデックスとインデックスバックアップメカニズム 最新世代の IO アクセラレーション テクノロジーは、ディスクの問題により 4K+512 バイト形式を使用できません。この問題を解決するために、データとインデックスを分離し、システム ディスク上に特別なインデックス ファイルを作成します。システム ディスクは基本的にアイドル状態なので、システム ディスクの高負荷がインデックスの書き込みに影響を与えることを心配する必要はありません。同時に、次の図に示すように、データ部分は引き続きキャッシュ ディスクに書き込まれたまま、インデックス サイズを 512B から 64B に最適化しました。 インデックス ファイル ヘッダーとデータ ディスク ヘッダーは、ヘッダー データを格納するために 2 つの 4K を予約します。ヘッダー データには、現在のキャッシュ ディスク データの開始オフセットと終了オフセットが含まれ、その後に特定のインデックス データが続きます。インデックスはキャッシュ ディスク内の 4K データと 1 対 1 で対応します。つまり、4K のデータごとにインデックスが存在します。 インデックスはシステム ディスク上に配置されるため、システム ディスクが回復不能な損傷を受けた場合にインデックスを復元する方法も考慮する必要があります。システム ディスクが損傷する可能性は非常に低いですが、一度損傷するとインデックス ファイルが完全に失われ、これは明らかに許容できません。そこで、インデックス バックアップ メカニズムを設計しました。 8 つのインデックスが書き込まれるたびに、システムはこれらのインデックスを 4K のインデックス バックアップ ブロックにマージし、キャッシュ ディスクに書き込みます (詳細については、上図の紫色のブロックを参照してください)。 4K 未満の部分は 0 で埋められます。このようにして、システム ディスクに実際に事故が発生した場合、バックアップ インデックスを使用してデータを復元できます。 書き込み時にはインデックスとデータが同時に書き込まれます。書き込み効率を向上させるために、インデックス書き込みメカニズムを最適化し、マージ書き込み方式を導入しました。 書き込み時に、書き込む必要がある複数のインデックスを 4K 書き込みバッファにマージし、一度に書き込みバッファに書き込むことができます。これにより、インデックスごとに書き込みを生成する非効率的な動作が回避され、各書き込みが 4K に揃えられるようになります。 2. シーケンシャルIO認識機能 最新の IO アクセラレーション テクノロジーを運用する過程で、ユーザーがデータのバックアップやインポートなどの操作を実行すると、大量の書き込みが発生することがわかりました。これらの書き込みは基本的にシーケンシャルであり、実際に加速する必要はありませんが、最新の IO アクセラレーション テクノロジでは区別がないため、これらの IO はキャッシュ ディスクに書き込まれ、キャッシュ ディスク上に過剰な IO が蓄積されることになります。この目的のために、シーケンシャル IO を識別するためのシーケンシャル IO 認識アルゴリズムを追加しました。これらの IO はアクセラレータを経由する必要がなく、ターゲット ディスクに直接書き込まれます。 IO の書き込みが開始されると、それが順次かランダムかを予測することは不可能です。一般的な処理方法としては、IO ストリームが書き込まれる位置が連続しており、それが一定回数続く場合、その IO ストリームはシーケンシャルであるとみなすことができます。したがって、アルゴリズムの鍵は、IO ストリームが連続しているかどうかを判断する方法にあります。ここではトリガー方式を使用します。 IO ストリームが書き込みを開始すると、IO ストリーム書き込み位置の次のブロックにトリガーを設定します。トリガーがトリガーされると、ブロックが書き込まれたことを意味するため、トリガーは次のブロックに戻ります。トリガーが一定回数トリガーされると、IO ストリームはシーケンシャルであるとみなすことができます。もちろん、トリガーがトリガーされた後、一定期間内に再度トリガーされない場合は、トリガーをリサイクルできます。 3. 気づかれなかったホットアップグレード 第 1 世代の IO アクセラレーション テクノロジーは、設計上のホット アップグレードに適していません。既存のバージョンは、ホットマイグレーションと再起動によってのみ更新できます。全体のプロセスはかなり面倒です。そのため、第 2 世代の IO アクセラレーション テクノロジを開発する際には、気づかれないホット アップグレード ソリューションを設計しました。 私たちのモジュールはカーネル状態の DM レイヤーに配置されているため、初期化されると仮想 DM ブロック デバイスが生成され、そのブロック デバイスは上位ファイル システムによって参照されるため、このモジュールは初期化されるとアンロードできません。この問題を解決するために、親子モジュールアプローチを設計しました。親モジュールは、子モジュールと DM レイヤー間のブリッジとして機能します。親モジュールには非常に単純な IO 転送機能のみがあり、複雑なロジックは含まれていません。したがって、親モジュールをアップグレードする必要がないことを保証できます。子モジュールには複雑なビジネス ロジックが含まれています。子モジュールを親モジュールからアンロードすることで、気づかれないホット アップグレードを実現できます。 上図では、binlogdev.ko が親モジュール、cachedev.ko が子モジュールです。ホット アップグレードが必要な場合、キャッシュ ディスクを読み取り専用モードに設定して、キャッシュ ディスクがデータをフラッシュするだけで書き込みを行わないようにすることができます。キャッシュ ディスクがフラッシュされた後は、キャッシュ ディスク内のデータの上書きを気にすることなく、後続の書き込み IO をターゲット ディスクに直接書き込むことができると想定できます。この方法では、子モジュールを正常に取り外して交換することができます。 このホット アップグレード メカニズムは、ホット アップグレード機能を実現するだけでなく、障害回避メカニズムも提供します。 IO アクセラレーション テクノロジのグレースケール プロセス中に、時折発生するバグによりホスト マシンが再起動することが判明しました。障害の再発を回避し、デバッグの時間を確保するために、できるだけ早くすべてのキャッシュ ディスクを読み取り専用に設定します。 4. 512eメカニカルディスクと互換性あり 新世代のメカニカルディスクは主に 512e です。このタイプのディスクでは、最高のパフォーマンスを実現するために IO 書き込み時に 4K アライメントが必要なので、元の 4K+512B インデックス形式は使用できなくなりました。 512B のインデックスを 4K に拡張することも検討しましたが、これによりインデックスが占有するスペースが大きくなり、書き込み時に追加のディスク帯域幅も占有することになり、効率が悪くなります。そこで、インデックスをシステム ディスクに配置し、それを前述のマージ書き込みテクノロジと組み合わせることで、最終的にこの問題を解決しました。 5. パフォーマンスの拡張と改善 第 1 世代の IO アクセラレーション テクノロジでは、使用できるキャッシュ ディスクは 1 つだけです。このキャッシュ ディスクの負荷が高い場合、システムのパフォーマンスに影響します。第 2 世代の IO アクセラレーションでは、複数のキャッシュ ディスクをサポートし、システム負荷に応じてオンデマンドで挿入するシステムを設計し、ディスク数の増加に応じてランダム IO を高速化する能力が向上しました。ローカル キャッシュ ディスクとネットワーク キャッシュ ディスクの両方で SATA メカニカル ディスクが使用されているという条件下では、使用されるキャッシュ ディスクの数が増えるにつれて、ランダム書き込みのパフォーマンスも大幅に向上することがテストで判明しました。
現在、第2世代IOアクセラレーション技術を適用したクラウドホストを大規模に展開しています。上記の設計により、過剰なキャッシュディスク IO の蓄積やパフォーマンスのボトルネックなど、これまで私たちを悩ませていた問題が大幅に緩和されました。特に、第 1 世代のソリューションでは、高負荷時に IO 蓄積の問題が頻繁に発生し、パフォーマンスの低下や運用および保守のオーバーヘッドが発生していました。第 2 世代の IO アクセラレーション テクノロジを採用した後は、この監視アラームはたまにしかトリガーされなくなりました。 ***で書かれた5 クラウド ホスト IO アクセラレーション テクノロジーにより、機械式ディスクのランダム書き込み処理機能が大幅に向上し、ユーザーは低価格でビジネス ニーズを満たすことができます。この技術の本質は、機械式ディスクを高速化するだけでなく、システム レベルでパフォーマンスをストレージ メディアから分離する機能を実現し、IO パフォーマンスがストレージ メディアによって制限されないようにすることです。さらに、実際の運用環境での大規模なアプリケーションでは、基盤となるテクノロジの設計が非常に重要であり、特にホット バージョン アップグレード、フォールト トレランス、パフォーマンスの考慮事項はすべて慎重に検討する必要があります。この記事で共有した経験が、基礎となるテクノロジーの特性と用途を皆様がより深く理解し、次の設計でより良い改善を行う上で役立つことを願っています。 |
<<: 効果的なマルチクラウドコスト管理のための 8 つのステップ
>>: OpenStack と ZStack の詳細な比較: アーキテクチャ、デプロイメント、コンピューティング ストレージとネットワーク、運用と保守の監視など。
記事の包含率は、ウェブサイトの成功にとって非常に重要です。私が従事している医療業界を例に挙げてみまし...
インターネットの発展は、ウェブマスター業界の発展につながりました。あらゆる側面からの統計はウェブサイ...
Baidu の製品は、ウェブマスターにとって常に無視できない製品でした。数か月前、Baidu は B...
口コミマーケティングも非常に大きなテーマです。オンラインマーケティングやニュースマーケティングとは異...
私は SaaS スタートアップ チームを率いるときは必ず、事前に彼らと合意を結びます。つまり、まず企...
インターネット情報の継続的な成長に伴い、ユーザーがインターネットの海で必要な情報を見つける最も速い方...
Tencent Cloud と「Conscience Cloud」がイベントを開催しています。月額わ...
今日の時代では、組織は顧客に価値を提供する方法を変革するために、新しいテクノロジーと実践に継続的に投...
ウェブマスターは、ウェブサイトの SEO 最適化に非常に関心を持っています。ウェブサイトのキーワード...
ウェブサイトの最適化を行う際、ウェブサイトのコアキーワードのランキングを向上させたいと考えています。...
立ち上げたばかりのウェブサイトをできるだけ早く百度に登録し、より良いランキングを獲得するにはどうすれ...
トラフィックはウェブサイトの血液であり、重みはウェブサイトの血液が補充されることを保証する基礎である...
今年も年末になりました。年末にあたり、新たな消費者ブランドエコシステムのトレンドのキーワードを皆さん...
ほとんどの企業と同様に、当社では製品で使用するすべてのコンポーネントに対して Docker イメージ...
近年、生活水準の向上に伴い、健康に関する話題がますます注目を集めており、人々の健康意識は絶えず高まっ...