Microservices
Basic LT vol.1
今回のテーマ
「データベースでくっつけない」
マイクロサービス間連携
- HTTP
- RPC
-
Databaseこの話
マイクロサービスは「疎結合性」が重要
- 小さいサービス、小さいチーム
- 組織としての独立
- 高速なリリースサイクル
- 技術的な独立
- 各サービスはインターフェースを変えない限り、いくらでもリファクタリング可能
- (DBでさえも差し替えられる)
- サービス間を疎結合にするのが重要
- 内部実装は隠蔽する
DB結合=密結合
- データベースはあくまでサービスの詳細実装
- 変更されることはありうる
- (とはいえ、変更するのは大変だけど)
- 他サービスにDBを参照されていると、DBの見直しは不可能
- HTTPのAPIなら?
- 新しいバージョンのAPIを作り、移行期間を設けて古いAPIを消すことが可能
事例 「タイムライン機能」
- FiNCのアプリに以前からある機能
- 食事やつぶやきなどを投稿できる
- これを改善し、リッチにしていく方向性になった
- ハッシュタグをつける、検索できる
- シェアできる
- など
- (MySQLだと限界あるな・・・)
事例 「タイムライン機能」
- そうだ、マイクロサービス化しよう ( ・ㅂ・)و ̑̑
- 高速に改善できる
- 技術選定も独立して色々できる
- けれど、ひとまず最低限は今のまま実装したい
- ビジネス的な状況とのバランス
- MySQLでも半年は大丈夫そう
- 中長期で、技術スタック改善していきたい
DBで結合していると・・
- 一部をマイクロサービス化する => できない
- 正確には、新しいマイクロサービスも同じDBを見続けることになる
- 新しい技術スタックに切り替えられない
どうしたら良いか
- まずはHTTPから検討
- 無理な場合、「必要なデータだけを同期する」というのを検討する
FiNCの場合
- 基本的にはJSON over HTTP
- 一部のみ、リードレプリカを見ているサービスがある
- 子分的なサービス
- 「おすすめユーザのリコメンド」のロジックなど
- とはいえ、だいぶ成長してきている問題
- 子分的なサービス
まとめ
- サービス間の疎結合性が重要
- マイクロサービスの肝ともいえる
- DBで結合すると、密結合になってしまう
- HTTPでのAPIでの結合を、第一の選択肢にする
- DB結合は選択肢にいれないほうが良い
deck
By Mori Kyutaro
deck
- 1,034