Architecture Challengeに参加した話 | CyberAgentエンジニア向け短期インターン

Architecture Challengeに参加した話 | CyberAgentエンジニア向け短期インターン

先週にCyberAgentのアーキテクチャのコンペ形式のインターンArchitecture Challengeに参加してきたので、自分が学んだことの備忘録も兼ねてまとめてみました。

Architecture Challengeとは

Architecture Challengeとは、架空のサービスに関してそのサービスのアーキテクチャやデータ構造を考えて発表するというコードは一切書かないインターンでした。

具体的なお題としては、

『架空のライブ配信サービスのチャット機能』
- ユーザーは配信されてる動画を見ながらリアルタイムでチャットをする
- 一つのチャットルームに最大15000人入室可能
- 最大投稿数は1000件/sでピーク時はこれが30秒続く

というものでした。(許可もらって掲載しています)

他にもアーカイブがあったり、巻き戻し再生ができたりと考えるべき項目が多くあり大変でした。

学んだこと

一番の大きな学びはwebsocketのサーバーをどうスケールさせるのか、ということでした。
チャットのサービスなのでwebsocketを使うのは当たり前なのですが、そのままスケールさせてしまうと違うサーバーに入った人どうしがデータのやり取りをできなくなってしまいます。

そこで、同じサーバーにアクセスするように制限するか、サーバー間でデータをやり取りするようにする必要があります。
その一つの手法がredisのPub/Subを使うことです。簡単に説明するとサーバー間でデータのやり取りが簡単に行えるようになります。

このインターンが終わった後に実際に手を動かして作ってみたので、ぜひこちらもご覧ください!

RedisのPub/Subで異なるコンテナ間のWebSocketを同期する

もう一つの学びは、NoSQLへの知見です。なんとなくしか知らなかったので、めちゃくちゃ調べるのはいい経験になりました。

  • KVSはスケールアウトが容易であるが整合性を正確にとるのは難しい
  • SQLは確実なトランザクション処理が実現できる
  • indexを張るとnosqlぐらいの性能はでる
  • オンメモリだと高速
  • mongoDBは意外とSQLと処理時間が変わらない

パッと思い浮かぶ限りこんな感じのことをインプットしました。今までなんとなくで使っていたredisとかがこういう風に動いているのか!と学ぶことができました。

感想

実際に大規模な開発の設計を考えたことは全くと言っていいほどなかったのでとてもいい経験になりました。

また、実際に現場に入ってからその時の経験が生きるで有名なVoyage GroupのSunriseでの経験がとても生きました!

Sunriseに参加しました。| Voyage Groupエンジニア向けインターン

Sunriseあたりからインフラに興味を持ち始めawsもくもく会を経てこのインターンに参加しかなりインフラの知識が溜まってきた気がしています。
フロントの人です、と自己紹介しておきながら意外とチームで一番インフラができるんじゃないかぐらいだった気がするので、けっこう知識が付いてきたんだな〜と思っていました。(チーム全員インフラは専門外でしたがw)

でも、まだまだ知識も経験も足りないのでこれからも頑張って勉強していきたいと思います!

他の参加者たち

なぜか徹夜で参加してきた人もブログを書いたみたいです!僕より丁寧でよりどんなインターンなのか参考になります。

なぜかはてブロのリンクはいつもおかしくなる、、だからってwordpressをいじるのも面倒、、なにかいい方法あったら教えてください。。

メンターの方へ

二日間お世話になりました。ありがとうございました!いろいろ教えていただきかなり成長することができました。
懇親会でもたくさんお話できてとても楽しかったです!