486 Views
July 08, 16
スライド概要
ヘキサドライブ社内で行ったゲームサーバー勉強会の資料です。
サーバーへの興味を持ってくれる人を増やすために行いました。
▼内容
・クライアントプログラマとサーバープログラマの考え方の違い
・向いている人
・チームや会社側での理解が必要なこと
・サーバーをやるメリット
etc...
株式会社ヘキサドライブの資料共有用アカウントです。 公式ブログ:https://hexadrive.jp/hexablog/ note :https://note.com/hexadrive
ゲームサーバー勉強会 PART1 入門編
自己紹介 玉野 隆嗣(Tamano Takashi) • 株式会社ヘキサドライブ 開発部所属 • 2015年新卒入社の新米サーバープログラマ • 入社後からサーバープログラムを勉強 開発実績 • 『ダイコン王の野望ッッッン!!』 サーバーサイド/運営 担当
ヘキサドライブについて 会社概要 • 株式会社ヘキサドライブ • 2007年2月設立 • 本社・大阪開発、東京開発 • 社員数 85名(2016年4月現在) • コンシューマゲーム開発/ソーシャルゲーム開発 開発実績 : http://hexadrive.jp/product/
アジェンダ • はじめに • クライアントとサーバーの違い • 向いてる人 • チームメンバーの理解が必要なこと • サーバーをやるメリット
現状共有 • 現在のゲーム業界全体でサーバープログラマが少ないという状況にある。 • これを機にサーバーに興味を持ってくれる人が増えて欲しい! • 純粋にサーバープログラムに関して言い合える仲間が欲しい(切実に) 自分のスキルアップにもなる
はじめに
はじめに • 今回の勉強会の内容は私個人の経験(1年)と勉強会懇親会での話を元に作成しております。 よって多少情報に偏りがあるかもしれませんがご了承ください。 • 勉強会などに参加し、懇親会で他社の方に 質問を投げる方が詳しい事を知ることができるかもしれません。 ソーシャルゲームの開発に関して知りたければ参加をオススメします。 Doorkeeper:https://www.doorkeeper.jp/ • 私も始めはサーバーと聞いてリアルタイム通信サーバーのほうを思い浮かべていてやります! と言っていました。しかし実際Webサーバーとリアルタイム通信サーバーはまったくの別物なので、 それを思い浮かべていた方がいましたら申し訳ありません。
クライアントとサーバーの違い
クライアントとサーバーの違い クライアント 重要視する所 サーバー 処理速度、使いやすさ等 安全性、可読性(シンプルな実装) 等 固定 フルに使いたい!! 可変 シンプルさは保った状態でアクセス 数が増えても大丈夫なようにする 高速化 する ほぼやらない 条件が揃えばやる 実装確認 画面 数値 リリース アップデートがなければ終了 そこからが本番 マシン性能
クライアントとサーバーの違い クライアント 重要視する所 サーバー 処理速度、使いやすさ等 安全性、可読性(シンプルな実装) 等 固定 フルに使いたい!! 可変 シンプルさは保った状態でアクセス 数が増えても大丈夫なようにする 高速化 する ほぼやらない 条件が揃えばやる 実装確認 画面 数値 リリース アップデートがなければ終了 そこからが本番 マシン性能
クライアントとサーバーの違い ■クライアント ■サーバー • 決められたハードや決められた実行推奨環境が 定義されているので、その環境の中でより良い 物を作るために高速化を図る • 高速化を行うと多少可読性が下がったりするの で緊急対応の速度を考えると高速化より可読 性を重視する。 • 高速化の影響でセーフティ実装も 端折られる部分もある (プログラム側の要因で落ちることが多い) • 処理のどこの行でサーバーが落ちるか分からない のでセーフティ実装が多め。 (プログラム以外の要因で落ちる事が多い) • そもそもエラーなんてQAで取りきるんだ!! • エラーを「0」にはできないので、エラーが起きても 影響が最小限になる実装をする。 (エラーでもユーザー資産に不利益がない等)
クライアントとサーバーの違い クライアント 重要視する所 サーバー 実装速度、処理速度、使いやすさ 等 安全性、可読性(シンプルな実装) 等 固定 フルに使いたい!! 可変 シンプルさは保った状態でアクセス 数が増えても大丈夫なようにする 高速化 する ほぼやらない 条件が揃えばやる 実装確認 画面 数値 リリース アップデートがなければ終了 そこからが本番 マシン性能
クライアントとサーバーの違い クライアント 重要視する所 サーバー 実装速度、処理速度、使いやすさ 等 安全性、可読性(シンプルな実装) 等 固定 フルに使いたい!! 可変 シンプルさは保った状態でアクセス 数が増えても大丈夫なようにする 高速化 する ほぼやらない 条件が揃えばやる 実装確認 画面 数値 リリース アップデートがなければ終了 そこからが本番 マシン性能
え?
やらないの?
クライアントによる高速化とサーバーによる高速化 • ある処理を行うのにかかる時間を1ms短くした場合の効果 ▼クライアント 1ms短くなった!! ▼サーバー 1ms×アクセス数短くなった!! 全体を見た場合サーバーによる高速化でみんなが幸せになる!! 特にサーバーの運用費用の部分が!!!
やったほうがいいじゃん!!
だが断る!!
理由 • そもそも1リクエストに対して処理する項目が少なく、高負荷につながる部分が少ない。 • 高速化をした場合少なからず可読性が下がるのでやりたくはない。 (運営時の緊急障害対応速度を上げるためソースコードはシンプルにすべき) • 負荷テストで要求ユーザー数に耐えられるように作れば良い。 シンプルさを損ねない範囲であれば高速化をする。 でいいと思います! • そもそも可読性が高い状態で高速化を行えるサーバープログラマーが希少。 ※ただし、フレームワークやライブラリ部分の高速化は出来るだけ行う ここが一番高速化で影響がでかい
それでも、どうしてもどうにかしないといけない 場合はサーバー環境を強化して解決する!! (要はお金で解決する!!)
クライアントとサーバーの違い クライアント 重要視する所 サーバー 実装速度、処理速度、使いやすさ 等 安全性、可読性(シンプルな実装) 等 固定 フルに使いたい!! 可変 シンプルさは保った状態でアクセス 数が増えても大丈夫なようにする 高速化 する ほぼやらない 条件が揃えばやる 実装確認 画面 数値 リリース アップデートがなければ終了 そこからが本番 マシン性能
実装確認 クライアト サーバー • データベースやユーザのログ、SQL/Linuxコ マンドとサーバーの負荷との戦い
クライアントとサーバーの違い クライアント 重要視する所 サーバー 実装速度、処理速度、使いやすさ 等 安全性、可読性(シンプルな実装) 等 固定 フルに使いたい!! 可変 シンプルさは保った状態でアクセス 数が増えても大丈夫なようにする 高速化 する ほぼやらない 条件が揃えばやる 実装確認 画面 数値 リリース アップデートがなければ終了 そこからが本番 マシン性能
向いてる人
向いている人 • 保守的な考えを持っている人のほうがやりやすい • 高速化をバリバリやっていた人は『ここもっと高速化できるのに!!!』というイライラがあるかもしれない (自分も始め思ってました)それに耐えられる人 • 責任感強い人 運営中は責任を持ってサーバーの管理を行う必要がある(24.365体制) • 先々の実装の可能性を考えられる人(運営中はテーブル定義の変更がやりにくい)
チームメンバーの理解が必要なこと
チームメンバーの理解が必要なこと • 運営時もしユーザー対応人数がきつくなったらサーバースペック/台数をお金で解決! • 負荷テストは運営時相当の環境を用意してお金で解決!!(きっちりやろう) &パフォーマンスチューニングをしっかりと工数を持ってやる
サーバーをやるメリット
サーバーをやるメリット • 好きなチートが作れる • データ分析が面白い(人間観察と同じ様な楽しさ) • 最近は無料クラウドサーバーを利用できるので家でサーバー有りのスマホアプリ開発ができる! • 簡単な業務Webツールも作れる! • リスク管理能力が上がる! • クライアントでプログラムをする際にもサーバーの知識を持ってると仕事がしやすい!
まとめ
まとめ • クライアント・サーバーでプログラムの思想が異なるのでそこの理解が必要。 • 両方出来るプログラマを育成するのは大事!! しかし、頭の切り替えはきちんとしてから実装をしないと運営時に痛い目を見るのは自分 • サーバーやるメリット多いと思います! •もっと仲間が欲しいです!!(切実に)
サーバープログラムやろう!!! キャリア採用:HTTP://HEXADRIVE.JP/RECRUIT/CAREER/
御清聴ありがとうございました。