Upgrade to Pro — share decks privately, control downloads, hide ads and more …

1年間モダンなアプリへの移行支援をやってみて分かった、 モダナイズの重要性と難しさ

mokonist
July 12, 2023

1年間モダンなアプリへの移行支援をやってみて分かった、 モダナイズの重要性と難しさ

mokonist

July 12, 2023
Tweet

More Decks by mokonist

Other Decks in Technology

Transcript

  1. 自己紹介 門別 優多 – moko クラスメソッド株式会社 AWS事業本部モダンアプリケーション コンサルティング部 Twitter, GitHub:

    @mokocm モダンアプリコンサル部の立ち上げしました 4年間ほどAWSのコンサルティング、開発、 モダナイズ支援などやってます 2020-2023 Japan AWS Top Engineer 2021, 2023 Japan AWS All Certifications Engineers 2022年技能五輪国際大会クラウドコンピューティング職種 敢闘賞 最近頑張ってる事: DDD
  2. Rewrite: Big Bang Rewrite, Release Big Bang Rewrite, Release 既存システムを一から書き直す。

    旧来のシステムを模倣して全ての機能を再実装 メリット 新しい技術・設計から構築できるため、旧来システムのしがらみから解放される パッと見これで良さそうと思ってしまいガチ デメリット リリースリスクが非常に高い。新しいシステムが出来上がるまで時間が掛かる 時間を掛けて出来上がった物が既存のシステムと互換性があるとは限らない 全ての内容を完全に把握して再実装するため、大量の時間と労力が必要になる
  3. Rewrite: Stranger Fig Pattern Strangler Fig Pattern 既存システムの機能毎に徐々にリライトして置き換えていく手法 システム前段にProxyを置いて新旧サービスにルーティングしたりも可能 既存システムを絞め殺すようにリプレースしていく

    メリット 旧システムを完全に置き換えるのではなく、部分的に新システムに切り替えるため、 リスクを最小限に抑えられる。 小さい成功体験を積んでいける。チーム全体のスキルアップもできる Big Bang Rewriteと比べ、少しずつの変更なため、リスクが小さい デメリット 旧システムと新システムを並行して稼働させる必要があり、労力がかかる 特にデータベース周りの実現方法が難しい
  4. Stranger Fig Pattern、きつくね? Stranger Fig Pattern、きつくね? - 新旧システム同時稼働の弊害、きつい - 既存のテーブル設計からデータを切り離すのも一苦労

    - 分離した新システムと旧システム間のデータの繋がりがある場合は、考 える事が爆増する - 既存のAPI設計が微妙/そもそもAPI化されていない場合など、改修する 箇所が増えていく可能性もある - かといって古いAPI設計のまま再実装するべきかもムズい話題
  5. Stranger Fig Pattern、きつくね? - データベースとシステムの分割・分離方法は多数あるので各種メリ/デメ を元にして検討する - オライリーの「モノリスからマイクロサービスへ」が良書 - 旧API設計が微妙な場合は、Feature

    Flag等で新設計(環境)を使えるよう にする - まずは小さい粒度で良いので、分離して経験を積むのが一番の近道 - Big Bang Rewriteが完全なる悪ではない - Big Bang Rewriteの方が早く安定性を持ってリリースできるのであれば 諦めるのも手
  6. Stranger Fig Pattern、きつくね? - データベースとシステムの分割・分離方法は多数あるので各種メリ/デメ を元にして検討する - オライリーの「モノリスからマイクロサービスへ」が良書 - 旧API設計が微妙な場合は、Feature

    Flag等で新設計(環境)を使えるよう にする - まずは小さい粒度で良いので、分離して経験を積むのが一番の近道 - Big Bang Rewriteが完全なる悪ではない - Big Bang Rewriteの方が早く安定性を持ってリリースできるのであれば 諦めるのも手 必ず全てStranger Fig Patternにしろ!では無い
  7. リリースが恐い 克服策 - たくさんリリースすることは、スピードを上げるために不可欠 - 我らがGitHubもちょくちょく障害を起こしている - 大前提として完璧は無理。著名なサービスも障害は起こしている - Testを書いて再現可能な動作確認をする

    - Testを書いていないケースで意図しないバグが発生する - 常にリリース・ロールバックができるようにする - 何かあったときはロールバックが容易な粒度でリリースする
  8. リリースが恐い 克服策 - たくさんリリースすることは、スピードを上げるために不可欠 - 我らがGitHubもちょくちょく障害を起こしている - 大前提として完璧は無理。著名なサービスも障害は起こしている - Testを書いて再現可能な動作確認をする

    - Testを書いていないケースで意図しないバグが発生する - 常にリリース・ロールバックができるようにする - 何かあったときはロールバックが容易な粒度でリリースする まとめてにリリースしていると、 逆に影響範囲が大きくてつらい