バックエンドシステムの概要
アプリケーションを提供するために、バックエンドシステムのコンポーネント全体像と、それらがどのように連携して動作するかを把握する。
バックエンドシステムとは
バックエンドシステムは、クライアントからのリクエストを処理し、アプリケーションのロジックを実行し、データストレージとやり取りし、レスポンスを返します。
- バックエンドシステムは、ブラウザ、モバイルアプリ、または他のサービスなどのクライアントからリクエストを受け取ります。
- システムがどのように動作すべきかを決定するアプリケーションロジックを実行します。
- データベースなどの永続的なデータストアから読み取り、そこへ書き込みを行います。
詳細
ユーザーがアプリケーションを操作するとき、通常はWebブラウザやモバイルアプリのような クライアントインターフェース と通信しています。そのクライアントには、通常、システムの中核となるロジックは含まれていません。代わりに、重い処理を行うバックエンドシステムへリクエストを送信します。
バックエンドシステムは、クライアントとデータレイヤーの間 に位置します。その役割は、リクエストを受け取り、アプリケーションのルールに従って処理し、結果を返すことです。この処理には通常、入力の検証、ビジネスロジックの実行、そしてデータベースや他のストレージシステムに保存されたデータの取得または変更が含まれます。
たとえば、ユーザーがWebサイトにログインするとき、クライアントはログイン認証情報をバックエンドに送信します。バックエンドはその認証情報を検証し、データベースにユーザーレコードを問い合わせ、認証が成功したかどうかを示すレスポンスを返します。
要するに、バックエンドはアプリケーションの 意思決定エンジン として機能します。受け取ったリクエストにロジックを適用し、データベース、キャッシュ、外部サービスなどの基盤システムと連携しながら、意味のあるレスポンスへ変換します。
バックエンドアーキテクチャとコアコンポーネント
バックエンドシステムは、リクエスト処理、アプリケーションロジック、データ管理が分離され、管理しやすくなるようにレイヤー構造で整理されています。
- APIレイヤーはクライアントからのリクエストを受け取り、レスポンスを返します。
- アプリケーションレイヤーはビジネスロジックを実行し、システムの動作を調整します。
- データレイヤーはデータベースから永続的な情報を保存・取得します。
詳細
多くのバックエンドシステムは、システムのさまざまな部分に責務を分けるレイヤー構造を採用しています。すべての機能を1つの大きなコードベースにまとめるのではなく、各レイヤーが特定の問題の解決に集中します。
APIレイヤー はバックエンドへの入口として機能します。ブラウザやモバイルアプリなどのクライアントからのリクエストを受け取り、入力を検証し、クライアントに返すレスポンスを整形します。
アプリケーションレイヤー にはシステムのビジネスロジックが含まれます。ここでルール、ワークフロー、意思決定の処理が実装されます。たとえば、注文をどのように処理するか、またはユーザーがある操作を実行する権限を持っているかどうかを、アプリケーションレイヤーが判断することがあります。
データレイヤー は永続的な保存を担当します。データベースやストレージシステムと通信し、アプリケーションの動作に必要な情報を読み書きします。
これらのコンポーネントの基盤となるのが インフラストラクチャレイヤー で、システムの実行環境を提供します。これには、バックエンドをホストするサーバー、コンテナ、オペレーティングシステム、クラウドサービスが含まれます。
このレイヤー構造により、エンジニアはシステムをモジュール化しやすくなり、アプリケーションの成長に合わせて保守、拡張、スケールをしやすくなります。
バックエンドのリクエストパイプライン
バックエンド内部では、受信したリクエストは構造化されたパイプラインを通り、さまざまなコンポーネントが段階的にリクエストを処理します。
- リクエストは HTTP リクエストとして到着し、ルーティングによって適切なハンドラーに振り分けられます。
- Middleware は、メインのアプリケーションロジックが実行される前に、リクエストを確認、変更、またはブロックできます。
- アプリケーションはビジネスロジックを実行し、データベースとやり取りして、レスポンスを返します。
詳細
クライアントがバックエンドシステムにリクエストを送ると、そのリクエストはデータベースやアプリケーションロジックに直接飛ぶのではなく、いくつかの処理ステップを通過します。
リクエストはまず HTTP request としてサーバーに届き、router がアプリケーションのどの部分がそれを処理するかを決定します。メインロジックに到達する前に、リクエストは middleware を通ることがあり、そこでは認証チェック、ログ記録、バリデーションなどの処理が行われます。
ハンドラーに到達すると、バックエンドは business logic を実行します。これは多くの場合、controllers と services に整理されています。これらのコンポーネントがリクエストを処理し、保存されたデータを読み取ったり更新したりするために database queries を実行することがあります。
処理が完了すると、バックエンドは response を構築してクライアントに返します。
バックエンドエンジニアリングの責務と制約
バックエンドエンジニアは、リクエストを処理し、アプリケーションデータを管理するシステムを設計・運用します。
- クライアントとサービスがシステムとやり取りできるようにする API を設計する。
- システムの動作を決定するアプリケーションロジックを実装する。
- 永続データを管理し、利用が増えてもシステムの信頼性を維持する。
詳細
バックエンドエンジニアは、アプリケーションを機能させる内部システムを担当します。業務には、API の構築、ビジネスロジックの実装、データ保存の管理、バックエンドサービスの保守が含まれます。
同時に、エンジニアは現実世界の制約の中でシステムを設計しなければなりません。アプリケーションは素早く応答し(performance)、増加する需要に対応し(scalability)、コンポーネントが故障しても利用可能であり続ける必要があります(reliability)。
また、システムは機密情報を保護し(security)、将来の開発に向けて理解しやすく適応しやすい状態を保つ必要があります(maintainability)。
これらの目標はしばしば互いに競合するため、バックエンドエンジニアリングでは、システムを安定かつ効率的に保ちながら、トレードオフのバランスを取ることが求められます。
モノリス vs マイクロサービス
バックエンドシステムは、一般的に単一のアプリケーション(モノリス)として、または複数の独立したサービス(マイクロサービス)として構成されます。
- モノリスは、すべてのアプリケーションコンポーネントが一緒に動作する単一のデプロイ可能なシステムです。
- マイクロサービスは、システムをより小さな独立したサービスに分割します。
- これらのサービスは、API やネットワーク呼び出しを通じて相互に通信します。
詳細
モノリシックアーキテクチャでは、すべてのアプリケーションコンポーネントが単一のデプロイ可能なシステムにまとめられます。API レイヤー、アプリケーションロジック、データベースとのやり取りは通常 1 つのコードベース内にあり、1 つのサービスとして動作します。開発とデプロイがより簡単なため、多くの初期段階のアプリケーションはこの形で始まります。
モノリスでは、コンポーネントが同じデータベースを共有し、1 つの単位としてまとめてデプロイされることがよくあります。この方法は、最初は構築や保守がしやすい一方で、システムが大きくなるにつれてスケールや変更が難しくなることがあります。
マイクロサービスアーキテクチャは、これとは異なるアプローチです。1 つの大きなシステムではなく、アプリケーションを複数の小さなサービスに分割します。各サービスは特定の責務に集中し、独立して開発、デプロイ、スケーリングできます。
これらのサービスは、通常 API やメッセージングシステムを使った サービス間通信 によって相互に通信します。これにより、大規模なシステムをより柔軟にスケールし進化させることができますが、その一方で、ネットワーク、デプロイ、システムの調整において追加の複雑さも生じます。
バックエンドシステムとしての調整レイヤー
バックエンドシステムは、クライアント、データストレージ、外部サービスをつなぐ調整レイヤーとして機能します。
クライアントアプリ
ユーザー操作
バックエンドAPI
中央ロジック
キャッシュ
高速データ
データベース
永続化
メッセージキュー
非同期タスク
外部 API
統合
- バックエンドは、クライアント、データベース、外部サービス間の通信を調整します。
- ルールを適用し、リクエストを検証し、システム内でデータがどのように流れるかを制御します。
- 実際の多くのシステムでは、単一の API の背後で複数のインフラストラクチャコンポーネントを統合しています。
詳細
実際のアプリケーションでは、バックエンドシステムが単独で動作することはほとんどありません。代わりに、サービスを提供するために連携する複数の基盤システムを調整します。
典型的なバックエンドは、永続的な保存のためのデータベース、より高速な読み取りのためのキャッシュ、バックグラウンド処理のためのメッセージキュー、そしてサードパーティ連携のための外部 API と通信することがあります。バックエンドは、これらのコンポーネントをいつ、どのように使うかを決定します。
この調整レイヤーは、重要なルールも適用します。受信したリクエストを検証し、ユーザーが操作を実行する権限を持っていることを確認し、システム全体でデータが変更される際の整合性を維持します。
システム設計の観点では、バックエンドはアプリケーションの制御センターとして機能します。インフラストラクチャコンポーネント間の情報の流れを管理しながら、クライアントが安全にやり取りできるクリーンなインターフェースを公開します。
質問セクション
1 / 5
このレッスンはプレミアムコンテンツです
プレミアムにアップグレードしてぼかしを解除し、全文を読めるようにしましょう。