ゲームおじさんが「サーバー」について説明するよ

たまには、ゲームおじさんの知的な一面をちらっと見せるために、技術系の話題でもしようかな。


じゃあ、今日のテーマは「サーバー」や。

最近流行りの「マストドン」のインスタンスなんかを立ち上げるときには、サーバー関連の知識は必須やね。

あと、AbemaTVの「亀田興毅に勝ったら1000万円」の企画で、視聴者が殺到してサーバーがダウンしたのも記憶に新しいね。(ゲームおじさんはリアルタイムでは見てなかったけど。)

また、ブログを本格的にやろうとするなら、サーバーの知識はけっこう必要になってくるかもしれん。(はてなブログは何から何まで親切にやってくれるけどね。)

で、今回は、すごくザックリとなんやけど、ゲームおじさんが「サーバーとはなんぞや?」を説明していくわ。


「サーバーサイド」の誕生

「サーバー(server)」って概念は、コンピューターが進化していく過程で産まれたものや。

昔のコンピューターは、「メインフレーム(大型汎用コンピューター)」って言われとるんやけど、ようするに、部屋一面に並べるでっかいコンピューターよ。

f:id:gmoji:20170510200135g:plain
Wikipedia「メインフレーム」から画像引用)

大学の研究室とかにあって、みんなで何かすごい計算とかして、「ワーオ!」って感じやったんや。

その時は、データを保存するところと、操作をするところ(端末)が、一緒やったんよ。


で、「インターネット」とか「パソコン」が出てきて、それぞれが個人用のコンピューターを持つ時代になると、「操作するところと専用の処理をするところを切り離したほうが良くないか?」って発想が出てきた。


そして、「クライアントサイド(操作するところ)」と、「サーバーサイド(処理をするところ)」に別れた。
サービスを受ける側と提供する側って言ったほうがわかりやすいかもしれない。

これを、「C/S(クライアント・サーバ)モデル」って言う。


「クライアント」も「サーバー」も、同じ「コンピューター」ではあるんやけど、それぞれ違う役割をさせるわけよ。

「クライアント(client)」側は、ユーザーの入力と、出力(描画)っていう大役をこなす必要がある。
「サーバー(server)」側のコンピューターは、必要なデータを届けてくれる。

スマホをピャッピャッしたり、キーボードをガチャガチャやったりするのが、「クライアント」。
で、ウェブのテキストとか、ゲームのガチャの内容とかを届けてくれるのが、「サーバー」。


C/SとP2P

「C/S(クライアント・サーバー)」モデルでは、ユーザーが持つ端末の「クライアント」側が「サーバー」にやってほしい処理を要求して、「サーバー」側が要求されたものを提供(serve)する。

だから、「サーバー(server)」って言う名前なんよ。

ちなみに、「サーバー」と「クライアント」に分けない「Peer to Peer(ピア・ツー・ピア)」ってモデルもある。略して「P2P(ピーツーピー)」って言うんやけど、役割分担をせず、対等なコンピューター同士が通信するんよ。

クライアント・サーバー型のネットワークはこんな感じ。
f:id:gmoji:20170510200704p:plain


一方でP2P型のネットワークはこんな感じ。
f:id:gmoji:20170510200654p:plain
Wikipedia「Peer to Peer」から画像引用)

もともとの「分散」っていうインターネット的な考え方からすれば、P2Pが理想なんやろうけど、やっぱり「クライアント」と「サーバー」に分けたほうが、楽やし便利ってことやね。


サーバーとクライアントの具体例

具体的に説明しよう。

例えば、みんなはこのブログ、「インターネット」で見てるわけやろ?

インターネットで、膨大な情報を見ることができるよね。

それは、ウェブブラウザを使って、あなたのパソコンとかスマホの画面に表示させて見るわけやけど、情報自体が手元にあるわけじゃないじゃない?

インターネットでリンクを辿って得られる情報は、どこかのサーバーにあって、それが提供されるから、自分の端末で見ることができるわけよ。

情報の「置き場所」は、それぞれが契約してるサーバーの中にあるわけ。


あと、スマホのアプリゲームも例に出すとわかりやすいかもしれん。

スマホの画面を「タップ」したり「スワイプ」したりしてゲームを操作するやん。これが「クライアント」側の処理や。

そして、新しいステージを読み込んだり、レベルアップしたり、ガチャを回したらキャラが手に入ったりするのが、「サーバー」側の処理や。

ちなみに、ウェブサイトの閲覧と違って、スマホのゲームの場合、画像やテキストを描画する以上の機能が必要になる。
だから、アプリをインストールすることで、クライアント側の処理を豪華にしてるんやね。

ウェブブラウザで遊ぶ「ブラウザゲーム」が、アプリをインストールする「ネイティブアプリ」のゲームになったことで、「パズドラ」や「モンスト」など、動きを取り入れた複雑なゲームが可能になったってわけよ。


