バックエンド設計のために知っておくべきバックエンド構成の3要素
(maily.so)バックエンド環境の要は、ユーザーにデータを安定して届けることにあります。そのためには、Webサーバー、WAS、データベースという3つの中核要素が必ず必要です。これら3つは、Webの発展過程で現れた問題を解決するために進化してきました。モニタリング、ロードバランシング、キャッシング、CI/CDパイプライン、Kubernetesのような高度な技術も、この3要素への理解が先行していなければ、いつ崩れてもおかしくない家を建てるのと同じです.
第一に、Webサーバーの役割
Webサーバーの主な役割はファイルを配信するファイルサーバーであり、代表的なWebサーバーには Nginx、Apache、IIS、Caddy などがあります。こうしたWebサーバーは、静的ファイルを提供する基本機能に忠実であり、高度に最適化されています。
第二に、WAS(Web Application Server)の登場と役割
WASは、特定のリクエストを受け取ると、あらかじめ決められたプログラムを実行し、そのプログラムが生成した結果をユーザーに出力する方式で動作します。この方式こそが真のバックエンドの誕生と言え、サーバーが単にファイルを出力するだけでなく、考え、計算し、ロジックを処理し始めた瞬間です。Webサーバーは常に同じ静的なページを返しますが、WASは動的なページを返します。
第三に、データベースの必要性と役割
データベースは、データを永続的に保存し、安全に管理し、同時アクセスを制御する役割を担います。
このほか、バックエンド設計のために知っておくと非常に有用なものとして、RESTful API設計(リソース中心のURL設計、HTTP(GET, POST, PUT, DELETE など)の意味、ステータスコードの使用など、RESTアーキテクチャスタイルに基づくAPI設計原則)や認証(セッションベース認証など、ユーザー認証と認可方式に関する基本的な理解、およびユーザー管理ポリシーの策定)、エラー処理(システムの安定性を確保するために不可欠な例外ケース処理の概念)への理解などが挙げられます。
8件のコメント
まるでこの世のバックエンドがWebプロトコルしか使わないと思っているかのようで、
バックエンドの核心3要素と言いながらWebサーバーが出てくるので混乱します
ALBやCDNといったものが、すでにWebサーバーにやってほしい部分をすべて担っているのに、あえてそれにこだわる理由がよく分かりません。皆さんは、実際にWebサーバーがあったからこそ防げたセキュリティ上の問題のようなものはありますか?
ALBが機能的にWebサーバーを代替し、ユーザーが直接WASなどのバックエンドにアクセスできないのであれば、従来のセキュリティ環境構成の要件は満たしていると見るわけですね。さらに、多くのサービスは今でもオンプレミス環境で稼働しているものも多いです。
セキュリティの観点を考えると、依然として Web Server / WAS サーバーは分離が必要だと思います。クラウドネイティブ環境だからといって変わることはありません。WAS などの Backend は、ユーザーが直接接続できるレイヤーに置くべきではありません。
Webサーバー / WAS の概念を知っておくことは、今でもなお意味があるのでしょうか?
Java EE、php、CGI が流行していた時代には適切な区分ではありましたが、今ではたいていの言語が独自の HTTP サーバーを内蔵しており、ALB、API Gateway、CDN、Object Storage といった概念も登場して日常化し、時代は変わりました。
むしろ、歴史的な文脈なしに今とは大きく異なる Web Server と WAS の概念を扱うのは、もはや適切な考え方でもなく、入門者により大きな混乱をもたらすだけではないかという気がします。
フィンテック分野では、セキュリティ要件のため、今でも Web-WAS が分離された環境が多いです。自分がどのような環境に配属されるか分からないので、何であっても備えておくのが正しいと思います(笑)
クラウド環境である今でも、大容量処理のために
1つのインスタンス内で複数のWASを効率よくバランシングするために使用されます
ネットワーク要求が少ないなら必要ないかもしれませんが
同感です。12-factor appの原則とクラウドネイティブ・パターンを教えるほうが、より実用的だと思います。コンセプト自体が古すぎます。