「マイクロサービスってあれでしょ?なんか細かくするやつでしょ?」の
極浅知識はまずいと思ったので、マイクロサービスについて整理をしていこうと思う。
理解の領域にいるかわからないので、あくまで整理。
目次
1.マイクロサービスの概要とメリデメ
2.開発の課題解決
3.運用・監視の課題解決
4.結論(主観)
1. マイクロサービスの概要とメリデメ
概要
1つのアプリケーションを、ビジネス機能に沿った複数の小さいサービスの疎に結合された集合体として構成するサービス指向アーキテクチャの1種(※Wiki)
・マネジメント・経営の視点でいうと組織構成の分担の可視化
・開発の視点でいうと機能の分担の可視化
メリット
・アプリケーションという巨大なものがどのようにできているのか分かりやすくなる
・可視化できると開発もマネジメントもホワイトボックスになって管理しやすい
デメリット
・一本筋(モノリス)がいくつも分割(マイクロサービス)していくから、
マイクロサービスならではの開発や運用方法など色々課題が出てくる
・PJ全体でマイクロサービスを理解していないとネックな場面が頻発しそう
2. 開発の課題解決
①通信
課題:分割間の通信の遅延、かつ担保
解決:APIゲートウェイを使う。
後は同期・非同期を考えてツールの選定をする。(RESTやメッセージブローカー)
②設計・実装
課題:マイクロサービスの実現方法。モノリスの回避
解決:DDDの理解。必要であればその他アーキテクチャ(クリーンアーキテクチャ等)
③テスト
課題:分割された大量機能の担保を取らないといけない
解決:自動化が必須
単体だとMockitoやJUnit
結合移行だとSeleniumやDocker、CircleCIなどがいいらしい
④セキュリティ
課題:分割された機能に一つでもホールがあると危険
解決:セキュリティの統一化。APIゲートウェイでアクセスの入口を作ったり
WAFやShieldを活用していく。
3. 運用・監視の課題解決
①運用
課題:分割された機能毎によるリリース頻度増加
解決:CI/CDの理解
CI:実装→コミット→マージ→自動ビルド→自動テスト
CD:CI+デプロイ→リリース
ツール:Jenkins(オンプレ)、Github Actions
クラウドの利用(AWSだとCodePipelineなど)
②監視
課題:障害発生時の特定が難しくなる場合がある
解決:ログ・メトリクス・トレーシングを活用する
3. さいごに
インフラエンジニアじゃないけどクラウド(AWSなど)を学ぶ利点はかなり大きいことがわかった。
不透明な部分はまだまだあるので、各種深堀りをしていく必要があると感じた。