先週にCyberAgentのアーキテクチャのコンペ形式のインターンArchitecture Challengeに参加してきたので、自分が学んだことの備忘録も兼ねてまとめてみました。
Architecture Challengeとは
Architecture Challengeとは、架空のサービスに関してそのサービスのアーキテクチャやデータ構造を考えて発表するというコードは一切書かないインターンでした。
具体的なお題としては、
『架空のライブ配信サービスのチャット機能』
- ユーザーは配信されてる動画を見ながらリアルタイムでチャットをする
- 一つのチャットルームに最大15000人入室可能
- 最大投稿数は1000件/sでピーク時はこれが30秒続く
というものでした。(許可もらって掲載しています)
他にもアーカイブがあったり、巻き戻し再生ができたりと考えるべき項目が多くあり大変でした。
学んだこと
一番の大きな学びはwebsocketのサーバーをどうスケールさせるのか、ということでした。
チャットのサービスなのでwebsocketを使うのは当たり前なのですが、そのままスケールさせてしまうと違うサーバーに入った人どうしがデータのやり取りをできなくなってしまいます。
そこで、同じサーバーにアクセスするように制限するか、サーバー間でデータをやり取りするようにする必要があります。
その一つの手法がredisのPub/Subを使うことです。簡単に説明するとサーバー間でデータのやり取りが簡単に行えるようになります。
このインターンが終わった後に実際に手を動かして作ってみたので、ぜひこちらもご覧ください!
先日参加したCyberAgentの短期インターンでredisのPub/Subについて学ぶ機会があったので実際に動かして遊んでみました。 redis redisとは? redisとはキャッシュやセッション管理でよく用いられるオンメモリ(=[…]
もう一つの学びは、NoSQLへの知見です。なんとなくしか知らなかったので、めちゃくちゃ調べるのはいい経験になりました。
- KVSはスケールアウトが容易であるが整合性を正確にとるのは難しい
- SQLは確実なトランザクション処理が実現できる
- indexを張るとnosqlぐらいの性能はでる
- オンメモリだと高速
- mongoDBは意外とSQLと処理時間が変わらない
パッと思い浮かぶ限りこんな感じのことをインプットしました。今までなんとなくで使っていたredisとかがこういう風に動いているのか!と学ぶことができました。
感想
実際に大規模な開発の設計を考えたことは全くと言っていいほどなかったのでとてもいい経験になりました。
また、実際に現場に入ってからその時の経験が生きるで有名なVoyage GroupのSunriseでの経験がとても生きました!
偶然に偶然が重なりVoyage Group主催のインフラ構築のインターンに参加してきました。 https://twitter.com/DragonTaro1031/status/1071213079155765248 Sunris[…]
Sunriseあたりからインフラに興味を持ち始めawsもくもく会を経てこのインターンに参加しかなりインフラの知識が溜まってきた気がしています。
フロントの人です、と自己紹介しておきながら意外とチームで一番インフラができるんじゃないかぐらいだった気がするので、けっこう知識が付いてきたんだな〜と思っていました。(チーム全員インフラは専門外でしたがw)
でも、まだまだ知識も経験も足りないのでこれからも頑張って勉強していきたいと思います!
他の参加者たち
なぜか徹夜で参加してきた人もブログを書いたみたいです!僕より丁寧でよりどんなインターンなのか参考になります。
ブログ、世界一継続するのが難しい趣味。僕の周りも三日坊主しかいないし、僕自身記事を書いても読み直して幻滅して消します。は…
メンターの方へ
二日間お世話になりました。ありがとうございました!いろいろ教えていただきかなり成長することができました。
懇親会でもたくさんお話できてとても楽しかったです!