クライアント・サーバ(Web/AP/DB)方式について
本日はクライアント・サーバ方式について解説したいと思います。
DockerやAWSについて、色々調べていたんですが、まず「クライアント・サーバ方式」を理解しないことにはどうにもならないという結論に至って、この記事を書いています。
それでは早速中身に入ります。
クライアント・サーバ方式について
イメージは以下のとおり。
クライアントからの「リクエスト」を受けたサーバが何かしらの「処理」を行って、その結果を「レスポンス」として返す方式のことです。
とってもシンプルですね。
ブログを例にあげると
クライアント(自分のMac)からブログを書いて投稿すると、その情報がサーバに送られて、結果が画面に表示される
という感じ。
では、次にサーバ側の処理をもう少し詳しく解説します。
Web/AP/DBサーバについて
サーバ側の「処理」も大きく3つの役割に分けられます。webサーバ、APサーバ、DBサーバです。
各サーバの役割は以下の通り
Webサーバ
ウェブサーバ
クライアントからのリクエストを受けたり、レスポンスを返したりする役割を持ちます。簡単な処理ならwebサーバがレスポンスし、複雑な処理なら次のAPサーバに処理をお願いすることになります。
AppacheやNginxがよく使われます。
APサーバ
Webサーバからの処理要求を受けて、複雑な処理を行います。また必要に応じて、DBサーバにデータの登録や取得を要求します。
PumaやUnicornがよく使われます。
DBサーバ
データベースサーバ
ストレージにデータを登録したり、ストレージからデータを取得したりする役割を持ちます。
ポイントはDBサーバはデータを管理(登録したり、取得したりすること)することが役割で、データそのものはストレージに格納されています。
以上を踏まえて各サーバの役割ももう少し詳しく書くと以下のようになります。
Railsを例に流れを説明すると
- クライアントからのリクエストをNginxが受け取って、Unicornに処理を要求する
- UnicornはRackを通して、Railsアプリケーションに処理を要求する
- Railsのrouterが処理に対応するcontrollerとActionを決定
- ストレージへのデータ登録が必要な場合はmysqlに要求する
のようになります。
参考:ローカルの開発環境について
参考に私のローカル開発環境についてもイメージを作成しました。
Webサーバで使われるNginxやAPサーバで使われるUnicornは構築していません。
あとがき
次回はDockerを使うとローカル開発環境にサーバ本番環境を簡単に構築できるよという話をしたいと思います。
参考URL
ミドルウェア(Web、AP、DB)について知ろう | Think IT(シンクイット)
Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳) - Qiita