SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2013】セッションレポート(AD)

【デブサミ2013】15-A-4 レポート
commの現場では、大規模スマートフォンサービス開発への対応をいかに行っていったのか

  • X ポスト
  • このエントリーをはてなブックマークに追加

インフラ・テスト・QAなども手探りで大規模化対応

 開発体制だけではない。大規模なサービス規模に合わせたインフラの構築も行わねばならなかった。commは企画当初から1千万人規模のユーザーを想定しており、それを見越したアーキテクチャの設計を行ったというのだ。しかもTCP常時接続や非同期処理が必要となるcommは、一般的なWebアプリケーションと比べると作るのが複雑である。「DeNAではあまり経験していなかった領域だったので、余計難しかった」と長田氏は振り返る。すでに競合のサービスも登場している。それらに勝つためには「スケーラビリティ、アベイラビリティ、パフォーマンスという3要素をきちんと確保できるインフラを作らなければならなかった」(長田氏)という。

 メッセージングの仕組みについては、スケールアウトが簡単にできるよう、疎結合でシンプルなコンポーネントに分割。また、すべてのコンポーネントを多重化している。

 データストアについては「マスター/スレーブ/バックアップ構成の採用やデータベースシャーディングを前提とするのはもちろん、要所でMySQLへのアクセスを高速化するプラグイン、『HandlerSocket』を利用するなどMySQLを使い倒している」と長田氏は言い切る。余談だがHandlerSocketはDeNAの樋口氏が開発しており、ソースコードは同社HPで公開されている。そのほか、DNSはMyDNS(バックエンドにMySQLを用いたDNSサーバー)、Job QueueもDeNAの奥氏が開発したQ4M(Queue for MySQL:OSSのキューイングライブラリ)を採用。また一部、入出力が激しい箇所には、キーバリューデータストアのRedisも導入しているというのだ。

 DNSについては、名前解決であらゆる向き先を分散。「この方法がいちばん柔軟で障害対応として得策だから」と長田氏はその理由を語る。しかしこうするとMyDNSの負荷も相当なもの。そこで、複数のノードにレコードを分散させるアルゴリズム『Consistent hashing』を実装し、DNSをローカルにキャッシュ。もしMyDNSが倒れても、24時間以内に復帰すれば問題のない仕組みを構築した。

 通話において最も課題だったのは、日米間の通話で転送遅延が生じていたことだ。「最低でも150msec程度発生していた」と長田氏。そこで海外ユーザーの音声通話にはAmazon EC2を使用し、ユーザーに最適なリージョンを自動的に選択するようにしている。

 「リリースしてから、負荷的に困ったことはまったく起こっていない」と長田氏は言い切る。

 テストやQA(品質保証)体制の構築も容易ではなかった。まずはテスト。commリリース前後のテストでうまくいっていたのはサーバーの単体テストのみ。その他、クライアントの単体テストやサーバーおよびクライアントの結合テストについては「テストが書きづらい」「自動化の構築が難しい」などの問題が噴出。テストのカバレッジが上がらない上に、新機能が増えていくので、QA工数も継続的に増加していったという。

 そこで「人数が60人に増えた時点でテスト方針の改善に着手した」と長田氏。サーバーおよびクライアントの結合テストについては、Calabash/Cucumberを用いたUI自動化テスト『Integrated UI Automation Test』を導入した。これに継続的インテグレーションツール『Jenkins』を使い、ミッドナイト・ヘッドレステストを実施している。またテストスクリプトの作成や環境全般のメンテナンスは、専任のテストエンジニアが行う運用体制も構築した。この結果、「全体のカバレッジが向上し、リグレッションQA工数が明らかに減った。しかし、これはあくまでも補完的な役割。サーバーの完全な結合テストはこれではできない」と長田氏は指摘する。

 QAにおいても、リリース前後は問題が山積みだったという。その原因の大本となったのが、開発チームとQA部が明確に分離されていたことだ。

 「その結果、コミュニケーション不全、QA部のやらされ感、バグ管理の破綻という状況ができてしまった」(長田氏)

 この状況を打破するため、テスターのチーム張り付き制、バグ管理ツールJIRAを運用管理する専任ゲートキーパーを導入したのである。するとバグ件数は減少し、手戻りの少ない機能検証ができるようになったという。そのほかにも長田氏が解決を図らなければならなかったものがあった。それはクライアントでバグが起きても気づきにくい、ユーザーのアクティビティがわからない、各種性能指標が取れないというネイティブアプリ特有の問題である。これらの問題を解決するため、現在、クライアントログ収集やアクティビティの可視化ができるような仕組みを開発中だという。

図2.正式にテスターをチームに参加させることで、手戻りの少ない機能検証を実現
図2.正式にテスターをチームに参加させることで、手戻りの少ない機能検証を実現

 最後に長田氏はcommの未来について次のように語り、セッションを締めた。

 「リアルアイデンティティを軸としたクローズド・コミュニケーションのプラットフォームとして、EC事業やモバゲー事業、さらには2月末にリリースする音楽サービス事業『Groovy』などの新規事業ともシナジーさせ、さらなる発展をさせていくというのが私たちの狙いだ」

お問い合わせ

株式会社ディー・エヌ・エー

〒150-8510 東京都渋谷区渋谷2-21-1 渋谷ヒカリエ

http://dena.jp/

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2013】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7028 2013/03/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング