ユーザーがアップロードした大量の画像を保存するためのベストプラクティス

ユーザーがアップロードした大量の画像を保存するためのベストプラクティス

現在、Django を利用した Web サイトがあり、ユーザーは大量の画像をアップロードできます。画像はすべて、サーバー上の 1 つのハード ドライブに保存されています。問題は、利用可能なハード ドライブの最大容量に徐々に達し、垂直スケーリングがもはやオプションではないことです。

私の知る限り、Amazon S3/CloudFront にはそのような制限はありませんが、トラフィックの多いサイトでは、これらのサービスは自社のサーバーラックよりもはるかに高価です。自社の環境でアップロードを複数のディスクに分割するためのベストプラクティスはありますか?

答え1

これは良くありません。データの内容が重要なサーバー環境では、少なくとも RAID を使用してディスク障害の重大なリスクを軽減する必要があります。また、RAID はストレージの問題に対する解決策でもあります。RAID アレイを使用してストレージの容量を増やすことができます。(RAID は、複数のディスクを使用して、さまざまなパフォーマンス特性と冗長性を備えた単一の仮想ディスクを提供するために使用されます)

他にも知っておく必要のある、使用する必要があるテクノロジがあります。OS を指定していませんが、Linux バリアントであれば、ディスク管理を処理し、OS レベルの下で複数のディスクを 1 つの仮想ディスクに結合する機能などを持つ LVM を検討する必要があります。

もちろん、SANS のようなものも検討できます。SANS は通常、複数のディスクを 1 つの大きな外付けハードディスクに統合できます。

答え2

クラウドベースのサービスを避けたい場合、従来の大企業のアプローチは、多数の個別のディスクを 1 つの論理ファイルシステムに統合できるハードウェアまたはソフトウェアを調達することです。これを行うには多くの方法があります。いくつか挙げてみましょう。

  • glusterfs などの分散ファイルシステムを使用すると、それぞれ独自の CPU、RAM、ストレージを備えた複数のサーバーを用意し、それらすべてで単一の論理ファイルシステムを共有することができます。

  • また、この分散概念をさらに一歩進めて、システム全体を隅々までクラスター化することもできます。こうすると、実際には密接に接続された一連のネットワーク コンピューター (できれば超高速ネットワーク経由) であるにもかかわらず、1 台の論理コンピューターを実行しているように見えます。

  • 「ストレージ サーバー」を購入すれば、マザーボード、シャーシ、CPU、RAM などの購入費用を節約できます。これは、中程度の性能を持つエンタープライズ グレードのサーバーで、多数のハード ディスクが接続されています。ハード ディスクはシャーシに直接取り付けられるか、ファイバー チャネルまたは SAS 経由で外部ストレージ ラックに接続され、ハード ドライブの数は 60 台からそれ以上になることもあります。これらの構成では、通常、ハード ディスクはハードウェア RAID コントローラーまたはバックプレーンを使用して 1 つの論理デバイスに結合されます。もちろん、この方法では、最大ディスク密度で 1 つのラックに収まるすべてのディスクがある場合、最終的には最大容量に達します。その場合、これらのストレージ サーバーのファイル システム層またはシステム層クラスターを使用して拡張できます。

今後数年間に必要になると予想されるストレージの正確なサイズN(N は事前に計画する年数) に応じて、これらのソリューションの一部は他のソリューションよりも高価になったり、管理が難しくなったりします。

Amazon S3 が下流の顧客に提供しているような規模で、数千テラバイトの冗長ストレージを必要とする極端な例では、通常は集中管理インフラストラクチャを備えた何らかのクラスター システムが必要になります。このような場合、優れたパフォーマンスを維持するには、非常に高速なノード間ネットワークが不可欠です。少なくとも 10G イーサネットを検討してください。

あなたが現在実行していると言ったことから判断するとハードドライブ 1 台ただし、規模が過大にならないようにスケールアップする最も経済的な方法は、4 ~ 8 台のハード ドライブを搭載できる 2U または 3U サーバーを購入し、そこに多数のディスクを RAID で接続することです。RAID10、RAID5、および RAID6 は、この数のディスクで一般的な構成ですが、RAID5/RAID6 を使用する場合は、過度の CPU 負荷を避けるためにハードウェア RAID コントローラーを使用するようにしてください。

この方法と現在利用可能なディスクを使用すると、使用可能なストレージ(冗長性あり)を最大約16TBまで拡張できますが、容量が大きいディスクは速度が遅くなり、スループットが低下し、応答時間が長くなる傾向があることに注意してください。そのため、トラフィックが非常に多いサイトでは、容量の小さいディスクを使用する傾向があります。もちろん、より多くのディスクが必要になります。同じ使用可能容量を達成します。:/

関連情報