masalibの日記

システム開発、運用と猫の写真ブログです

初心者向けWEBアーキテクチャ入門

f:id:masalib:20180723201140j:plain 上記の図は、WEBアーキテクチャです。
新人などの場合はあまり経験がない人は、用語すら聞いたことない状態だと思います
全部理解する必要はないですが、googleの検索する時に参考になれば幸いです
会社の勉強会用(無給)に作った資料・・・めっちゃ時間かかった。

資料も公開しています
初心者向けWEBアーキテクチャ入門ver2018-07-23 - Google スライド
(ダウンロードして修正もできます)

DNS:

説明する前に前提

IPアドレスとは:

ネットワークにつながっている機器はかならずIPアドレスが割り振られています
IPアドレスIPアドレスで通信することでデータをやり取りしています

グローバルIPとローカルIPについて グローバルIPは世界中で重複がにあように管理されており、世界中の通信で利用されています

ローカルIPは会社や家などで自由につかえるIPです ローカルIPのなかで127.0.0.1というは自分のIPアドレスをさすアドレスです

ドメインとは:

www.yahoo.co.jp

というアドレスがあった場合に
yahoo.co.jpのことをがドメイン(ルート)です
www.yahoo.co.jpはサブドメインです

URLとは:

URLとは

例) https://example.com/index.html

https     → プロトコル、接続方式、決まりごと
example.com → 接続先ドメイン(ホスト)、
        要求を送る相手
index.html → 実際のHTML

DNSとは:

DNSは "Domain Name Service"の略で、 世界規模のWebを可能にするバックボーン技術です。 ドメインからIPアドレスへの変換してくれるサービスです 弊社の場合は外部、つまりインターネットの外においてあります 内部DNSサーバーを置く場合はbindというサーバーを構築すれば可能です ただbindは過去にセキュリティホール(穴)が多々あり、 DNSはサービスの根幹のため、落ちたらすべてが終わるので外部(route53など)にまかせています

DNSの例とは:

Yahoo.co.jpをおこなった例

コマンド
$ nslookup -type=A -timeout=5 yahoo.co.jp

結果
Non-authoritative answer:
Name: yahoo.co.jp
Address: 183.79.135.206
Name: yahoo.co.jp
Address: 182.22.59.229

ファイアウォール:

f:id:masalib:20180723153651p:plain
ファイアウォールは接続元IPアドレス・接続先IPアドレス、ポートなどで通信を制限します
例えばWEBサーバーやMailサーバーにSSHで接続した場合の例は

接続元IPを会社のIP
接続先IPをWEBサーバー
接続先ポートを22(SSH)
上記以外のSSH(22)を除外する

今はやっていないのですが、組織内(WEBサーバー、Mailサーバー)からインターネットに意図しない通信を遮断することもできます

インフラの図だとFWという形になっています
インフラ世界だとWAFはファイアウォールですがWEBエンジニアだとWAFはWEBアプリケーションフレームワークで 微妙に違うのでご注意を

WEBサーバー:

Webサーバーとは、Webブラウザからのリクエストに応じて静的画面や画像を表示する働きをするもの。 Apache、nginx 、IIS(Internet Information Services)の3つが有名です f:id:masalib:20180723160652p:plain 1・リクエス
 ユーザーのブラウザからリクエスト(表示したいページ(URL))
