もりはやメモφ(・ω・ )

インフラなエンジニアからSREへ

マイクロサービスアーキテクチャ本の感想(4章の後半)

まだまだ正月気分が続きますが、O'Reillyのマイクロサービスアーキテクチャ本感想の第4回です。

4章「統合」を読んでの続き

バージョニングについて

この節ではマイクロサービスにおけるバージョニングについて説明があります。マイクロサービスの内部としては分かりやすいバージョニングをしつつ、外部のマイクロサービスへはバージョンを意識させないことが大事とあります。(いつから新バージョンになったと錯覚していた!!)

  • セマンティックバージョニングを利用した"分かりやすい"バージョニング方法
    • x.y.zのxはメージャーバージョンを意味し、破壊的な変更を伴う
    • x.y.zのyはマイナーバージョンを意味し、機能追加だが互換性あり
    • x.y.zのzは不具合修正
    • (この辺はdockerみたいな日付(年)を採用するところもあるので考え方次第かも)
  • 破壊を伴うバージョンアップを行うためのエンドポイントの共存について
    • ブルーグリーンデプロイメントやカナリアデプロイで一時的に共存させるのはOK
    • "/api/v1/hoge"と"/api/v2/hoge"のようなわかりやすいURIを利用するケースもあるがお勧めできない
      • クライアントからマイクロサービスのAPIバージョンは不透明(バージョンはわからない)とするべき
    • 古いクライアント向けに古いバージョンを稼働させ続けるのも手だが、管理コストが跳ね上がる

ユーザインタフェースについて

PCだけでなく、スマホタブレット、スマートウォッチなどデバイスが多様化している現在でのUIの構成ポイントが語られます。

  • 様々なデバイスが存在し、それぞれの制約がある
    • ブラウザ、解像度
    • モバイルの場合通信は最低限であるべき
    • SMSを利用するケースも多い
    • 今後新たなデバイスが出てくる可能性も高い(VRやARもありますしね)
  • API合成は各マイクロサービスが提供するAPIを組み合わせてUIを作る手法
    • メリット
      • バイス単位に再利用できる
      • 部品ごとに利用して特定の画面パーツを自由にカスタマイズできる
    • デメリット
      • バイスを意識したレスポンス調整ができない
      • 合成したUIをだれが作るのか問題(APIまでは作るけど、その後はだれ?)
  • UI部品合成はマイクロサービスで小さな画面部品(UI)まで作成し、それを各デバイス向けに組み合わせる手法
    • メリット
      • マイクロサービスチームがUI部品の変更まで担当可能
    • デメリット
      • 各UIの一貫性をどうやって保つか問題(担当チームの趣味がでるかも)
      • HTTPだけじゃなくてネイティブアプリの場合どうにもならない問題
  • BFF(Backend For Frontend)は、フロントエンド(PCブラウザ、ネイティブアプリ、管理者向け画面)などの各フロントエンドごとにAPIコール用のバックエンドを設ける手法
    • 単一のAPIゲートウェイを置くのは悪手(モノリシックなAPIゲートウェイの誕生)
    • BFFとUIの間にAPI認証/認可のレイヤもはさむことができる
    • 気を付けるのは結合。ほかのレイヤの機能や、ほかのUIの機能がBFFに混入しないようにする
  • ベストな方法は各自探すこと
  • 大事なのは凝集性を維持すること

サードパーティソフトウェアとの統合

SaaSCMSCRMなどのサードパーティとの付き合い方についての解説。便利かつ多機能であるが故に、気が付くと沼のように沈み込んでしまう危険性がありますよという話。

  • ツールの手前にファサードサービスを設けて隠ぺいする
    • ファサードは自前で作成したサービスでAPI呼び出しなどを中継する役割
    • 各マイクロサービスから直接ツールのAPIをたたくと結合になって大変
    • サードパーティソフトウェアが一つの巨大な共有データベースになる危険性
  • 沼から抜け出す場合はストラングラーパターンで徐々に対応する

4章の感想

4章は分割したマイクロサービスをいかに統合して顧客サービスとして展開していくかを学ぶことができました。分割したそれぞれのマイクロサービスをどのように連携させ、UIをどう構成し、サードパーティとどのように連携するのか、実業務への落とし込みを考えるとタスクの洗い出しだけでも大変に違いありません。

もっとも衝撃的だったのは共有データベースがマイクロサービスとしては悪手であるということで、目からうろこでした。うすうす感じてはいた「とりあえずデータストアといえばRDBでしょ、という時代では無い」ことを言葉として認識できました。

サービス間連携についてはRPCとRESTについて多くの用語や概念を学べました。リチャードソン成熟度モデルやらHATEOASとかRxとか聞いたことがある程度でしたので、著者が進める文献へのリンクなどが載せられているところは親切で助かります。