Webエンジニアの @nagata03 です。1年3ヶ月間、モノリシックなWebサービスのマイクロサービス化に携わってきました。そこで経験した2つのアンチパターンとそこから得た教訓について、走り書きですが残しておこうと思います。
アンチパターンその1. 分断されたモノリス
何をしたか
- モノリシックなサービスを toC と toB のコンテキスト境界で2つに分割した
何が起こったか
- 超巨大モノリス1つから巨大モノリス2つが爆誕した
- 本来のマイクロサービスアーキテクチャのメリットが享受できていない
- 改修時の影響範囲調査は以前より楽になったと思うがまだ決して楽ではない
- デプロイ早くなっていない
- 好きな時間にデプロイができていない
- 分割に時間がかかった(分割開始してから約3年?まだ分割しきれていない)
- 「開発の難易度が上がる」とか「APIコールによるパフォーマンス低下」などのデメリットの方が目立ってしまった
教訓
- マイクロサービス化するなら小さく切り出していこう
- 2週間でつくり直せる規模で
アンチパターンその2. マイクロサービス化専門チームによるマイクロサービス化
何をしたか
- アンチパターンその1の教訓を活かし、小さくサービスを切り出した
- 切り出す対象のサービスを管理するチーム(以下「開発チーム」)とは別に、マイクロサービス化を専門とするチームだけでマイクロサービス化を実施
何が起こったか
- 開発チームに、マイクロサービス化に対する納得感を持ってもらえていない
- サービス開発で手一杯
- マイクロサービス化どころではなかったりする
- マイクロサービスの開発手法や運用方針がうまく引き継げていない
- マイクロサービス化専門チームの中ではマイクロサービス化の過程でいろいろ共有できている
- が、開発チームには過程をすっ飛ばして結果だけを共有
- 開発チームとしては結果だけ見せられても「へー」とか「???」となってしまう
教訓
- マイクロサービス化は開発チームと一丸となって進めるべき
- マイクロサービス化を専門チームでやるのであれば開発チームと密にコミュニケーションを取る必要がある
- 開発チームが自律的にマイクロサービス化を進められるような下地を作る必要がある
- マイクロサービス化に納得感を持ってもらう
- マイクロサービス化およびその後の開発・運用のノウハウを蓄積し、簡潔にまとめ、共有する
- とはいっても最初はどうしても手探りになるのでトライ&エラーを繰り返してブラッシュアップしていく
おわりに
- モノリシックなアーキテクチャからマイクロサービスアーキテクチャへの移行は絶対に一筋縄ではいかない
- アンチパターンはあるが決まった正解はないし、正解は組織によって違ってくると思う
- 組織も変化していく必要がある
- 目的を見失わないことが大事(マイクロサービス化によって何を実現したいのか!)
以上、乱筆乱文失礼しました。