Amazon.comでのインフラと分散システムエンジニアリングの責任者である、技術担当副社長のTom Killalea氏はACM queueへスケーラブルなWebサービスの構築についての記事を寄稿した。記事では多くの実例を通じてスケーラブルなWebサービスの構築のための原則の概要を述べており、核となるテーマは“必要なものだけを構築する”というものだ。
注意すべきこと:早期の最適化
スケーラビリティの最適化に時間とリソースを費やすよりも、使いやすさの改良やトラフィックの制御に費やすべきです。
採用すべきこと:他の人たちの仕事
Tom氏はフレームワークやインフラに対する他の人々の仕事についての学習は、製品化までの時間を短縮し、顧客価値の提供にフォーカスする助けになると説明している。
SOA(サービス指向アーキテクチャ)が好まれる傾向、クラウドコンピューティングインフラストラクチャサービスの出現、ASP.NETやDjango、Rails、SpringといったWebアプリケーションフレームワークの利用という3つの重要な進歩が、大規模で動的なWebサービス構築の障壁を低くすることに貢献しています。
注意すべきこと:過度の最適化
Tom氏はNicholas Nassim Taleb氏の大きな影響を与えるがほとんど起こりそうもなく予測不可能な出来事について言及し、可用性を増加させるための戦略として冗長性を使うことを提案している。フェイルオーバーメカニズムに反対して負荷分散の手段として冗長性を提供するというアイディアは、統計的にあまり起こりそうにない出来事のための過度な最適化よりも費用対効果に優れている。
採用すべきこと:クラウド
Tom氏はAmazon.com EC2インフラでホストされているソーシャルWebアプリケーションAnimotoが突然の要求に対応し、3500インスタンスにまでスケールアウトできたという例を挙げている。クラウドインフラでなければメンテナンスに多量のコストを招くだろう。
注意すべきこと:目標駆動最適化
期待されるトラフィックをモデリングし、目標にあった非常に緻密なスケーラビリティプランを立てることは危険を伴います。よいモデルを作るのは難しく、可変性を考慮しないおめでたい仮定に悩まされます。[…] もしあなたのWebサービスが成功すれば、最終的に目標モデルが提案するよりも需要が多いことがわかるでしょう。—ブラックマンデーやスーパーボールサンデーとは違うかもしれないですが、おそらく予期していた時間よりも短い間に。
採用すべきこと:翼のもぎ取り
Tom氏はこのように言っている。“最初にどこが壊れるか、なぜ壊れるかを分析するのではなく、我々は与えられたアプリケーションやサービスがどうやって破壊や欠落なしで進歩させられるかを探し、それから次の限界点を決定するための再テストをします。”
Tom氏は次のように記事を結論付けた。“スケーラブルなWebサービスを構築する上で最も困難なのは、障害や極端な同時アクセスパターンがある中での永続性、信頼性、パフォーマンス、費用対効果のトレードオフに対処する方法です。”