こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。
会の概要
以下、イベントページから引用です。
今回のテーマは「これってもしかして……認証基盤が入れ替わってる〜?」です。
freeeがリリースされた古の時代から動き続けていた認証認可基盤。新規のプロダクトがリリースされるごとにどんどん複雑化していく仕様。そんな認証認可基盤がついにリプレイスされました。 Webサービスの要ともいえる認証認可基盤、万が一止まってしまうとfreeeのすべてのサービスが止まってしまう大惨事に。そんなプレッシャーと闘うマイクロサービス化のための1,454日間のエンジニアの記録をお話します。
会で印象的だった箇所
大規模リプレイスに至った課題感
freeeの初期プロダクトである会計アプリケーション内にあった認証認可の情報を給与計算アプリケーション内でも使用できるようにしたいよね、という課題感から今回の基盤リプレイスに至ったというお話でした。
大規模リプレイスの障壁
freeeでは会計以外でも様々なプロダクトを生み出していく会社であるため、複数のプロダクトから同じDBにアクセスするような状況になっており、DBが高負荷になってしまっていたそうです。
こういった問題解決のため、シャーディングやAuroraへの移行も検討されていたそうですが、参照されているDBが初期に作られていたこともあって、データモデリングがうまくいっておらず変更が難しい状態だったのが大きな障壁となったそうです。
また、膨大な数のサービスについて、新旧環境で差分が起きていないか?起きている場合はなぜか?というのを調査するのは非常に大変だったということです。
リプレイスまでの手順
以下の手順で大規模なリプレイスを進めたということです。
- データモデリングの見直し&リファクタリング
- データを読むAPIを実装(元々の挙動を担保するために、新旧環境で読んだ結果に差異があった場合は検知できるような仕組みを作った。ここで差分が出た時の対応は後続のステップに回した)
- データを書くAPIを実装
- データを読むAPIで起きていた新旧環境での差異を大幅に変更
とんでもないプレッシャーとの戦い
万が一認証基盤を新しくした結果システムが動かなくなってしまった場合、freeeの全基盤に影響が出てしまうのはとんでもないプレッシャーだったそうで、基本的にはとにかく安全で石橋を叩きながら渡るような開発をしていたそうです。
具体的には、環境変数などですぐに旧環境に切り替え可能とする仕組みを作ったり、新旧環境でわずかでも差分が起きていた時は即座に検知できるような仕組みを作ったというお話でした。
プロジェクトでできた成長
以下の点が成長できたポイントとして挙がっていました。
- システムでバグがあった時は「すみません」で済んでいたプロダクトしか経験していなかったので、堅牢なプロダクトの作り方が身についたのはよかった
- 大人数で協働しながらリリースまで漕ぎ着く能力(他のチームとのコミュニケーションなど)
- ドメイン駆動開発の採用
- インフラ周りの知識がかなりついた
会全体を通した感想
良い意味で、これまで参加してきたイベントとは割と異なる雰囲気でイベントが進行されていて、新鮮さを感じました。アーキテクチャをどう変更したかも含めて具体的にお話を聞きながら、得られた学びを多数聞けたのはとても楽しかったです。
また、配信の質やファシリテートもストレスレスで非常に聴きやすかったです。
freeeさんのイベント参加は今回が初参加だったのですが、めちゃくちゃイベント運営慣れしているなあという印象があって、社内イベントを外部公開することを検討している自分自身にとっても参考になる部分が多いイベントでした。