JSUG勉強会 2020 その3 Spring Cloud without Netflix OSS に行ってきた #jsug

JSUG勉強会 2020 その3 Spring Cloud without Netflix OSS に参加しました。今回はオンライン開催。簡単に所感をまとめます。

jsug.doorkeeper.jp

所感

Spring Cloud やマイクロサービスはあまり知識がないため、自分にはなかなかハイレベルな内容でした...。後半2つのセッションは若干内容が被ってたけど、特に最後のセッションは Kubernetes 絡みの事例で貴重な内容だったかも。こういうのをしっかり理解できるようになりたいものです。

ところどころ、Spring Cloud 関連は EOL が短い傾向あり?という話が出てたのが気になる。そんなに困らないということだったけど、後方互換はちゃんと考慮されてる感じなんだろうか。

Spring Cloud のようなマイクロサービス向けのライブラリは、アーキテクチャや設定などがサービスやライブラリ間で疎結合になるように工夫されてるような印象があります。最初は覚えるのが大変そうだけど簡単に運用できるようになってるんだろうと思います。

以下、メモから抜粋。

Introduction to Resilience4j

  • フォールトトレランスライブラリ
    • サーキットブレイカ
  • Netflix OSS
    • Eureka, Zuul 以外は保守モードに移行
    • Spring Cloud Netflix も同様
  • Hystrix の代替の1つとして Resilience4j
  • 関数型プログラミングモデル
  • コアモジュール☆
  • アドオンモジュール☆
  • recover に代替処理を記述
  • サーキットブレイカーの状態遷移☆
    • CLOSED, OPEN, HALF_OPEN
    • Resilience4j にはもう2つの状態がある
    • OPEN から一定時間経過すると HALF_OPEN
  • スライディングウィンドウ (呼び出し結果を保存する配列)
    • 回数ベース (N個の循環配列) ※デフォルト
    • 時間ベース (1秒ごとの部分集約のN個の循環配列)
  • 最小呼び出し回数に満たない場合は失敗率や遅延率は計算されない
    • 回数未満の間は状態遷移しない
  • HALF_OPEN ⇒ OPEN は回数ベース
  • 呼び出し遅延とタイムアウトの設定は別
  • resilience4j-spring-boot2
  • Actuator で CircuitBreaker の状態を監視
    • resilience4j-prometheus は非 Spring Boot 向け?
  • Spring Cloud Circuit Breaker
  • TimeLimiter?

Spring Cloud Consul / Consul 入門

  • 大規模分散システムを構築するための機能を提供
  • HashiCorp Consul
    • Web API の設計がきれい
  • Server/Agent によるクラスタ構成 ※同じバイナリ
    • Agent 配下の node の情報は Server 経由でクラスタ内に同期される
  • Consul ⇒ サービスの状態管理 & Key-Value Storage
  • Multi Datacenter
  • Consul Connect (Service Mesh)
  • Spring Cloud Consul
    • Service Discovery, クライアントサイドロードバランシング
    • Distributed Configuration ≒ Spring Cloud Config
  • Spring Cloud Consul はライブラリとして動作する
    • サービスと同じプロセス内で動く?
    • ⇔ サービスメッシュ
  • ローカルのプロパティを Consul の設定で上書きできる
  • @RefreshScope
    • Key-Value Storage の値を変更すると Bean をリフレッシュする (DIをやり直す)
    • もしくは /refresh エンドポイントを叩く
  • Spring Cloud Gateway
  • 通信や API の通信を暗号化するため TLS は必須
  • デフォルトは認証なしのため ACL を有効 + 必要最低限の API を公開する
    • デフォルトはすべての API が認証なしでアクセスできる

github.com

Spring Cloud Gateway on Kubernetes

www.slideshare.net

  • API Gateway Pattern
    • マイクロサービスのエッジに API Gateway を置く
    • サービスごとに横断する関心ごとをゲートウェイに持たせる
    • それぞれのサービスはシンプルに
  • Route, Predicate, Filter
    • ルーティングの設定は Functional に記述可
  • WebFlux & Reactor でノンブロッキングに実装されている
    • 大量リクエストを効率的に捌けるはず
  • Spring Cloud Kubernetes
  • Discovery Client (Service Discovery)
    • @EnableScheduling を付けないとポーリングしてくれない
  • Distributed Configuration
  • Circuit Breaker
    • Resilience4j
  • Security (Spring Security)
    • Spring Cloud Gateway 上で session と資格情報を関連付ける
    • Scope による権限制御
  • Monitoring (Prometheus)
    • Actuator + Micrometer

github.com