カード」という2つのソーシャルゲームを開発・運営しています。本連載の第1回では,なぜC#を使っているのか,なぜC#が良いのかについて紹介しました。最終回である今回は,具体的にどのようなアーキテクチャ・プログラムで開発されているかを紹介していきます。Services)上で構成しています。AWSというとLinuxの印象が強いと思いますが,Windowsのインスタンスも提供されていて,Linuxと比較しても遜色なく動きます。Service)の存在が挙げられます。システム構成は図1のようになっています。4.5)をホストしています。LinuxでRedisを立てています。この構成で「1億/日」のPV数,「⁠10,000リクエスト/秒」の瞬間最大ページリクエスト,「⁠25,000クエリ/秒」の瞬間最大クエリ数,「⁠230,000コマンド/秒」のRedisの瞬間最大コマンド発行回数という,かなり高負荷のアプリケーションをさばいています。昨今,NoSQLのブームも落ち着いてきました。AWSであれば無限にスケールアウトするDynamoDBの性能は魅力的ですが,グラニではRDS上のRDBMSのみを採用しています。これは,現状のグラニの使い方では,多くの理由からRDBMSに利があるためです。RDBMSにはデータベース用のIDE(グラニではHeidiSQLを採用)やプロファイラといった周辺ツールが充実しています。それらを介した設定やSQLを使ったカジュアルな解析のしやすさ,アドホックなデータの弄りやすさは大きな利点です。パフォーマンス面から見ても,RDBMSは単純なクエリなら1ミリ秒以下で返すので,単発のクエリのレイテンシという点では,現状のDynamoDBはRDBMSに劣ると考えられます。RDSなら手放しで障害を管理できる安心感があります。性能的に限界で苦しいときには上級インスタンスが現れるので,ダメなときはスケールアップで何とかなるという事実も心強いです。スケールアップには限界がありますが,ヴァルハラゲートの規模でも十分成立していることを考えると,多くの場合はRDBMSとRDSを選ばない理由のほうがないのでは?と思います。5.6を採用しています。SQLServerです。RDSで提供されている状態ではMySQLのほうが機能は上回っています。Serverを使いたいとは思っていますが,あくまでC#+RDSと考えてMySQLを選びました。スケールアップが容易とはいえ1台では支えきれないので,データベースを複数台に分散させる必要があります。分割方法としては,テーブル内のIDなどで分散させる水平分割と,テーブル単位で別データベースに割り振る垂直分割が考えられます。水平分割には無限にスケール可能というメリットがありますが,データベース用のIDEなどの既存のツールがまともに使えなくなるというデメリットがあります。このデメリットは大き過ぎると判断したため,グラニでは垂直分割を採用し,垂直分割に収まるような切り分け方をしています。Byte)を重要視しています。ほかのソーシャルゲームと比較しても,ヴァルハラゲートの応答速度は業界屈指の速さと自負しています。そのために何よりも重視しているのは,本番環境と開発環境でほぼ同一の応答速度を保つ,ということです。開発環境ではデバッグビルドになるので完全には同一になりませんが,特にデータベースやRedisとのネットワーク遅延で引っ張られないように細心の注意を払っています。これは,速度に対する意識は肌感覚が重要だと考えているからです。開発環境が遅いと感覚は養われません。「⁠遅いのは開発環境が遅いせい」となると,改善も遅れる(そしておそらくそれは見送られて,実際に改善されることはなくなる)ようになります。同一の環境を簡単に作れる点も,クラウドを使う理由の1つです。外部通信(HTTP,SQL,Redis)はすべてアプリケーションサイドで記録しています。データベース側で記録しようとすると性能低下の可能性があり,常時記録するわけにはいかないこともありますが,アプリケーションサイドで行えば負荷はかからず,より多くの付随する情報を記録できます。フックするポイントをすべて押さえ,処理速度やクエリ,キーをログに書き込んでいます(リスト1⁠)⁠。Logicで収集と解析を行い,日常的な速度改善のほか,障害時の原因究明に役立てています(図2⁠)⁠。傾向がつかめれば十分な場合が多いため,収集対象のサーバを限定してログ容量を削減しています。Logicの解析画面。独自クエリで柔軟に解析でき,グラフ化も可能さまざまなデータの可視化アプリケーション速度の改善や開発効率化のためには,あらゆるデータが可視化されている必要があります。さまざまなデータを記録したとしても,「⁠開発者」がそのデータを簡単に見られなければ改善にはつながりません。Logicなどで可視化しています。開発環境ではもっと近いところでデータを見られる必要があると考え,ASP.NET向けの診断ツールGlimpseを利用しています。Glimpseを使うと,Webページの詳細なデータがHUD(注1)で表示されます。履歴を保持しているため,表示ページのないハンドラやJSONを返すAPIなども確認できます。本連載の第1回では,Redisへの非同期アクセスの可視化にGlimpseを利用していると紹介しましたが,実際にはもっと多くの情報をカスタマイズして表示しています。HTTP,SQL,Redisのように外部へアクセスする部分に関しては,タイムラインにすべて表示しています。Redisは,キー,コマンド,同一キーの重複時警告,送受信オブジェクトのダンプ,オブジェクトサイズ,Expire残り時間,通信時間といった,考えつくあらゆるデータを常に確認できるようにしています。SQLについては,クエリや使ったパラメータ,通信時間は当然として,ページ表示に使用したすべてのクエリにexplainをかけて表示しています(図3⁠)⁠。気になるクエリだけ手動でexplainをかけて確認するという流れでは,面倒でやらなくなってしまったり,確認漏れが生じたりしてしまいます。すべてを常に表示すれば漏れは絶対に発生しません。filesort;など)を警告表示すれば,事故を開発中に未然に防げます。使ってexplainの実行をまとめているため,画面表示速度には影響しません。注1)重要な情報を画面下部にポップアップさせて表示できる,小さなダッシュボードのようなものです。Grahamが「普通のやつらの上を行け」とLISPを選んだように(注2⁠)⁠,グラニではC#こそが大きなアドバンテージを得られる最大の武器であると信じ,突き進んできました。これは結果で実証されるべきだと考えています。理屈上できる,プロトタイプがある,というだけではまったく意味がありません。ヒットして初めて,負荷的な面でも,開発効率的な面でも,C#の強さを証明できたと言えます。「神獄のヴァルハラゲート」はヒットタイトルになりました。やれることはまだまだたくさん残っています。表立ってBtoC分野でC#を使っているという話はあまり聞きません。グラニは第一人者となり,あとに続く会社が現れるよう,また技術的な模範となるよう,多くの成果を持ってC#の最先端を突き進み続けます。とも今後の動向に注目してください。提供/株式会社グラニhttp://grani.jp/グラニでは各種エンジニアを募集しています。Windows著者プロフィール河合宜文(かわいよしふみ)株式会社グラニ取締役CTO。LINQがひじょーに好き。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。