いつドロップボックス2008 年に一般公開されたこのサービスは、ユーザー数がわずか数千人から数十万人、そして数百万人へと一夜にして成長しました。
これは新しいスタートアップ企業にとっては素晴らしいことですが、特にユーザーの要求に合わせてインフラストラクチャを拡張することを考え始める場合には、エンジニアリング上の問題がいくつか発生します。
Dropbox の場合、同社はリアルタイム ストレージおよび同期ソリューションとして自社を宣伝していたため、さらに困難な課題に直面しました。 Dropbox が成功するには、サービスが高速で信頼性が高く、安全であるとユーザーが信頼できる必要がありました。
では、Dropbox はどのようにして拡張することができたのでしょうか? Rajiv Eranki は、2008 年から 2011 年まで Dropbox でサーバー エンジニアリングの責任者を務めました。彼は 2 人目に採用されたエンジニアで、当初から彼の仕事は製品のスケールアップを支援することに重点が置かれていました。 Dropbox に在籍していた間、エランキ氏は会社のユーザーが 2,000 人から 4,000 万人に成長するのを見てきました。
Eranki 氏が Dropbox のスケーリング経験を共有しました彼のブログでそして、RAMPカンファレンス今月初め。
以下に重要なポイントをいくつか示します。
Python を選んだのは良い決断でした
Eranki 氏は、RAMP Conference のプレゼンテーションで、Dropbox チームは事実上すべてに Python を使用していると説明しました。これは、プラットフォーム全体が「数千行の C コードを記述することなく 4,000 万人のユーザーに到達できる」ことを意味するため、有益でした。
これは、PyCon 2011 で Rian Hunter によっても同様の意見でした。PyCon は Python 言語専用のカンファレンスであり、Hunter は「」というタイトルのプレゼンテーションを行いました。Dropbox がどのように実現し、Python がどのように役立ったのか。」
Python の利点は、別の言語または言語グループをベースとして使用する場合よりも、チームをはるかに迅速に拡張できることでした。
わずか 2 人のエンジニアがスケーリングに集中していた初期の頃、複雑さを制限することはプロジェクトを成長させ続けるために重要な部分でした。
同様に、チームは、MySQL、Amazon の S3 および EC2 インフラストラクチャなどの一般的なソフトウェア スタックを使用することで、少なくとも初期の段階では、テクノロジーの最大ユーザーまたは最もアクティブなユーザーではないことを確認できました。
潜在的な障害点をテストする
Ernaki 氏がプレゼンテーションで繰り返し述べている点の 1 つは、失敗する可能性のあるシステムをテストすることが重要であるということです。 Ernaki 氏は、何が起こるかを確認するためにチームがサーバーをハードリブートするだろうと頻繁に述べていました。フェイルオーバー戦略は機能しますか?プロセスは自動的に再起動されますか?
何かがどのように失敗するのかを理解し、正常に動作しているときにそれらのシステムをテストすることで、実際の失敗を管理できるようになります。
エルナキ氏は、「実際の現場で消防訓練を行うのは愚かに聞こえるかもしれないが、テスト環境は十分ではないため、これは非常に良い保険になる」と書いている。
ハードウェアの一貫性を保つ
Dropbox の大幅な拡張により、新しいハードウェアを購入する必要がありました。チームは、さまざまなサーバー構成やハードウェア タイプに依存するのではなく、一貫した構成を持つより小さなカテゴリのマシン タイプを用意しました。
Ernaki 氏が言うように、これにより「キャパシティ プランニング」の量が制限され、問題がハードウェアに固有のものであるかどうかを判断する際に一貫性を保つのにも役立ちます。
UTC を使用する
サーバー間で UTC タイム コードを使用することで、Dropbox は、あるサーバーまたはシステムが、あるタイムゾーンと別のタイムゾーンに存在するという潜在的な問題に対処する必要がなくなりました。 Dropbox は、ブラウザ (またはファイル マネージャー) で最後の 1 秒まで時間をユーザーのタイムゾーンに変換しないことさえ行っています。
Dropbox チームは、全員がサーバーと同じ時刻になるように、壁時計を UTC に設定したままにしていました。
ばかげているように聞こえるかもしれませんが、ビジネスの大部分が信頼性の高いファイル同期に依存している場合、タイムゾーンの変更によりファイルが正しく同期されない可能性があります。
頻繁にリリースする
Dropbox の信条の 1 つは、アップデートを頻繁にリリースすることであり、そして今もそうです。 Dropbox の初期の頃、コードはコーディングされたその日にリリースされることがよくありました。これは、結果が即座に利用可能であり、潜在的な改善がすぐにユーザーに役立つことを意味しました。
現在でも、Dropbox は Mac、Windows、Linux クライアントにベータ チャネル アップデートをリリースしています。これらのリリースでは、バグがある可能性があることを理解しながらも、最新のものを明示的にテストしたいと考えているユーザーのために、メインラインに到達する前に新機能が導入されることがよくあります。
ただし、初期リリースは重要ですが、Dropbox は安定したコードのみがクライアントにプッシュされるようにする必要もありました。結局のところ、ディレクトリの破損と作業の損失は、ストレージおよび同期サービスで起こり得る最悪の事態の 1 つです。