Webアプリ制作チュートリアル #05「サーバー」

2024/08/18

Webアプリ

t f B! P L
eyecatch Webアプリケーションの配信に重要な役割となるサーバーについて理解を深めていきましょう。 一般的にWebアプリにおけるサーバーは、次のような役割があります。
・httpプロトコルの公開 ・RESTfulAPIの実装(データの送受信) ・ユーザーレスポンスとしての入り口と出口
また、クラウドサーバーとオンプレミスサーバーのそれぞれの特徴についても理解を深めておきましょう。

httpプロトコルの公開

インターネットでホームページを見るために、ブラウザのアドレス欄に、http://example.com/~~というURLを入力するとそのサイトを見る事ができるのは、httpプロトコルでHTMLをダウンロードする事ができるからです。 プロトコルには、ftp://や、file://、などのように、いろいろなアクセス方法がありますが、基本的には、IPアドレスに付与するポート番号を決めています。 IPアドレスは、ドメインで決めて、プロトコルでポート番号を決めていると言うことを理解しておきましょう。

主要なプロトコルのポート番号一覧

プロトコルポート番号説明
http80Webアクセス
https443セキュアWebアクセス
ftp20/21ファイル転送
sftp115セキュアファイル転送
ssh22リモートターミナルアクセス
DNS53名前解決
他にもたくさんのポートが存在します。それぞれどんな場面で使用するポートなのかを理解するといろいろな場面で役に立ちます。 参考 : 【チートシート】ポート番号一覧

サーバーでの設定方法

サーバーでhttpプロトコルへのアクセスを受け付けるようにするには、いろいろな方法でできますが、ApacheやNginxをインストールして80番、443番の受け入れをセットするパターンが主流です。 他にも、Nodejsでサーバー設定をすることで、Webアクセスを受け入れる事が可能になるし、CGI系のプログラムでWebアクセスを行うことも可能です。

Webアクセスを受け入れるポイント

いろいろな方法で、Webアクセスを受け入れる事ができますが、どの方法が一番いいかと言うと、 公開するWebアプリの種類や特性によって変わってきます。 単にHTMLを表示する程度のWebアプリであれば、一番主流なApacheで十分ですが、ポーリング(リアルタイム送受信をする通信)が必要な場合は、Nodejsやポーリングに対応したプログラミングで構築する必要があります。 他にもデータアクセスが多い場合は、複数台のサーバーで同じデータを同期をとる必要があるので、相応の設定が必要になります。

RESTfulAPIの実装(データの送受信)

データ通信で必要になるRESTful APIは、独立して構築することで、複数のWebアプリからのアクセスを受け付ける事が可能になります。 もちろん、Webアプリと同じサーバーでセットしても構いませんが、Webアプリの特性を考えて設計する必要があります。 RESTfulAPIで多い設定パターンとしては、データベースへの問い合わせを受けて、そのレスポンスをする仕組みと、データベースへのデータの書き込みを行うことを担う場合が多く、Webアプリとデータベースの中間管理の位置付けで使われます。 ちゃんとセキュリティ設定を行う事で、安定したAPIが運用できるようになりますが、このサーバーがダウンすると、Webアプリ自体が使えなくなる場合もあるので、運用負荷などの検知も必要になります。(全てのサーバーで運用負荷検知は必要です)

ユーザーレスポンスとしての入り口と出口

Webアプリは、サーバーを複数繋ぎ合わせて、1つのアプリが構成される事が多く、データの流れをちゃんと設計しておく必要があります。

構成サンプル

単純な図ですが、Webサーバーを冗長構成として、複数台に増やした時に、データの流れが変わってきます。
アクセス負荷と、データ欠損が起きないかというポイントで、データの入り口、出口をしっかりと設計しておきましょう。

クラウドサーバーとオンプレミスサーバーについて

サーバーと一言で言っても、OSから中で扱うアプリケーションから、ハードウェアのスペックから様々なタイプが存在します。 そして、スマートフォンが登場したあたりから、クラウドサーバーというジャンルが、AWSをはじめ、GoogleのGCP、MicrosoftのAzure、多数の大手企業から国内サーバー企業が発足させて今では、ほとんどのメジャーWebサーバーは、クラウドサーバーを使っている状態になりました。 では、クラウドサーバーとそれ以外のサーバーって一体何がどう違うのでしょうか? そんなサーバーの種類について理解しておきましょう。

クラウドサーバーとは?

クラウドサーバーとは、アプリケーションでアカウントを追加するかのように、サーバーを何台もソフトウェア上で追加したり、削除したりできるサーバー環境です。 Dockerのコンテナを追加したり、削除したり、コピーしたりするのと似ていますね。 特徴としては、アクセス負荷が高くなった場合に、スケーリングというアクセスするサーバーの台数を増やして、1台あたりの処理軽減を行う処理が、いとも簡単にできてしまうと言うのが最大のメリットです。 また、実態の無い仮想環境にOSをインストールしているので、リージョンの切り替えや、コピーなどの操作がネットワークを介して簡単に行えるのも特徴的です。 操作も全てクライアント端末から管理パネルにアクセスして、操作できるため、非常に手軽に扱えるため、人気が高いのもうなづけます。

