提供するサービスの検討
サービスの検討をするときは全体の概要から初めて最終的にアプリケーションの詳細な機能面まで落とし込む。
・サービスの内容
何を提供するサービス?どんなユーザを想定している?Webかアプリのどちらの方で作る?どのような時に使うもの?
・必要な機能とデザイン
ログイン機能、投稿機能、外部API、
画面遷移、画面詳細など
ネットワーク構成の検討
Webシステムを構成するネットワークは三つにわかれる。
どのようなネットワーク構成にするかはシステムの内容とコストによって検討する。
①外部ネットワーク
インターネットに晒されファイアーウォールの外側
②内部ネットワーク
インターネットからの接続を受けない、APサーバ/DBサーバなど
③DMZ (DeMilitarizedZone)
外部・内部ネットワークの間に位置し、不正な通信を内部に流さないためのもの、Webサーバ
IDS,IPS,WAFなどのセキュリティを高めるツールの導入はシステムとコスト面によりきまる
サーバー構成の検討
ネットワーク構成が決まれば、各サーバーにどうサーバを構成するかを検討する。
Webサーバを冗長化する場合はリクエストをどのサーバに渡すかを考える必要がある。
ロードバランサー
リクエストを各サーバに振り分ける役割を持つ。
Webサーバよりインターネット側に位置し、クライアントからのリクエストを受け取って配下のWebサーバに振り分け、Webサーバからのレスポンスをクライアントに流す。
システムによって、コストを抑えたサーバ構成の場合は一つのサーバをWeb・アプリケーションサーバとしてDMZに配置し、可用性を重視したものはAPサーバを内部に配置しDBを冗長化させるといった構成になる。
サーバ基盤の検討
サーバーなどの機器をどのように調達するかを検討する必要がある。
オンプレミス
自社で購入して利用する「自社運用」のこと。
好きなように構成を組むことができシステムのデータも扱いやすいというメリットがあるが、機器は高価で置き場所も必要なためコストが大きくかかり、運用知識も必要となる。クラウドの登場により徐々に少なくなっている。
レンタルサーバー
他者が構築し貸し出しているサーバのこと。
費用がやすく、構築・運用の手間がないため個人利用に向く。完成しているもののため構成の自由度はほぼない。
クラウド
他者が提供する仮想的なサーバーを設置できる環境のこと。
クラウドの中にサーバーを設置して利用する方法は個人・企業ともに多く採用されている。
メリットとして、構成の自由度も高く、課金制なので使った分だけの使用量となる。
負荷分散
サーバーを複数台並列に用意してリクエストを振り分けて処理し、一台のサーバーの負荷を分散させることを負荷分散という。
負荷分散はロードバランサーが行い、これにより多くのアクセスを処理、サーバーの冗長化が実現できる。
ラウンドロビン方式
各サーバーに順番にリクエストを振り分ける方式。処理の複雑さにばらつきがある場合は負荷に偏りができてしまう。
動的分散方式
サーバーの負荷を監視し、負荷の少ないサーバーに優先してリクエストを振り分ける方式。
CPU使用率やメモリ使用量、ディスク負荷が「負荷」に定義される。
パーシステンス
同一クライアントからのアクセスを判別し、常に同じサーバーへ転送する方式。
ログインなどを利用するシステムの場合はセッション管理がしやすくなる。
サーバー設計・構築
ディスク構成
ディスクとは、ハードディスクやSSDといったサーバーの記憶領域を指す。
データベースなど、重要なデータはサーバーのシステムデータと別のディスクに保存しておくことで、システムデータのディスクが破損した場合でも重要なデータを守ることができる。
またディスクが一つの場合でも、その内部を二分割にすることができ、パーティショニングという。
データベース設計
大きく、論理設計と物理設計の二つに分かれる。
論理設計
データベースに格納すべきデータの洗い出しとそのデータ同士の関連性を定義する。
・格納すべきデータの洗い出し
EX.商品、在庫、注文、顧客、、、
・データの関連と多重度
EX.顧客と注文は1対多、注文と商品は1対多
・詳細な情報の洗い出し
EX.テーブル構造とデータ
・データの整理
EX.データの重複を無くすなど
物理設計
論理設計で定義されたデータを実際のデータベース内にどのように格納するかを決めるのが物理設計。
・ここのデータをどのようなデータ型にするのか、
・頻繁に検索されるデータにインデックス(索引)をつける、
・文字列の文字コードを何にするか、
などを具体的に決める。
ログ運用
機器が自分の行った処理をテキストファイルに記録していて、これをログファイルという。
・システムログ→OSが発生したイベントやエラーを記録するもの
・アプリケーションログ→ミドルウェアなどのアプリケーションが動作履歴を記録するもの
・アクセスログ→Webサーバなどが受けたリクエストを競ろくするもの
ログは何もしないと膨大なサイズになるから定期的にファイルを別のファイルに切り替えたり、削除する必要がある。
このようなメンテナンスをログ運用やログメンテナンスという。
ログローテーション
ログファイルを切りわけ、別のファイルとして保存することでログの可読性を確保すること。
古いログファイルを削除してハードディスクの容量を圧迫しないようにするため、「ハウスキープ」よも呼ばれる。
アクセスログの解析
Webサーバーのアクセスログにはユーザアクセスしたきた日時などの情報が記録されているてため、有効につ買えばサービスの向上や売り上げ増加にも使われる。
アクセスログを解析して参考となる情報を見ることを得ることをアクセス解析と呼ぶ。
Webサイトのパフォーマンス
リクエストが送られてからユーザに対して画面が表示されるまでの時間などの指標をパフォーマンスという。
パフォーマンスの指標
・応答時間→リクエスト送信から何らかのHTTP応答が帰ってくるまでの時間
・表示完了時間→Webページの表示が完了するまでの時間
・ページ読み込み時間→読み込みから読み込み完了までの時間
・可用性→エラーなくWebサイトにアクセスできた確率
パフォーマンス監視
パフォーマンスはリクエストの数などのサーバーへの負荷で変化する。
定期的にパフォーマンスを監視して、低下を検知した場合はその原因を解決することを求められる。
原因の調査はサーバーごとのCPU使用率やメモリ利用率といったサーバーの負荷状態を監視することが重要である。
脆弱性診断
セキュリティ確保のためには脆弱性診断が重要となる。
OSやミドルウェアなど外部のものは脆弱性情報データベースを定期的に確認し、利用している製品の脆弱性の有無を把握する必要がある。
自前で開発したものに関しては実際に擬似的なサイバー攻撃と同じ手法でWebシステムにアクセスを試みて、確認する。
この手法をペネトレーションテストという。