サーバーはお金がかかる!

実は、サーバーを運用するのってけっこうなお金がかかるんよ。

消費者からすれば、「インターネットの通信料金」って、契約したら月額いくら、みたいな「定額制」やよね。

でも、企業側は、データのやりとりが増えれば増えるほどお金がかかる「従量課金制」なんよ。

だから、動画なんかをネットで流せば、視聴者は無料で見れたとしても、動画を放送する側は膨大なサーバーの使用料を払わんといけん。

「AbemaTV」は1年で200億の赤字らしいけど、コンテンツの制作費よりも、動画を流すためのサーバー代と通信料で、すごくお金がかかっとると思うね。


サーバーダウンは怖い!

先日、亀田のボクシングのイベントでAbemaTVのサーバーがダウンしたけど、これは普通に大失態や。エンジニアとして一番やっちゃいけないレベルの失敗。

十分に準備していたんやろうけど、何らかの予想外の障害が起きたんやろうね。
AbemaTVは、単純な視聴者数だけじゃなく、視聴者が打てるコメントの処理とかもあるし、あそこまでの規模になると、「これもうわかんねぇな」ってことになっても不思議はないやね。担当した人は災難やったね。

「サーバー」だってOSのあるコンピューターやから、自分たちが今持っとるスマホとかパソコンとかと同じように、思ったとおりじゃない挙動をすることがある。怖いもんやで。


ブログのサーバー

ちなみに、今みんなが見たり、あるいは書いたりしてるブログやSNSのデータも、サーバーに保存されとるわけよ。

ゲームおじさんは、昔はWordPressでブログを書いとったんやけど、WordPressブロガーは、ちゃんと自分でサーバーを借りる必要があるんよ。

まあ、WordPressっていう仕組みはすごくて、記事書いたら自動でアップロードしてくれるし、サーバー側との連動もすごく簡単にできる。
検索すれば、必要な情報はすぐに見つかるし、運用に苦労することはほとんどないと思うけどね。

あと、企業が提供するブログサービスは、レンタルサーバーすら必要ないね。

今自分が使っとる「はてなブログ」っていうサービスは、「株式会社はてな」が用意したサーバーに、全はてなユーザーのデータがあるわけよ。

便利やし楽やけど、生殺与奪を「株式会社はてな」に握られとるってことでもあるわなw


ゲームとサーバー

当然やけど、オンライゲームとかウェブサービスを運用するときは、サービス提供側がサーバーと契約することになるんよ。

サーバーの設計をどうするか、どの言語、フレームワーク、ミドルウェアを使うかなど、色んな選択肢があるよね。

もちろん、そのためのサービスを提供している会社はたくさんある。

VPS(ヴァーチャル・プライベート・サーバー)」か、「AWS(アマゾン・ウェブ・サービス)」のどちらかを使うのが王道やね。

「VPS」は、一つのサーバーの上に仮想的なサーバー環境を作れて、ようは一企業が提供しとるんやけど、登録者が自由にサーバーを設計できるってサービスやね。
「さくらインターネット」とか「GMO」とかが提供しとる。

「AWS」は、あのECサイト「Amazon(アマゾン)」が提供するクラウドコンピューティングサービスで、これも自由にサーバーを設計できる。操作を覚えるのは大変けど、並の企業のVPSよりは圧倒的に高パフォーマンスよ。

天下の任天堂さんも、実はAWSを使っとるんよ。

AWS 導入事例:任天堂株式会社、株式会社ディー・エヌ・エー| AWS


サーバーサイドとフロントエンド

ちなみに、web系のエンジニアは、フロントとサーバー、そしてインフラという分類に別れるらしい。

Webエンジニアの種類は、概ね

  • フロントエンドエンジニア:見える部分を作る人
  • サーバサイドエンジニア:動的な処理を記述する人
  • インフラエンジニア:各種サーバ環境を整える人

に類別できる。
ただし、人によってその担当領域が異なるため、明確な線引はできない。

この「Qiita」にわかりやすく書いてあるね。


ゲーム制作に関しても、モバイルゲームになってからは、フロントとサーバーを切り離して考えたほうが便利なことがほとんどやね。

まあ、ここらへんのことは、区分をしたからどう、みたいな話ではないと思うけどね。


流石に長くなってしまったので、今日のところはこれくらいかな。

普通に消費者としてサービスを使うぶんには、端末のコンピューターとは別に「サーバー」をやるコンピューターがあって、それはサービスを提供する側の企業がお金を払って契約しとるんやなあ、くらいの認識で何の問題もないと思うわ。

ブログ用のレンタルサーバーとか、ゲーム用のVPSについて詳しく書いてもいいけど、もう少し上級者向けの内容になってしまうからね。また次の機会にしたい。

たまには技術系っぽい話題を書いてみるのもいいね。

それじゃあまた。今後もゲームおじさんをよろしくね?