迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

クライアント・サーバ(Web/AP/DB)方式について

本日はクライアント・サーバ方式について解説したいと思います。

 

DockerやAWSについて、色々調べていたんですが、まず「クライアント・サーバ方式」を理解しないことにはどうにもならないという結論に至って、この記事を書いています。

 

それでは早速中身に入ります。

  

 

 

クライアント・サーバ方式について

イメージは以下のとおり。

f:id:oyaoya1123:20191110013657p:plain


クライアントからの「リクエスト」を受けたサーバが何かしらの「処理」を行って、その結果を「レスポンス」として返す方式のことです。

 

とってもシンプルですね。

 

 

ブログを例にあげると

 

クライアント(自分のMac)からブログを書いて投稿すると、その情報がサーバに送られて、結果が画面に表示される

 

という感じ。

 

 

では、次にサーバ側の処理をもう少し詳しく解説します。

 

Web/AP/DBサーバについて

f:id:oyaoya1123:20191110014408p:plain

 

サーバ側の「処理」も大きく3つの役割に分けられます。webサーバ、APサーバ、DBサーバです。

 

各サーバの役割は以下の通り

 

Webサーバ

ウェブサーバ

クライアントからのリクエストを受けたり、レスポンスを返したりする役割を持ちます。簡単な処理ならwebサーバがレスポンスし、複雑な処理なら次のAPサーバに処理をお願いすることになります。

 

AppacheやNginxがよく使われます。

 

 

APサーバ

アプリケーションサーバ

Webサーバからの処理要求を受けて、複雑な処理を行います。また必要に応じて、DBサーバにデータの登録や取得を要求します。

 

PumaやUnicornがよく使われます。

 

 

DBサーバ

データベースサーバ

ストレージにデータを登録したり、ストレージからデータを取得したりする役割を持ちます。

ポイントはDBサーバはデータを管理(登録したり、取得したりすること)することが役割で、データそのものはストレージに格納されています。

 

MySQLOracleがよく使われます。

 

 

 

以上を踏まえて各サーバの役割ももう少し詳しく書くと以下のようになります。

 

f:id:oyaoya1123:20191110022403p:plain

 

Railsを例に流れを説明すると

 

  • クライアントからのリクエストをNginxが受け取って、Unicornに処理を要求する
  • UnicornはRackを通して、Railsアプリケーションに処理を要求する
  • Railsのrouterが処理に対応するcontrollerとActionを決定
  • ストレージへのデータ登録が必要な場合はmysqlに要求する

 

のようになります。

 

 

参考:ローカルの開発環境について

参考に私のローカル開発環境についてもイメージを作成しました。

 

f:id:oyaoya1123:20191110024558p:plain

 

Webサーバで使われるNginxやAPサーバで使われるUnicornは構築していません。

 

あとがき

次回はDockerを使うとローカル開発環境にサーバ本番環境を簡単に構築できるよという話をしたいと思います。

 

参考URL

ミドルウェア(Web、AP、DB)について知ろう | Think IT(シンクイット)

Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳) - Qiita