Web/アプリケーション/プロキシサーバー違い

きっかけは国内のWebサービスの技術スタック一覧を調べた際に、
プログラミング言語、FW、DB、CI・CD、各種ツール、インフラなどは記載があったが
サーバに関しての技術一覧があり、かつ３つも項目があった。
さらに、Nginxが複数の項目に記載があり、困惑しまくりだ。

『結論』は、サーバーの種類と用途によって技術は使い分けるだけの話で
複数の項目に記載がある技術は、そのままの意味で、複数の役割を果たせる利便性を持つ技術であるだけの話でした。


アプリケーションサーバとプロキシサーバ

・アプリケーションサーバ（APサーバ）とは
→プログラミング言語で構築されるアプリケーション（プログラム）を動作させる役割

→クライアントPCで個別に利用するアプリとは違って、
Webアプリケーションは、複数のユーザーで共有して使うことがある業務システムなどは、サーバーを使ってネットワークを経由して動作を実現する必要がある。

→→サーバOSの上層にAPサーバが乗り、その上層にプログラムが乗ると認識しておく

→ソフトウェアもハードウェアも存在するけど、
サーバーOSとプログラム　の間に位置するソフトウェアだと、ミドルウェアって呼ぶ。

・役割/機能→ミドルウェアとしての機能だけでなく、他にも役割がある
→土台としてのプログラム開発プラットフォーム

①データベース接続などの、コネクト機能
…データをクライアント側で保存している訳ではないため、データ管理・処理用のデータベースをサーバ側で備えて、データの読み書き（③）を実行する『コネクト機能』が搭載されている

②トランザクション管理機能
→データの完全性・整合性が必要なアプリでは重要な機能で、APサーバに標準搭載されている。
トランザクション…分離させることのできない処理を１つにまとめたもの
処理１→処理２の段階で、処理１の時に何らかのエラーで止まった時、データの整合性が取れなくなる
しかし、トランザクション機能が失敗と見なし、最初の段階に戻せる。


③ビジネスロジック→DBの読み出し＋書き込みの処理手順の総称
リモート通信機能→分離されたコンピュータ同士の通信
メッセージ機能→メッセージの小受信と非同期処理
>＜非同期処理とは…
1つのタスクが実行中でも、他のタスクを実行できる方式の処理
＜＜併せて「同期処理」について
→複数のタスクを実行する際に一つずつタスクが一個される方式
→→デメリットは時間がかかる。
タスク１→２の同期処理で、２が終わるまでに１が中断された場合画面が固まったようにめてしまう。＞＞

>非同期処理…あるタスクを処理しながら、別のタスクも処理できる。
実行の順番を待たないため、完了の順序も都度異なる。
→やれることやっとく要領良い奴
　・メリット
→全体の処理速度を速められる（❌プログラムの全体像が複雑に）
・非同期処理と並列処理の違い
→並列処理は複数の処理を同時進行するが、非同期処理は止めることなく実行できる。つまり共存が可能で、並列処理を実現するために非同期処理で実装するということがあり得る。
（個人的に比較対象じゃないのかなと思った。どうなんだろ）

>非同期処理の重要性
→快適な操作性を確保するための手段
＜具体＞
重い処理やネットワーク通信など一定ではない待ち時間が発生する際に、他の処理が待たされることがないので、アプリがフリーズすることがない。
→応答性や操作性の評価が厳しいユーザーなどに応えるためにはますます重要になる（圧倒的自分向けで面白い）

>プログラムで実装する場合
・コーディング
コールバック→実行したものが完了してから次の処理が実行される
Promise→前の処理が完了してからその結果を、次の処理で使う時に使う。
非同期処理を抽象化し、コーディングをより分かりやすく見せる処理
→→２つを駆使して、コールバック地獄（ネスト＝入れ子問題）にならないようにする。


ディレクトリ機能→ディレクトリサービスとの接続
認証機能→ユーザーの認証・接続の許可管理
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　APサーバここまで
ーーーーーーーーーーーーーーーーーーーーーーーーー
Webサーバとは
インターネット通信プロトコルである「HTTP」を利用して、ブラウザからユーザーリクエストを受け、APサーバからレスポンスを返す役割

Apache HTTP Serverというソフトウェアはがある
アプリケーションサーバと接続するための、「モジュール」

Webアプリケーションサーバ
→こんがらがりまくる名前をしている。

アプリケーションサーバを理解しにくいもとしている存在とも言える


共通点が多く、明確な違いはないが、Webサービスに特化したAPサーバと呼ぶ傾向がある
しかし、静的なサイトの時は、Apache HTTP ServerとWordPress絵お組み合わせたサイトは、Webサーバだけでも動作するので、WebAPサーバを持たないこともある。
→もっと仕組み的なところを深掘りして、違いを認識することがゴール？

APサーバを使うメリットとして
・開発工数を削減できる
→コネクト機能、トランザクション機能などのビジネスロジックが良いパフォーマンスを出す
・分散処理によるパフォーマンス向上
→役割に応じて、サーバを分離させた分散処理が、サーバーコンピューー他の手配によるコスト面ではデメリットだが、サービスのパフォーマンスの向上が見込める
・メンテナンス・アプデ・トラブスシュートが容易
→トラブルの要因を切り分けながら探っていける
・セキュリティを担保しやすい
→それぞれ守れば堅くなる

ーーーーーーーーーーーーーーーーーーーーーーーーー
プロキシサーバーとは
プロキシ＝代理
・クライアント側がWebサイトにアクセスする際、その間に入ってデータの受け渡しを行っってくれる。

・キャッシュ…閲覧したサイトのデータを一時的に保存しておくことが可能
複数のユーザーが同時にアクセスしたい時に、サーバーが持ってるキャッシュを返せば、正規のやり取りをするまでもなく表示できるので、遅延を防ぐことができる

種類
①フォワードプロキシ

![Something went wrong]()

・クライアントコンピューターとWebサーバーの間に設置し、アクセスを代理する
・Webサーバーでは、プロキシ側の情報しか表示されないため、アクセスしたい端末のIPアドレスが隠すことができる
・不正サイトへアクセスしようとしてる時は、ブロックが可能


②キャッシュサーバー
・特定のインターネット上のサーバーが発信している画像やページといったコンテンツを複製して保存しているサーバー
・端末からのリクエストがあったら、キャッシュ上の情報を返す
・CDN（コンテンツデリバリーネットワーク）
…大容量のコンテンツ/大量のアクセスを効率的に配信するネットワーク
→ゲーム、音楽、映画などのコンテンツにおいて高速に配信するために活用される
③透過型プロキシ
・透過型プロキシは、ネットワーク側の制御によって代理受信をおこない、プロキシサーバー経由でWebサイトにアクセスする方法です。
・そのため、端末側でプロキシの設定をする必要がないのが透過型プロキシの特徴
④リバースプロキシ
・フォワードプロキシの反対
・Webサイトへのリクエストを代理受信する
・不正なアクセスを防止する
。他にも、キャッシュを保持してサーバーへの負担を軽減するなど役割がある