web-dev-qa-db-ja.com

スケーラブルなアプリケーションを設計する方法は?

スケーラブルなアプリケーションをどのように設計/設計しますか?アプリケーションをスケールアウトする方法を理解するのに役立つ書籍またはWebサイトの提案はありますか?

ありがとう

61
Martin

過去1年間、私は自分の会社が取り組んでいるプロジェクトのためにこの質問について理解する必要がありました。これらのリソースは非常に役立つことがわかりました。ToddHoff's highscalability.com ; スケーラブルインターネットアーキテクチャ 、Theo Schlossnagle。および Cal HendersonによるスケーラブルなWebサイトの構築 。特にHighscalability.comでは、多くの優れたプレゼンテーション、チュートリアル、書籍、論文を紹介しており、始めるのに最適な場所です。アドバイスはすべて実用的で、Flickr、Twitter、Googleなどのサイトでの経験に基づいています。

ところで、スケーラビリティはパフォーマンスではありません。完全にスケーラブルなシステムとは、追加のユーザーまたは容量を追加するための限界費用が固定されているシステムです。

49
Jim Ferrans

これは、livejournalと、長期にわたってアプリケーションをどのようにスケーリングしたかについての素晴らしい読み物です。

danga.com/words/2004_mysqlcon/mysql-slides.pdf [PDF]

それはあなたが探している種類のものではないかもしれませんが、それはスケーリングに関するより良い「これが私たちがしたこととその理由」の概要の1つです。

4
JensenDied
  • スケーラビリティは保守性に密接に関係していると思う傾向があります。そして、人々が短い時間しか費やさないことがしばしば見過ごされているようです開発中アプリケーションと残りの時間維持それ。

  • また、スケーリングはほぼ確実にデータ(コードよりも機敏性が高いため、より多くのデータを保持する必要があります)に関係しているため、ストレージアクセスコストはO(1)O(n)

  • 私にとって完全にスケーラブルなアプリケーションとは、ある環境から別の(同様の)環境にコピーし、いくつかの値を構成して実行し、アプリケーション全体の実行領域を拡張できるアプリケーションです。

4
miku

すでにいくつかの素晴らしい回答がここに投稿されています。いくつかの本やリンクには、いくつかの一般的な思考パターンがあります。

  • できるだけ少ないコードを書く

  • 可能な限りコードを再利用する

  • 設計を過剰に、または過小にしないでください

  • 別々の、または複数のシステムで実行できるモジュール領域に物事を分割します。重い処理は別のシステムに任せる必要があります。

3
Jas Panesar

テクニックを始める前に、アプリケーションスコープが完全に冷たくなっていることを知っておく必要があります。顧客/ビジネスユニットは、パフォーマンスに関して何を期待しますか?また、障害の重要な領域は何ですか? Scott Hanselmanは、このテーマに関して素晴らしい ポッドキャスト を持っていました。

提供されているいくつかのヒント:必要がない限り、キャッシュを使用しないでください。ファイルを提供することは、データベースからフラグメントを組み立てるよりも高速です。サーバーのピーク時間を処理する方法を知っている。あなたのピークがどうなるかを知っています。

繰り返しますが、shouldスケールかどうかを知るために、最初に使用範囲を把握してください。

1
David Robbins

何をするにしても、最初からすべてのニーズに合わせてスケーラブルなシステムを設計することはできません。多くの場合、システムを実行すると、予想外のボトルネック(つまり、ローカルネットワーク帯域幅)が見つかります。とにかく、私のアドバイスは間違いなくhighscalability.comです:)

1
Zubair

そのためにこの本をお勧めします。

http://www.Amazon.com/Scalable-Internet-Architectures-Developers-Library/dp/067232699X/ref=sr_1_1?ie=UTF8&s=books&qid=1243267630&sr=8-1

これは主にPHP本ですが、アイデアはどのWebスタックでも同じです。

0
Tommy Hui

これ はまさにあなたが必要とするものです!アプリケーションアーキテクチャガイドは、設計者を支援するために、Microsoft Patterns and Practicesチームによって作成されました...

0
Pavel Nikolov

これは主題への良い入門書です。IBMdeveloperWorksには、スケーリングするアプリケーションのアーキテクチャパターンの使用に関する興味深いチュートリアルがいくつかありました: here および here

0
ivo