はじめに
業務研修の中でタイトルにある本を読むことになったのでまとめとして書いています。
この記事が僕と同じような初心者エンジニアさんのお役に立てれば幸いです。
Webアプリケーションの三層構造
Webアプリケーションは基本的に三層に別れている
-プレゼンテーション層=Webブラウザ&Webサーバ
ユーザーへの表示、操作受け付け
-アプリケーション層=アプリケーションサーバ
ユーザからの命令実行、表示画面の作成
-データ層=DBサーバ
データの抽出、更新、保管
三層にすることでのメリットは二点
①負荷分散
層別されていないAPであれば全ての処理を実施することになる、小規模なシステムでは大丈夫だが複雑な処理になると負荷が大きくなる。
三層に分けることで負荷を分散できる。
②改修範囲の限定
改修が必要になった時、例えばデータの改修であればデータ層だけを改修すればいいので、コストを抑えれらる。
MVCモデル
Model(データ処理)、View(ユーザに出力)、Cntorller(ユーザからの命令をモデルとヴューに指示)の三つの部分からなる。
MVCモデルのメリットは上記の三層構造と似ているが、異なる点として以下が挙げられる。
・三層アーキテクチャはWebシステム全体の設計方針であり、MVCはサーバサイド・スクリプトの設計方針だから対象とする範囲が違う
・三層アーキテクチャは階層構造だが、MVCは相互に関わりあう
Webサーバ
Webクライアントに対する窓口の役割を果たし、静的ページのデータやAPサーバから転送された動的ページのデータをクライアントに転送する。
Webサーバが動作しなくなるとサービスが提供できなくなるため、冗長化という構成をとっている。
・冗長化=サーバの機器台数を多くし、一台当たりの負担を少なくするとともに一台が故障しても別のサーバだけでサービスを続けられるようにする
Webクライアント
Webサーバから送られてきた「HTTPレスポンスを解釈し、ユーザに表示する役割を持つ。
代表的なものが、Webブラウザだがこれ以外にもFacebookやTwitter専用クライアントもある。
アプリケーションサーバ
サーバーサイド・スクリプトを実行し、DBへデータ検索や更新、Webサーバに動的ページの転送をしたりする。
三層アーキテクチャの中では一番処理の複雑で負荷が高い。
セッション管理
ログインが必要なサイトなどの場合は、APサーバがセッションIDを発行して一つのセッションとして管理する
トランザクション管理
予約サイトなどの「全てのやり取りが成功するまで完了しない処理」はリクエスト/レスポンス単位でなく、複数の処理をトランザクション単位で管理している
データベース管理システム
データの扱いは非常に注意を払う必要があり、冗長化構成をとっている。
手法として、ミラーリング・レプリケーション・シェアードティスクなどがある。
キャッシュサーバ
キャッシュサーバは「リクエストに対するレスポンスを覚えておく」という役割を持つ。
その覚えておいた記憶を「キャッシュ」と呼び、文書や画像、動画といったコンテンツのキャッシュを「コンテンツキャッシュ」、DBMSのデータ検索要求(クエリ)の結果のキャッシュが「クエリキャッシュ」と呼ばれる。
コンテンツやデータの変動を加味した有効期限が定められている。
Ajax
以前のWEBサイトは同期通信が主だった。同期通信とはクライアントとサーバーが交互に処理を行い、同調して通信を行うこと。
問題点としてレスを待つ間、クライアントは待つことしかできないから効率が悪くなってしまう。
この欠点を補うために登場したのがAjax。
JavaScriptが直接Webサーバと通信を行い、XMLデータとして更新に必要なデータのみをやり取りするため、サーバの負担が少ない。
また、AjaxはWebブラウザの代わりにブラウザ上で動くJSだけが通信を行うため、非同期通信を実現できる。よってレスポンスを待つ間もユーザからの入力などレスポンスに左右されないところは操作することができる。
WebAPI
プログラムがクライアントとしてデータを送信し、サーバからデータを返送してもらう窓口がWebAPI。
EX>Twitter投稿いボタンを押すと指定している投稿もされる。
APIの様々な手法=XML-RPC,Atom,SOAP
マッシュアップ
複数のWebサービスを組み合わせて新たなWebサービスを生み出すこと。
よく使うAP「googleの位置情報」や「アマゾンの購入状況」など。
CGI
Webサーバがクライアントからの要求に応じてサーバサイド・スクリプトを起動すルための仕組みがCGI。