2・レスポンス
 要求サーバーWEBページ(HTML)や画像(jpeg,png,svg

WEBコンテナ(アプリケーション・サーバー)の例 f:id:masalib:20180723160706p:plain (1) Web層 :クライアントの操作性や視認性の向上(フロントエンド)
(2) アプリケーション or ビジネス層 :
ビジネスロジックに基づく処理を行う部分(アプリケーション)。
ServletなどのWEBコンテナが有名。
(3) DB層 :アプリケーションの要求で、必要なデータを渡す部分。

3層構造になっているけど、単純に役割を分割しただけです

DBサーバー:

f:id:masalib:20180723172410p:plain
データベースサーバーとは、データベースを内部に持ち、データベース管理システムが動作しているサーバーのことである。
データベースサーバーは、クライアントからのリクエストなどに対してデータベースの検索などの処理を行い、処理結果を返す。
一般的にはインターネットに接続できない所に配置してWEBサーバーなどからしかアクセスできないようにします

一般的なDBサーバーはマスターからセカンダリーサーバー(複数の場合もあります)で構成されます
更新内容を同期をとることでマスターが死んでもいいようにしています。このような構成をレプリケーションといいます

マスターサーバーが壊れた場合はマスターを使えない状況にする(通信ができるなら)、セカンダリーサーバーを昇格させてがマスター(アクティブ)にします
この動作をフェイルオーバーといいます
フェイルオーバーの用語はDBサーバーだけではなくネットワーク機器全般でよく使われます

予算がないプロジェクトだとWEBとDBが同居している事があります f:id:masalib:20180723172428p:plain

リレーショナルDBだとMysql,PostgreSQL,オラクル、SQLServer,DB2が有名です
基本的なSQLは同じなのですが、微妙に機能が違います
全然ちがうのはプロシージャーです。私は「プロシージャーはアキラメロン」と言われました

「非SQL」を表すNoSQLは、大規模なWebアプリケーションによって生成される膨大な量のデータを処理するために登場した新しいデータベーステクノロジのセットです
Mongodbなどが有名です

キャッシュサーバー:

キャッシュサーバーとは:

提供されているWebサイトやDBなどのコンテンツの複製を蓄積し、
ユーザから要求があったときに本来のサーバに代わって配信することにより、
ネットワークのトラフィックやサーバの負荷の分散を図るサーバのこと

http://e-words.jp/w/%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%B5%E3%83%BC%E3%83%90.html より引用

DBのキャッシュサーバーとは:

f:id:masalib:20180723170120p:plain 多くのWebアプリケーションはDBサーバーにデータを格納し,
アプリケーションサーバでそのデータを引き出して
ブラウザ等に表示させています。

しかしデータが大量になったり,アクセスが集中すると,
DBサーバーの負荷があがり,データベースのレスポンスが悪化し,
Webサイトの表示が遅延するなど大きな影響がでてしまいます。

通常,データベースへの問い合わせ結果を一時的にキャッシュすることで,
データベースへのアクセス回数を減らし,
動的なウェブアプリケーションの高速化します

有名な所だとmemcachedやRedisがあります (AWSのElastiCacheなど)

WEBのキャッシュサーバー(リバースプロキシ)とは:

f:id:masalib:20180723170145p:plain

静的なファイルはWEBサーバーに問い合わせにいかなくて リバースプロキシサーバーのキャッシュが返信する事で WEBサーバーを高速化する 動的なファイルであっても、リバースプロキシサーバーがファイルの圧縮をおこなうことができる

URLのパスやパラメータなどでWEBサーバーを選択することができる (ロードバランサー機能) f:id:masalib:20180723170218p:plain Apache、nginxが有名です

ロードバランサ:

f:id:masalib:20180723172549p:plain

「ロードバランサ」とはその名の通り、Webサーバーかかる負荷(load:ロード)を複数のサーバに分散させ、処理のバランスを調整するための装置です 日本語では一般的に「負荷分散装置」などと呼ばれる。インフラの図形だとlbとかかてる事がある www.kagoya.jp

リバースプロキシと同様にパスやパラメータやIPアドレスによってWEBサーバーを切り替えたりできます 個人的な意見ですが、アクセスが少ないならリバースプロキシサーバーでも問題ないと思います
トラフィックが大量にあるサイトなどがある場合だとリバースプロキシだと処理速度が遅くなる傾向があります
大量の場合はハードウェア的な 「F5 ロードバランサ」を選択する方がいいかと思う 割愛しますが、SSLアクセラレータという機能もロードバランサーでできます

メールサーバー:

f:id:masalib:20180723172204p:plain

メールの送信や配送を行うSMTPサーバー、
ユーザーがメールを受信するための機能を提供するPOP3サーバーがあり、 この2つをあわせてメールサーバーといいます
www.kagoya.jp

インフラじゃない人はたぶんSMTPサーバーの接続情報を設定するぐらいです プロトコルが簡単なのでなりすましができると思います
そちらを防ぐためにDNSサーバーにSPFレコードとよばれる設定をする事があります
SPFを設定したからといって迷惑メール防止が完璧というわけではないです

ジョブサーバー:

時間がかかってしまうような処理があった場合に、専用でおこなうサーバー 例:月次のサマリー処理とか 予算がない場合はWEBサーバーやDBサーバーの中にある場合もあります

WindowsのタスクスケジューラやLinux系のcronなどで定期的に実行されることがよくあります メッセージキューにためて実行するパターンをありますが、そちらは割愛します

ストレージ:

簡単にいうとファイルサーバです
画像や動画など重たいファイルなどをWEBサーバーに置きたく場合につかいます オンプレミス(自社)の場合はストレージの冗長化などをおこなうのが一般的です

クラウドストレージ:

インターネット上でデータを保存、アクセス、共有できるサービスです HTTP経由でRESTful API経由で対話できるという利点があります。 一般的にはビデオ、写真、オーディオ、CSSJavascript、ユーザーイベントデータなどを格納するために使います 弊社ではユーザーイベントデータ(ログ)のバックアップ程度しか使っていません

CDN:

CDNは「コンテンツ配信ネットワーク」の略で、 静的なHTML、CSSJavascript、イメージなどのアセットを単一のオリジンサーバーから 提供するよりも高速にウェブ上で配信する方法を提供します。 これは世界中の多くの「エッジ」サーバーにコンテンツを配信することで 機能し、ユーザーはオリジンサーバーではなく「エッジ」サーバーから 資産をダウンロードすることになります。 弊社ではjqueryなどの一般的なjavascriptで利用しています。

CDNはアプリなどからもアクセスできます。 例 ゲームのバージョンアップ時のデータ オリジンサーバーにアクセスされるとダウンしていまうので CDNで配布している

発表用資料:

参考資料:

engineering.videoblocks.com

www.cman.jp eng-entrance.com