サーバーエンジニアとして押さえておくべき基礎知識
サーバーエンジニアを担う上で知っておくべき基礎知識について紹介します。システムを扱う業種において、日夜膨大な情報を扱うサーバーエンジニアの存在は欠かせません。サーバーの構築・運用・保守に長け、多様化していくデバイスや技術に対応するためにセキュリティの強化や大量の情報を適切に処理したりと、サーバーエンジニアの仕事は、技術の発展と共に、求められる役割や知識も変わってきています。
今回は、その中でもゲーム業界のサーバーエンジニアにスポットをあて、サーバーエンジニアとして業務を円滑にこなす上で必要となる基礎知識を紹介していきます。サーバーエンジニアを志す方や、サーバーエンジニアとしてよりナレッジを高めたい方、またディレクター視点からサーバーエンジニアの基礎知識を知っておきたい方は、ぜひ参考にしてみてください。
目次
サーバーエンジニアが知っておくべきサーバーに関する基礎知識
サーバーとは、クライアントの要求に応じてさまざまな処理をするプログラムが入っているコンピューターの事を指します。ゲームならば敵との戦闘、ストーリーの中にでてくるキャラクターとの会話、ドロップする装備品、キャラクターのレベルアップなど、ゲームの中で起こる全ての事がサーバーの中でプログラムとして組まれており、ゲームの種類によっては複数のサーバーが用いられます。
オンラインゲームなどの場合は、ゲームの処理を行うゲームサーバーや、データの管理などを行うデータベースサーバーなど、多数のサーバーを組み合わせることはありますが、基本、サーバーはひとつひとつ独立しており、ユーザー情報も、それぞれのサーバーに残されています。よってユーザーはサーバー間を移動する事は出来ないものです。
ゲーム内で起こった事はサーバーにログとして記憶され、どのユーザーが何を行ったのかが全て記憶されます。幅広く普及しているゲームならばユーザー数は数万から数十万ほど。負荷がかかる事は当然で、その負荷をいかにロードバランス分散させるか、バグが起こったりしないようにするにはどうしたらいいかを考え、実行しているのがサーバーエンジニアです。
サーバーエンジニアが担うシステム開発とシステム運用の基礎知識
サーバーエンジニアの仕事は多種多様ですが、ゲーム業界のサーバーエンジニアの仕事は大きく分けて2つに分けられます。システム開発とシステム運用です。ここでは、システム開発と、システム運用を行う上で必要となる基礎知識についてご紹介します。
システム開発でサーバーエンジニアが把握しておくべき基礎知識
コンピューターゲームというのは、大体1つのサーバーに対して、1万〜10万ほどのユーザーがアクセスをします。コンピューターゲームにおけるサーバーの役割は、ユーザーに対してさまざまな情報を与え続けること。しかし、すべての情報をユーザーに渡しているわけではありません。サーバーエンジニアはユーザーが欲しい情報だけに絞る必要があります。つまり、大量のデータを適切な場所に適切な時間に渡せるよう処理するのが、サーバーの設計で大事なポイントであり、サーバーエンジニアは開発する際から、運用を考慮して設計をしなくてはいけません。
設計においても大きく分けて2通りに分かれます。DB(データベース)設計と、データを適切に処理するシステム開発です。適切に処理するシステムというのは必要なデータのみを、クライアント(ユーザーのパソコンやスマホなど)に渡し、逆にクライアントから必要なデータを受け取るシステムの事です。ひとりで仕事をこなす事の多いサーバーエンジニアですが、ゲームサーバーを作る人と、データを管理する人で分かれる場合もあります。ゲームサーバーの難しいところはデータのやりとりのバランスです。
- サーバーに大量にアクセスが集中した時、サーバーがきちんと耐えられるかどうか
- 通信が切れてしまった時のデータをどうするか
- 同じデータに対して複数の要求があった場合、何を優先すべきか
それらを考えながらサーバーエンジニアは設計を進めます。データのやりとりの最中に起きてしまう非正規導線を、いかに潰せるかがサーバーの善し悪しにかかってきます。データの処理方法は様々で、どのようにアプローチをかけるかを考えるのは、サーバーエンジニアとしてやりがいとなる部分でしょう。
システム運用でサーバーエンジニアが把握しておくべき基礎知識
ゲームは常時一定の運用をするわけにはいきません。人気のコンテンツには人が集中しますし、通学や出勤時間、帰宅時間など、ユーザーの生活に合わせて混みやすい時間帯が出来てしまうものです。ゲーム内の人の動きは流動的であり、同タイミングにアクセス数が集中してしまうという事は、サーバーにその分負荷がかかるという事です。では、このような問題に対してサーバーエンジニアはどのような解決をすればよいのでしょうか。
シンプルに考えれば、アクセスが集中しやすいところはサーバーを強化し、人が混み合うようならば、その分サーバー数を増やして、人を分散させれば良いのです。ただ、それを行うには高額な費用がかかりますし、費用がかかるという事は、それだけユーザーに高いお金を要求する事になります。そこでサーバーエンジニアが出すべき答えとしては、「イベント発生時間をサーバーごとに変え、人の流れをコントロールする」といった選択が良いでしょう。
サーバーエンジニアが次に行うのはデータベースの最適化。ゲームサーバーは複数に分散出来ますが、データを書き換えたりするために必要な、マスターデータベースと呼ばれるものは、ひとつしか持つ事が出来ません。データが2つあると様々な不具合が生じるからです。ひとつしかない大切なマスターデータベースは、ゲームサーバー以上に気を配らなければいけません。システムなどがより効率的・高速に動作するよう、内部の構成を整理し、調整することをオプティマイズと言いますが、コンピューターに対してそれを行い、ユーザーの動向を見極め、脆弱になっている部分を改造し続ける事が必要になってきます。
また、サーバーエンジニアは時にデータの取捨選択も迫られます。膨大な量の情報を全て大事にする必要はありません。何が今本当に重要で、何だったら必要ないか見極め重要な部分を強化する、その判断をサーバーエンジニアはしなければいけません。凄い性能のコンピューターを導入すれば解決する事ですが、サーバーエンジニアの設計如何によっては高いお金をかけなくても、処理することができます。
少ないリソースですべてのユーザーに同じクオリティを実現するのが、運用におけるサーバーエンジニアの仕事として重要なポイントです。ここはサーバーエンジニアの腕の見せ所でしょう。何かあった時に見返すためのログを取っておく事や、ユーザーの個人情報をきちんと守る事も、サーバーエンジニアの運用における仕事のひとつ。全てにおいて適切である事が、開発においても運用においても重要なのです。
他のエンジニアに共通する基礎知識とサーバーエンジニアならではの基礎知識
サーバーエンジニアに必要な基礎知識とスキルは実際のところ、他のエンジニアとそう変わりません。コンピューターの知識やネットワークの知識、システムの設計図を作るための設計力など、共通するところは沢山あります。
サーバーエンジニアと他のエンジニアが共通する基礎知識
IT系のエンジニアならば習得必須なスキルがプログラム言語です。C言語やJAVAなどのプログラム言語、PHP・Perlなどのスクリプト言語、C++などオブジェクト指向型言語はサーバーエンジニアでなくとも仕事で使う機会があるのではないでしょうか。
もう一つ挙げておきたいのはコマンドラインです。簡単にまとめると、キーボードだけで操作できる画面の事です。システムに不具合があった時に会社にいなくともリモートで対応できるので、サーバーエンジニアに関わらず、エンジニアの方ならば既に習得済み、知識としてご存知の方も多いのではないでしょうか。
IT用語辞典バイナリでは、コマンドラインについて以下のように解説しています。
コマンドライン入力とは?
コマンドライン入力とは、コンピュータへの命令を、キーボードからコマンドと呼ばれる文字列を入力する事によって行う入力方法の事である。代表的なソフトウェアとしてはMicrosoftのOSであるMS-DOSなどがある。
文字(character)の入力によってコンピュータの操作を行うユーザーインターフェース(UI)は、キャラクターユーザーインターフェース(CUI)と呼ばれる。CUIでコンピュータへの命令として入力される文字列がコマンドと呼ばれている。コマンドライン入力では、ファイル名を直接指定して操作したり、操作を行うためのコマンドを把握しておかなくてはならないという煩雑さがあるが、アイコンの画像の再現などにリソースを割かないため処理が非常に軽快であるという利点がある。
参照:IT用語辞典バイナリ「コマンドライン入力」(2018.5.14時点)
コマンドとは
コマンドとは、コンピューターに対する作業命令です。事前に色々入力して作業指示を行うプログラムと違い、コマンドは直接コンピューターに働きかけます。想像力や応力のある人と違って指示した事にしか対応してくれませんが、指示した事は必ず行ってくれるという点では優秀です。
サーバーエンジニアならではの基礎知識
サーバーエンジニアになるには、やはりサーバーに関する知識を深めておくべきでしょう。WindowsやMacのようなOSのひとつ、『Unix』には慣れておくべきです。Unixはアメリカの大学などで現在でも多く利用されています。データーベースなどサーバーサイドで使われる言語は、大学などで開発されたものが多いので、大学で使われていたシステムに準拠したものが使えたほうが都合がよいのです。
また、サーバーエンジニアに必要なのは分析力と設計力です。サーバーエンジニアになるには、データベース設計に関する知識やデータ分析に必要なツールを知り、使えるようになる事はとても重要です。そして何より、サーバーエンジニアには経験による知識がものを言います。サーバーエンジニアには何かおかしいと気づく先見の明が必要不可欠で、長年の経験から培われるものです。しかし未経験でも貪欲に知識を吸収し、過去の出来事などに目を向け養っていけば、サーバーエンジニアになるのも夢ではありません。
サーバーエンジニアが守るサーバーも、打ちこむデータが合っていなければ不具合を起こします。そのため、サーバーエンジニアには絶対的な正確性が要求されます。もしサーバーがダウンしてしまったら、企業は損害を受けます。ゲームならば、ユーザーがアクセス出来なくなってしまうと売り上げに影響します。慎重に慎重を期してどんなに神経を研ぎ澄まして仕事をしても、新しいプログラムを入れた時は、突発的に不具合が起こる場合もあります。常に緊張感を持ち続けるのは心身ともに摩耗しますが、更新したプログラムが正常に作動すれば、頑張った分喜びもひとしおでしょう。
サーバーエンジニアが見えないところでやっていること
子供の頃、パズルやブロック遊びに夢中になったことは誰しもある事でしょう。あれでもない、これでもないと弄って、完成した時の感動はひとしおです。サーバーエンジニアの仕事はパズルやブロックがデータに置き換わったようなもの。クライアントの注文を受けて、データベースを設計したり、たくさんあるピースの中から該当のピースを探し出すように、必要なデータを求めてログの山から探ります。
また、サーバーエンジニアはサーバーというデータが流れる川を常に管理するのが仕事です。データが円滑にやりとりできるように調整したり、クライアントの要望に応じて拡張したり、同時転送量を広げたりします。どんな風に設計しようか?このデータはどこに繋がるのだろうか?この予算でどうしたら問題を解決できるだろうか?など、データ流通の環境維持をサーバーエンジニアは見えないところで正確に行っているのです。
まとめ
今回はゲーム業界のサーバーエンジニアを中心にスポットをあて、必要とされる基礎知識について紹介しました。サーバーエンジニアは、必要な情報を取捨選択しつつインプットし、最適なソリューションをアウトプットする必要があります。チームと連携しつつ、目の前のサーバー環境維持のために迅速な作業を行うには、特別なスキルではなく、エンジニアとしての基礎知識が根底にあるかどうかがとても重要になります。
サーバーエンジニアは、ユーザーととても密接な立ち位置だと言えます。どんなに優れたUI・UXも、サーバーエンジニアの仕事次第で、ユーザーが得られる満足度は天と地の差があります。それくらい、サーバーエンジニアの役割は重要なのです。その分、ユーザーへ最高の体験を与えるための土台を・人と人のコミュニケーションを繋ぐという意味では、とてもやりがいのある職種と言えるのではないでしょうか。
この記事を書いた人
マイナビクリエイター編集部は、運営元であるマイナビクリエイターのキャリアアドバイザーやアナリスト、プロモーションチームメンバーで構成されています。「人材」という視点から、Web職・ゲーム業界の未来に向けて日々奮闘中です。