こう 聞かれます
- 「モノリスと
マイクロサービス、 どちらで 始めますか」 - 「新しい
サービスを 3 人で 作ります。 最初から 機能ごとに サービスを 分けますか」 - 「今の
モノリスが 大きくなってきました。 どこから 分けますか」
面接官が 見ている点
- 流行りの
作りを 選ぶのではなく、 チームの 大きさと ビジネスの 段階に 合わせて選べるか - 分けると
何が 重くなるか (運用、 通信の 失敗、 データの 食い 違い ) を 知っているか - 1 つに
まとめても、 中の 境界は 保つ、という 考えを 持っているか - 分ける
判断の 条件を、 自分の 言葉で言えるか
短い答え
- 小さい
チームで 始める ときは、 1 つの アプリに まとめた モノリスで 始めます。 - サービスを
分けると、 配備、 監視、 サービス間の 通信の 失敗への 手当てなど、 運用の 手間が 大きく 増えるからです。 - そのかわり、
中の モジュールの 境界を きれいに 保って おき、 要るようになった 部分だけを 切り出します。
少し 詳しい答え
言葉の整理
- モノリス 1 つの
アプリに 全部の 機能が 入っていて、 まとめて 配備する作り - マイクロサービス機能ごとに
小さな サービスに 分け、 それぞれ別に 配備し、 ネットワーク越しに 呼び合う作り
初期に モノリスを選ぶ理由
初期の
境界を きれいに保つ
モノリスでも、
分けるのは どんなとき
- 一部の
機能だけ負荷が とても 大きく、 別に 台数を 増やしたい - チームが
増え、 同じ コードを 触る 人が 多すぎて、 配備の 待ちが詰まっている - 一部だけ別の
言語や 仕組みが 要る (重い 計算、 別の 更新の速さ)
トレードオフ
モノリスは、
よく ある間違い
- 大きな
会社が やっているから、と 最初から分ける 少人数では 運用の 手間が 勝ち、 作る 速さが落ちます - モノリスの
中を ぐちゃぐちゃにする 境界が 無いと、 あとで 切り出せなくなります - 分けたのに
データベースを共有する 結局 どれか 1 つを 変えると 全部に 響き、 分けた 意味が薄れます
深掘りの問い
- 「切り出す
最初の 1 つは、 どう 選びますか」 負荷や 変更の 頻度が ほかと 違い、 ほかとの つながりが 少ない 所から、と答えます - 「サービスどうしの
通信が 失敗したら」 時間切れと 再試行を 決め、 同じ 要求が 2 回来ても 結果が 変わらないように する、と答えます - 「サービスを
またぐ 更新の 正しさは」 1 つの トランザクションに できないので、 順に 処理して 失敗したら 取り消す 流れを 作る、と答えます