「第4回Reactive System Meetup in 西新宿」に参加してきました

James Roperさん

  • モノリシックなアプリをマイクロサービスに置き換える
    • 気をつけるべき点を考慮できてないと元より悪くなってしまう
    • lagomを1つの例としてどういった考慮が必要か話す
  • サンプルをマイクロサービス化してみる
    • model部分をサービス化してREST連携
      • 一番シンプルなマイクロサービス化のしかた
    • 可動部分が増えるので障害が増え一貫性が崩れやすくなる
    • コンポーネント間のやりとりが同期的
    • 一箇所が遅延すると全体が遅くなる
    1. サーキットブレーカーを使う
    2. 障害が起きたサービスを切り離す
    3. 障害が起きている時にすぐにレスポンスを返せる
    4. 遅延してる処理をさばける時間を与える
    1. failure recoverry
    2. サービスの品質を落として障害を復旧させる
    3. graceful degration
    4. 生き残っている所だけでも使えるようにしておく
  • サービスによって持っている状態が異なってしまう問題
    • サービスを超えてトランザクションをかけることはできない
    • 同期通信で複数のサービスを更新するのは危険
    • トランザクション的なことをしようとしていることがマイクロサービス的でない
    1. 非同期メッセージ
    2. イベントを永続化したシステムに合う
    3. メッセージとして送る
      • kafkaのキューに入れる
      • 復旧後に気づいて自己修復でいる
    4. kafkaを使う
    5. Akka Streamで処理する
    1. Denormalize
    2. 他サービスにとって必要な情報を重複保存
    3. あえて非正規化する
      • scalabilityのため
      • システムにとって重要な情報
      • ビジネスにとって重要な情報
  • まとめ
  • マイクロサービスではそれぞれのサービスがなくなること前提に考えておかないと
  • あるサービスが落ちた時にどうなるか考えておく
  • どんなフローになってるかも考慮しておく

  • https://jroper.github.io/microservices-architecture-scala-jp

Eugeneさん

developmentそのものをスケールさせる