こんにちは。09年度入社のおーつ(@smileeeen)です。
普段は子会社のZucksにてモバイル、スマートフォン周りのシステム開発を担当しています。

先日『Sunrise前哨戦』という、若手エンジニアで大規模サービスを設計してみようという社内イベントがあったので、その事について書かせて頂きたいと思います。

↓発表時の様子
pre_sunrise_1

Sunrise前哨戦とはその名の通り、Sunriseの前哨戦として行われました。

■Sunriseとは
VOYAGE GROUPが今年から始める理系向けインターンで、100万人以上が使うことを前提としてサービスを企画し、それを実現するシステムを設計するといった内容になっています。
詳しくは下記をご覧ください。
大規模サービス構築プログラム「Sunrise」

SunriseはVOYAGE GROUPとしても初めての試みであり、社内のエンジニアの中からもやってみたいという声があがっていました。
そこで入社1~3年目までの若手エンジニアで4人一組のチームを組んで、前哨戦としてTwitterライクなサービスを展開する場合、どのようにシステムを設計するかを考え、その設計に対する評価を競う事になりました。

サービスの仕様としては
  • アカウント管理ができる
  • ツイートできる
  • 他ユーザーをフォローできる
  • フォローワーのツイートと自身のツイートでタイムラインを表示できる
というTwitterの最低限の機能を持つように求められました。

また、大規模サービスを設計する事が目的なので、下記のような利用状況の条件が与えられました。

  現在 1年後
登録ユーザ数 1億ユーザ 2.5億ユーザ
DAU 500万ユーザ 1,250万ユーザ
1日の総ツイート数 5,000万ツイート 2億ツイート
ツイートの割合 Web:25%、API:75% Web:25%、API:75%
1ツイートのバイト数 100バイト 100バイト
月間PV 5億PV 20億PV

評価軸は下記のような項目があげられました。
  • 可用性
    • 継続性
    • 耐障害性
    • 回復性
  • 拡張性
  • 性能
  • 運用・保守性
  • セキュリティ

各チーム毎に約1ヶ月間かけて業務の合間を縫い、これらの条件化で最適だと考える設計を導き出しました。

自分達のチームでは、既存のTwitterがどのようにシステムを構築しているのかを調査し、それらをヒントにシステム設計を行いました。
最終的にはフロントの部分にはNoSQLのRedisを採用する事とし、全体的なシステム構成は下図のようになりました。

Sunrise前哨戦システム構成1

他のチームはTwitterも一部で利用しているというCassandraをメインに使用する構成や

Sunrise前哨戦システム構成2


MongoDBやMySQLのHandlerSocket Pluginを活用したり

Sunrise前哨戦システム構成3

各チーム視点や進め方などに特色があって、とても面白かったです。

これらのシステム設計を社内のエンジニアの方々に対して発表したのですが、発表後には先輩エンジニアの方々からの鋭い質問が飛び交い、冷や汗をかきながらも、頑張って回答をしていました。

普段アプリケーションエンジニアとして業務を行っていると、インフラ関係の知識は薄くなりがちかと思います。
今回はそのようなレイヤーまできちんと考える必要があり、単一障害点を作らないためのサーバー構成や、多数のサーバーへのデプロイ方法、想定リクエスト数を捌くためにはどのくらいのサーバーが必要なのかなど、様々な事を調査し、設計に組み込んでいきました。
また普段あまり考えないような規模のサービスのシステムを考えることで、今まであまり深く理解していなかった技術などへの理解も深めることができました。
個人的には最近話題のNoSQLの種類や特徴、大規模サービスを構築する際の工夫などについて知識を得ることができたのが良かったです。
これらの経験を今後の業務にも活かしていきたいと思います。

最終的には順位付けも行い、優勝チームはCTOのポケットマネーで美味しいご飯が食べられるそうなので、そちらも楽しみにしています(・∀・)

さて、そんな前哨戦が行われたSunriseは今週2011/11/3(木)まで参加者を募集しています!
意欲ある学生の皆さんの応募をお待ちしています!

大規模サービス構築プログラム「Sunrise」
sitetitle