スケーラブルWebサイト(1〜2章)
著者がFlickrのエンジニアリング・マネージャーであり、「大規模なWebサイトの構築」に関する全般的な知識を得られるのではないかと思い読んでみました。
日本語の初版が発売されたのが2006年であり少し古いですが、書かれていることは、今でも勉強になる部分はたくさんあると思います。
環境は主にLAMP環境でサンプルコードはPerlとPHPが多いかなと思います。
以下、各章ごとにまとめや感想などを。
第1章 はじめに
- ここでは、そもそもウェブアプリケーションとは?アークテクチャとは?についての定義がされています。
- 優れたウェブアプリケーションの設計は、「トップダウンでまずネットワークとハードウェアのアーキテクチャが定義され、続いてプラットフォームを構成するコンポーネントが、そして各レイヤによって実現される機能が定義される」とされています。
- そのアーキテクチャとは、後々発生しうる問題や要望に対応しやすいための基礎を設計することであるとされています。といっても、何でも対応できるようにとアークテクチャやフレームワークに多く盛り込みすぎると、それはそれで難解なシステムになって保守性が落ちてしまうかと思いますので、「シンプル」にということも大事かなと思います。
- そうして考えてみると、シンプルで拡張を受け入れやすいアーキテクチャであることが大事かなと思います。
第2章 ウェブアプリケーションのアーキテクチャ
- ここでは、第1章で触れていたウェブアプリケーションのアーキテクチャについて説明されています。
ウェブアプリケーションの階層
インターフェイスの分離
- また、画面ロジック(HTMLなど)とアプリケーションロジックの分離は、テンプレート化などの方法を取るにしても常に双方(画面ロジックとアプリケーションロジック)から分離を意識することが重要。
- ファイルとしては分離されているけど、テンプレート側にアプリケーションのロジックが大量に記載されている例もよく観ますので、この辺りは注意すべき点だと思います。
- デザイナーさんとの分業なども考慮すると、やはり画面ロジックとアプリケーションロジック間のインターフェイスをしっかり定義することが理想なんでしょうね。
- アプリケーションの中でも、ページロジックとビジネスロジックを明確に分離しておくことが重要。
- phpの場合は、ビジネスロジックをwebroot以下には置かず、拡張子も.phpでなく、.incにする。
- Perlの場合は、名前空間を分離する。ページロジックはMyApp::WWW::*、ビジネスロジックはMyApp::Core::*とすべき。そうするとMyApp::MobileやMyApp::WebServiceなどを簡単に追加できるからとあります。
- 個人的には、ビューはビューでさらに階層を作ってまとめた方がいいんじゃないかと思いますがどうでしょう?MyApp::View::WWW::*やMyApp::View::WebServiceなどのように。
- 各ロジック間でインターフェイスを定義し明確に分離することで、「あるインターフェイスの処理を別の言語に置き換えたり」、「データベースの変更やクラスタ化すること」が容易に実施できるようになるというのはその通りだと思います。
分離の流れ
- 巨大関数に支配された世界や、プロトタイピングのウェブアプリケーションを分離していく流れとして、「ロジックとマークアップのファイルを分離する」→「マークアップコードを1ページ1ファイルにする」→「テンプレートシステムを導入する」→「ページロジックとビジネスロジックを分離する」を段階的に実施する方法が示されています。
ソフトウェアとハードウェア
- ここではウェブアプリケーションが稼働するハードウェアについて、導入や構築、ホスティングについての注意点が書かれています。
- また、サーバーの配置環境として、「共有ハードウェア」→「専用ハードウェア」→「コロケーション」→「セルフホスティング」を挙げられており、それぞれの利点や注意点なんかが挙げられています。
- 今だとAmazon EC2やGoogle App Engineなどのクラウドサービスも有力な選択肢になるかと思います。
- その他、ハードウェアを自社で保持している場合の注意点として下記が挙げられており、こうして改めて記載されるととても参考になります。
その他
- データがどう流れているかをTCP/IPスタックを意識して理解するなど、ネットワークの基礎を理解しておくことの重要さについても書かれています。この辺りはウェブアプリケーションを作る場合には、理解しておきたい部分だなと思います。
と、2章はこれから詳細に語られる内容について触れられた概要的な章になっています。
続きはまた後日書いていきたいと思います。