ossfsメタデータキャッシュは、サーバーのOSS (Object Storage Service) データに対する読み取り /書き込みIOPSが高いシナリオに適しています。 ossfsメタデータキャッシュを有効にすると、オブジェクト操作の全体的な効率と要求の応答時間が向上します。 このトピックでは、ossfsメタデータキャッシュを設定して効果的に使用する方法について説明します。
ossfsメタデータキャッシュを使用する場合は、データの一貫性と適時性の問題に注意してください。 したがって、データの適時性に対する要件が高いシナリオでは、ossfsメタデータキャッシュを有効にしないことをお勧めします。
背景情報
メタデータとは、オブジェクトサイズ、作成時間、変更時間、ユーザーID、グループIDなどのデータを記述する情報のことです。 ユーザーIDとグループIDはOSSでサポートされていない属性ですが、ファイルシステムは権限チェックのためにこれらの属性に依存しています。 ossfsでは、OSSのオブジェクトのカスタムヘッダーから追加情報を取得できます。 これにより、Linuxの属性に基づいてオブジェクトに対して操作を実行できます。
ossfsメタデータキャッシュを有効にすると、パフォーマンス、リソース使用量、ユーザーエクスペリエンスが向上します。
パフォーマンス: ossfsメタデータキャッシュは、特に高I/O操作を伴うシナリオで、メタデータ読み取りの待ち時間を短縮し、オブジェクト操作の全体的な効率を向上させることができます。
リソース使用量: ossfsメタデータキャッシュは、ホットデータに頻繁にアクセスする場合、OSSへの呼び出し数と1秒あたりのクエリ数 (QPS) を削減します。
ユーザーエクスペリエンス: リクエストの応答時間が改善されました。
シナリオ
ossfsメタデータキャッシュは、サーバーを使用してOSSデータにアクセスするシナリオに適しています。
分散環境では、頻繁に変更されないデータをOSSから読み取るシナリオに適しています。 たとえば、AIトレーニングデータセットとAIモデルファイルがOSSから読み取られ、ビッグデータクエリが実行されます。
制御ポリシー機能の動作
ossfsは、クライアントメモリを使用してOSSメタデータをキャッシュし、リモートストレージ操作のレイテンシを削減します。
最初のデータアクセス用のメタデータキャッシュ:
ossfsマウントポイントの下のオブジェクトまたはディレクトリに初めてアクセスすると、ossfsクライアントはOSSからオブジェクトのメタデータを取得し、ローカルキャッシュに保存します。
その後のアクセスの高速化:
キャッシュ削除ポリシーが無効になっている場合、またはキャッシュの有効期限が切れていない場合、オブジェクトのメタデータへのその後のアクセスは、OSSにリクエストを送信する必要なしにローカルキャッシュから直接読み取られるため、レイテンシが大幅に削減されます。
キャッシュ更新ポリシー:
ossfsは、キャッシュの有効期限やキャッシュの上限などの特定のポリシーに基づいてローカルキャッシュを更新します。
マルチクライアントのキャッシュ同期:
ossfsメタデータキャッシュは、クライアントのメモリを使用する単一サーバーのローカルキャッシュです。 サーバーを使用して、一度に複数のバケットを複数のローカルファイルシステムにマウントしたり、複数のサーバー間でメタデータの変更を同期したりすることはできません。
モード比較
次の表に、ossfsメタデータキャッシュを有効にする前後の違いを示します。
ossfsメタデータキャッシュ | コマンド | リクエスト方法 | 操作 | 性能 |
ossfsメタデータキャッシュの無効化 | 統計 | ossfsは、オブジェクトメタデータを取得するためにHeadObjectリクエストをバケットに送信します。 | ossfsはHeadObjectリクエストを送信して、バケットから1つのオブジェクトのみを取得します。 | オブジェクトのメタデータはバケットから取得されます。これは、メモリからの読み取りよりも遅くなります。 |
ls | ossfsはListObjectリクエストをバケットに送信してディレクトリ内のオブジェクトを取得し、HeadObjectリクエストを送信してオブジェクトメタデータを取得します。 | ossfsがListObjectリクエストを送信した後、ossfsはHeadObjectリクエストを送信して、バケットからディレクトリ内のオブジェクトを1つだけ取得します。 | ||
ossfsメタデータキャッシュが有効 (メタデータキャッシュの有効期限が切れない) | 統計 | ossfsは、ローカルメモリからオブジェクトメタデータを取得します。 | ossfsはメモリからオブジェクトを取得します。 | オブジェクトメタデータはローカルメモリから読み取られます。 |
ls | ossfsはListObjectリクエストをバケットに送信してディレクトリ内のオブジェクトを取得し、ローカルメモリからオブジェクトメタデータを取得します。 | ossfsがListObjectリクエストを送信した後、ossfsはディレクトリ内のオブジェクトを取得します。 ディレクトリ内の特定のオブジェクトにアクセスする場合、ossfsはローカルメモリからオブジェクトを取得します。 |
パラメーター
次の表に、ossfsメタデータキャッシュに設定できるパラメーターを示します。
パラメーター | 説明 | 値 |
max_stat_cache_size | メタデータキャッシュを有効にするかどうか、およびメタデータキャッシュの最大サイズを指定します。 OSSで頻繁にアクセスされるオブジェクトの数に基づいてパラメーターを指定します。 メモリが十分な場合は、操作パフォーマンスを向上させるために、パラメーターをより大きな値に設定することを推奨します。
| デフォルト値: 100,000 単位: オブジェクトまたはディレクトリ。 サイズ: 約40 MB。 |
stat_cache_expire | メタデータキャッシュのキャッシュ削除ポリシーを有効にし、メタデータキャッシュの有効期間を変更するかどうかを指定します。 ビジネス要件に基づいて、メタデータキャッシュの有効期間を指定することを推奨します。
説明 デフォルトでは、ossfsはキャッシュ削除ポリシーを有効にし、メタデータキャッシュの上限を100,000に設定します。これは約40 MBのメモリを消費します。 | デフォルト値: 900 単位は秒です。 |
readaddir_optimize | キャッシュ最適化を使用するかどうかを指定します。 デフォルト値:false パラメーターを指定した後、lsコマンドを実行すると、ossfsはオブジェクトメタデータ ( キャッシュ最適化を使用するには、 | デフォルト値:false |
メタデータキャッシュ管理メカニズム
次の表に、ossfsのメタデータキャッシュ管理メカニズムを示します。
キャッシュステータス | 操作 |
オブジェクトメタデータがキャッシュされ、キャッシュ削除ポリシーが無効になるか、キャッシュが期限切れになりません。 | キャッシュから直接オブジェクトメタデータを読み取ります。 |
オブジェクトメタデータがキャッシュされ、キャッシュが期限切れになります。 | キャッシュを更新します。 |
オブジェクトメタデータはキャッシュされず、キャッシュ容量は使用可能です。 | オブジェクトをキャッシュします。 |
オブジェクトメタデータはキャッシュされず、キャッシュ容量は完全に消費され、キャッシュ削除ポリシーが有効になります。 | キャッシュをトラバースし、期限切れのオブジェクトを削除します。 |
オブジェクトメタデータはキャッシュされず、キャッシュ容量は完全に消費され、キャッシュ削除ポリシーは無効になります。 | LRU (least recently used) ポリシーに基づいて、長期間アクセスされていないキャッシュオブジェクトを削除します。 |
提案事項
オブジェクトのメタデータに注意を払わない場合は、
readdir_optimizeパラメーターを指定して、listおよびfind操作のパフォーマンスを向上させることを推奨します。 ossfsメタデータキャッシュを有効にすると、シンボリックリンクはサポートされなくなります。データ更新のリアルタイム要件が高いマルチクライアントシナリオでは、ossfsメタデータキャッシュを有効にする場合は注意が必要です。 データの一貫性を維持するために、
-omax_stat_cache_size=0パラメーターを指定してossfsメタデータキャッシュを無効にできます。 ただし、パフォーマンスの低下が発生し、追加料金が請求される場合があります。アプリケーションで複数のクライアント間で強力なデータ整合性が必要な場合は、Cloud Storage Gateway (CSG) またはCPFSとはを使用することを推奨します。 ossfsは使用しないことを推奨します。
OSSで頻繁にアクセスされるオブジェクトの数が多い場合は、
max_stat_cache_sizeパラメーターの値を適切に増やして、キャッシュが頻繁に削除されないようにします。大量のオブジェクトに対して操作を実行する必要があり、サーバーのメモリが不足している場合は、ossutilまたはOSS SDKを使用して操作を実行することを推奨します。 バケットをローカルファイルシステムにマウントする場合は、CSGまたはCPFSを使用することを推奨します。
OSSで頻繁にアクセスされるオブジェクトの数が多い場合は、それぞれが個別のサブディレクトリ専用の複数のOSSFSマウントポイントを作成できます。 この設定により、ワークロードがマウントポイントに分散され、パフォーマンスが向上します。