まえがき
おつかれさまです。Mochiです。
今回は最近知識としてインプットしたばかりの『WEB三層アーキテクチャ』について記録できればと思います。
WEB三層アーキテクチャとは?
WEB三層アーキテクチャとは、クライアントからのリクエストを処理するサーバにおいて構成される構造を指します。
プレゼンテーション層・アプリケーション層・データ層の3つから成り立っています。
プレゼンテーション層
プレゼンテーション層では、クライアントからのリクエストに対してサーバとのやりとりをコントロールするだけでなく、クライアントへの画面表示を行います。
ユーザーが直接触れる部分となります。
役割としては、ユーザーに最も近く、視覚的な表示を提供します。また、ユーザーからの入力を受け取ります。
アプリケーション層
アプリケーション層では、クライアントからの実際のリクエストを処理します。
そしてその結果をプレゼンテーション層に返します。
ファンクション層とも呼ばれるようです。
役割としては、データの処理や検証、DB等との連携を行います。
データ層
データ層は、アプリケーションが使用するデータを管理し、永続化する部分となっています。この層はデータベースだけでは無く、ファイルシステムやオブジェクトストレージなどから構成される層です。主な役割としては、データの保存や取得、更新や削除を行います。
クラウドベースでのWEB3層アーキテクチャ運用
WEB3層アーキテクチャはオンプレミスでもクラウドでもインフラを構築することが可能ですが、私はクラウド環境でのデプロイを推奨します。
基本的な話になりますが、WEB3層アーキテクチャ以前にハードウェアの保守やメンテナンスの必要がなくなります。
また、クラウドでの運用を選択すればマルチリージョンでの災害復旧の観点から、可用性の向上も見込めます。
AWSを使用したWEB3層アーキテクチャの運用
クラウドでの運用となった場合、シェア率の高さから選択肢として入ってくるのはAWSなのかなと思います。
AWSを使用して環境を構築する場合、プレゼンテーション層にCroudfront・EC2を使用します。静的リクエストにはS3でも対応できるかと思います。
また、アプリケーション層にはEC2を使用できますが、状況に応じてLambdaやECS等も選択肢に入ってくるのかなと思います。また、複数のEC2インスタンスを使用して夜間帯等のトラフィックが集中するタイミングでオートスケールさせる設計を組むことも重要です。ロードバランサを使用した負荷分散もこのアーキテクチャで実現しています。
データ層ではRDSを使用できます。AWSが自動的にバックアップやスナップショットを作成し、データベースの管理が容易になります。
Google Cloudの場合
Google Cloudの特徴は、VPCがリージョンの外側に配置されていることです。このメリットはマルチリージョンでのシステム運用をしていても単一のVPCでそれを行うことができます。添付の設計図通りにアーキテクチャを組む場合、プレゼンテーション層にCloud CDNやCompute Engineを設置します。アプリケーション層にはCompute Engineを複数使用して冗長化を行っています。先程のAWSでのアプローチと同様にオートスケーラーを使用しています。また、アプリケーションの負荷分散を目的にロードバランサを設置しています。これによりトラフィックの増加にも対応でき、複数のCompute Engineにトラフィックを分散することができます。
データ層ではCloud SQLを使用してデータのバックアップやレプリカの作成を実現できます。
あとがき
AWSやGoogle Cloudを使用したクラウドベースでのWEB3層構造について説明しました。従来ではオンプレミス環境でのレガシーな運用が主流だったと思います。ですが近年ではオンプレからクラウドへのマイグレーションやハイブリッド運用の需要が徐々に増えてきています。WEB3層構造についてガッツリ書くつもりが、途中から結局クラウドの話になってしまいました、、インフラエンジニアにとってどんなアーキテクチャを組む時もクラウドは切っても切り離せないものになってきているなと感じました。
引用元