オンプレミスサーバーとは?

クラウドサーバーと対照的なのが、オンプレミスサーバーと言われる、サーバー端末に直接OSをインストールして使用する、通常のパソコンをサーバーとして設置された、実態(実機)のあるサーバーの事です。 ハードウェアが直接OSと内部ソフトウェアを動かしているので、電源管理から、内部のネットワークカードやストレージケーブルまでの管理を行う必要があり、機器トラブルなども頻繁に発生してしまうのが特徴です。 クラウドとの大きな違いは、実機が伴うので、拠点が限定されてしまうので、ネットワーク障害や震災などのトラブルの場合に、どうすることもできなくなると言うトラブルに見舞われやすいという点です。 なので、ディザスターリカバリー対策(DR)や、それに伴う事業継続計画(BCP)についてもよく検討しておく必要があるのも、オンプレミスの特徴です。 ただし、古くからのオンプレミスでのサーバー知識は、クラウドサーバーのスキルの基礎になるものばかりなので、オンプレを知らないクラウドネイティブのエンジニアが最近増えていて、障害対応が苦手なエンジニアが多くなっているという事も現場の問題になっているようです。 そもそも、クラウドサーバーも、裏ではオンプレで実装されているパソコンが莫大な量世界中のリージョンに振り分けられて運用されているので、オンプレを理解できていないと、リージョントラブルなどで対応できないエンジニアになってしまうという事ですね。

レンタルサーバーとは?

オンプレミスサーバーの端末を直接貸し出すサービスの事を、レンタルサーバーと呼ばれています。 サーバーのスペックやストレージの容量、メモリサイズからネットワークの回線の太さまで、細かな単位で月額(または年額)単位でレンタルするサービスで、 1台のサーバーを保持しておく事で、公開サーバーを持てるので、かつてはホームページを公開するだけでも、レンタルサーバーの契約が必要な時期がありました。 最近では、1台契約はスペックが高すぎるので、ホームページ公開程度では、金額が見合わなくなってきていて、あまり利用されなくなっているようです。 ちなみに、レンタルサーバーは、「専有サーバー」という言い方もするので、サーバー一台まるまる使いたいというニーズのある人は使い続けているサービスのようです。

VPSとは?

VirtualPrivateServerという、日本企業の多くが提供しているサービスも理解しておきましょう。 基本的にはクラウドサーバーとほぼ同じなのですが、レンタルサーバーの1台をさらに内部をクラウドサーバー化して、複数のクライアントでCPUやメモリリソースを分け合いながら使う事ができるサービスです。 小さなホームページであれば、非常に安価に契約できるこのサービスは有意義に使えます。 ただし、クライアントの中に、アクセス負荷の高いアカウントがあった場合、リソースをそのクライアントが独り占めしてしまうため、本来の平均化されたスペックが維持できなくなる可能性もあるので、ガチャ的な要素もあるようです。(最近では、販売元が監視に力を入れているので滅多にないですが)

いろいろなサーバー形態

サーバーを1台ずつ契約するのでは物足りないけど、オンプレでサーバー構築したい場合は、ラックマウント契約をデータセンターに直接契約する場合もあります。 映画やドラマでよく見るサーバールームには、このラックが山のように並べられているので、みた事がある人も多いと思います。 そのラックに自分でラックマウントサーバーをセットして行き、ネットワークの設定やら、各種ハードウェアの設定を行い、自分自身で管理をする事になります。 よほどサーバー知識がない限り、この方式には対応できませんが、一度この作業を行うと、サーバー構築から運用、障害時の対応まで、かなりのスキルが身につくことは間違いありません。 他にも、無料で扱えるクラウドサーバーや、条件付きで無料で公開できてしまうサービスなどもあるので、いろいろな情報を取得しておく事もサーバー運用から構築・設計に影響してくると思います。

あとがき

サーバーはとにかくITの中でも肝中の肝なのですが、対応できるエンジニアが少ないのも事実です。 実際に大規模サーバー運用などを経験すると、パソコンのいろいろな技術が身につくので、嫌がる人も多いのですが、バックエンドエンジニアでオンプレミスの構築から運用は一度は経験しておいた方がオススメです。 実際に仕事じゃなくても、自宅にある古くなったパソコンにLinuxOSをインストールして、サーバーを作って手軽に構築してみるという事をやるだけでも、かなりの技術習得があると思います。 一番人気にAWSは、チュートリアルなどがしっかりとしていて、アカウント登録時から1年間は、無料チケットが付いているので、よほど大きなサービス公開をしなければ、ほぼ無料で使う事もできます。 オススメなのは、チュートリアルを無料期間に実際のサーバーを使って、やっておくと、スクールなどに通わなくてもしっかりとしたクラウドサーバー(AWS)の知識が身につくので、安価に済ませたいという人は絶対にトライしてみましょう。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