Webアプリケーションの基礎について



業務でWebアプリケーション開発を行っているのですが、基礎的なことについていざ説明しようとしたときに正確に言える自信がなかったので、復習として改めて調べたことをまとめておきま。


*Webアプリケーションに必要なもの

  • Webサーバ
    アプリケーションサーバにリクエストを送り、返ってきた結果をWebブラウザに返却します。(Apache、nginx 、IISなど)
    IaaS – Google Compute Engine、Amazon EC2
    PaaS – Google App Engine、Heroku
    SaaS – Google Apps、Salesforce、GitHub

  • アプリケーションサーバ
    Webサーバから受け取ったリクエストをもとにPHPなどを実行し、Webサーバに結果を返却します。(Tomcat、Unicornなど)

  • ログサーバ

  • ロードバランサー
    Webサーバーにかかる負荷を分散させ、停止するのを防ぐことです。(Amazon ELBなど)

  • キャッシュストレージ
    ロードに時間がかかる画像や一時的なデータを保存しておき、次回からの処理速度をあげるためのものです。

  • セッションストレージ
    ユーザーのセッションをDBに保存しておき、次回からの処理速度をあげるためのものです。

  • セキュリティ監視
  • メトリクス監視
  • パフォーマンス監視
  • ログ監視
  • GitHub
  • CI
  • オーケストレーション
  • デプロイ


*Webアプリケーションの基礎

  • URL
    スキーム、ホスト、パスの組み合わせで作られています。
    http://www.example.com/welcome.html
    スキームのhttpはWebの通信をあらわしています。
    ホストはWebサーバの間でコンテンツをやりとりするための方法を規定したものです。パスはホストに対してこのコンテンツがほしいと要求するためのものです。

  • Webブラウザで表示するまでの流れ
  1. ホストのIPアドレスを調べる(DNSの仕組みを使う)
  2. ホストのIPアドレスに対してTCPの80番ポートで接続する
  3. TCP接続が成功したらHTTPリクエストを送信する
  4. HTTPレスポンスを受け取る
  • DNS(Domain Name Service)
    ドメインからIPアドレスに変換するサービスのことです。

  • TCP
    接続が成功してからデータのやりとりを行うプロトコルで、バーチャルサーキットとよばれる論理的な通信回路を実現します。

  • 80番ポート
    webコンテンツをやりとりするためのHTTPの標準なポート番号は80番と決まっています。1つのIPアドレスにポート番号が複数存在します。メールサーバの標準のポート番号は25番です。

  • HTTP
    プロトコルのことでPOSTはデータ送信(アップロードなど)、PUTはURLそのものに対して更新するときに使われます。

  • HTTPレスポンス
    成功は200番、アクセス権がない場合は403番、リクエストされたURIがない場合は404番、サーバ側の失敗は503番です。
    100番台 – 情報(処理は継続)
    200番台 – 成功
    300番台 – リダイレクト
    400番台 – クライアントエラー
    500番台 – サーバーエラー

  • HTTPクッキー
    Webサーバ側で状態を記憶するために作られたものです。
    Webサーバがレスポンスを返す際にHTTPクッキーをセットし、
    ブラウザはそれを覚えておきます。クッキーを受け取ったサーバと再度通信する際にHTTPヘッダに含めて送信することで、同じユーザーだと認識することができます。セッション管理でも使われます。

  • 補足
    アプリケーションサーバとDBサーバはそれぞれ独立させておき、接続数や負荷状況によって台数やマシンスペックを調整できるようにしておくのが一般的です。

  • RASIS(レイシス)
    品質の良いwebサービスを作るための評価指標の頭文字をとったものです。
    信頼性 – デプロイやコード
    可用性 – サーバ
    保守性 – ドキュメント、バックアップ、障害検知
    保全性 – データベース制約、ドランザクション
    機密性 – SSL、パスワードの取り扱い、脆弱性


*その他



*Sphinx

Web API のドキュメントを書くには、サードパーティ製の拡張である shinxcontrib-httpdomain を使います。
定義や参照のためのマークアップやインデックス化機能を提供しています。また、API Blueprint を利用するとAPIのテストも行うことができます。(sphinxcontrib-apiblueprint)


*所感

最近はクラウドが面倒な部分をやってくれることも多くなってきましたが、クラウドを使うにしてもクラウドが何をしているのか、足りないことは何かをしっかり理解して使いたいと思います。

Previous
Next Post »

人気の投稿