Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モノリシックの先にあるもの。マイクロサービス、あるいは / Does monolithic evolve into micro service

Daisuke Sato
February 08, 2019

モノリシックの先にあるもの。マイクロサービス、あるいは / Does monolithic evolve into micro service

モノリシックアーキテクチャからマイクロサービスアーキテクチャへの移行をどう考えるかというテーマのプレゼンです。

## イベント

Tech Do 第12回
https://mimemo.io/m/vj5XN4jM53l86d7

## 参考

- ECにおけるマイクロサービス分割を考察する
https://dskst9.hatenablog.com/entry/2019/01/13/221041

Daisuke Sato

February 08, 2019
Tweet

More Decks by Daisuke Sato

Other Decks in Technology

Transcript

  1. モノリシックの先にあるもの。
    マイクロサービス、あるいは
    Tech Do
    2019.2.8
    daisuke sato @dskst9

    View full-size slide

  2. daisuke sato @dskst9
    Engineering Manager at ASKUL
    クラウドとアーキテクチャ、組織論が好き。最近はエンジニ
    アリングマネージャ楽しいよというのを世の中に広めたいと
    思っている。

    View full-size slide

  3. モノリシックから
    マイクロサービスへ
    移行を検討している方?

    View full-size slide

  4. 本日お話すること
    モノリシックなレガシーシステムと
    マイクロサービスの付き合い方

    View full-size slide

  5. マイクロサービスで
    何を解決したいのか?

    View full-size slide

  6. 課題は何か

    View full-size slide

  7. モノリシックの限界
    ● 肥大化するスパゲティコード
    ● 何をするにも時間がかかり、作業効率が低下
    ● そして、スケールできなくなるチーム

    View full-size slide

  8. モノリシックの限界
    ● 肥大化するスパゲティコード
    ● 何をするにも時間がかかり、作業効率が低下
    ● そして、スケールできなくなるチーム
    変化に弱い設計のモノリシックの限界

    View full-size slide

  9. 変化に弱い設計の
    モノリシックからの脱却を考える
    ● 最低限3層構造にしたい
    ○ プレゼンテーション層
    ○ ロジック層
    ○ データベース層
    ● スケールできるようにサービス分割したい
    ● 分割したサービスをチームごとに開発したい

    View full-size slide

  10. マイクロサービス
    やってみるか?

    View full-size slide

  11. マイクロサービス
    やってみるか?
    とか考えて

    View full-size slide

  12. よーいドン!
    で、マイクロサービスを
    目指すと

    View full-size slide

  13. アーキテクチャを知る

    View full-size slide

  14. 進化的
    アーキテクチャ
    “モノリスを構築できないとき、なぜ
    マイクロサービスが
    その答えだと思うのか”

    View full-size slide

  15. 非構造化モノリス
    Monolithic
    Architecture
    ● 非構造化モノリス
    ● レイヤ化アーキテクチャ
    ● モジュール式モノリス
    ● マイクロカーネル
    UI
    クラス
    クラス
    クラス
    クラス
    クラス
    レイヤ化アーキテクチャ
    プレゼンテーション層
    ビジネスロジック層
    永続化層
    データベース
    モジュール式モノリス
    UI
    コンポーネント
    モジュール
    モジュール
    モジュール

    View full-size slide

  16. Event Driven
    Architecture
    ● Broker
    ● Mediator
    Broker
    event process
    message
    process process
    process
    message
    Mediator
    event
    process process
    message
    Mediator
    process
    workflow

    View full-size slide

  17. Service-Oriented
    Architecture
    ● ESB駆動SOA
    SOA
    business service
    message bus
    process choreographar
    service orchestrator
    enterprise service
    application
    service
    infrastructure
    service

    View full-size slide

  18. Microservices
    Architecture
    ● より小さなサービス粒度でそ
    れぞれ独立
    ● ビジネスドメインに沿ったモデ
    ル化、分離
    ● 高度な自動化、分散化、
    API
    module
    module
    module
    module
    module
    module
    module
    module
    module
    module
    request request request

    View full-size slide

  19. Service-Based
    Architecture
    移行用のアーキテクチャパターン
    (あるいは、分断されたモノリス)
    ● 大きなサービス粒度
    ● 大きなデータベーススコープ
    ● レガシーシステムとの統合ミドル
    ウェア
    UI
    module
    module
    module
    module
    module
    module
    module
    module
    module
    module
    request request request

    View full-size slide

  20. ECにおける
    マイクロサービスで考察する

    View full-size slide

  21. マイクロサービスにおける
    サービスの考え方

    View full-size slide

  22. サービスの境界を考える
    ● DDDでの境界付けられたコンテキストを定義するように、コン
    テキストマップを作る
    ● サービスをビジネスの境界で切るのか、機能の境界で切るの
    かこれは悩ましい問題
    ● サービス分割を行った結果が正しいかは、その組織にしかわ
    からない

    View full-size slide

  23. サービスの境界を考える(イメージ)

    View full-size slide

  24. 境界は組織を作る
    境界定義をするということ、
    それは組織をつくること

    View full-size slide

  25. コンウェイの法則
    “システムを設計する組織は、
    その構造をそっくりまねた構造
    の設計を生み出してしまう”

    View full-size slide

  26. ECサイトで
    境界を定義してみる

    View full-size slide

  27. ECサイトにおける境界の定義の例
    ● Order
    ● Cart
    ● Catalog(Products)
    ● User
    ● Payment
    ● Inventory
    ● Shipping

    View full-size slide

  28. イメージしてみた
    マイクロサービスの粒度に沿って
    サービスを作る。
    (各サービスの中にモジュールの
    イメージを記載)

    View full-size slide

  29. 浮き彫りになる課題
    ● 適切なサービス分割ができているのだろうか
    ● この単位でデータベース分割をできるのか
    ● 分散トランザクションをどうするのか
    ● 全サービスから利用されるサービスのパフォーマンスをどうす
    るのか
    ● このサービス量を運用できるのだろうか

    View full-size slide

  30. ステップを踏まずに
    いきなりマイクロサービスを目指すと
    リスクが高すぎる

    View full-size slide

  31. 考え方を変える

    View full-size slide

  32. ストラングラーアプリケーションパターン
    という考え方

    View full-size slide

  33. ストラングラーアプリケーションパターン
    Martin Fowlerが提唱した、大規模な Web アプリケーション内のコー
    ドをリファクタリングしてリリースする際の処理方法
    ● 変換: 既存のサイトと同等の新しいサイトを作成
    ● 共存: 既存のサイトから新しいサイトにリダイレクトするために、機
    能を増分的に実装
    ● 排除: 古い機能からリダイレクトされるようになったら、既存のサ
    イトからその機能を削除

    View full-size slide

  34. ストラングラー
    アプリケーションパターン
    ×
    Service-Based Architecture

    View full-size slide

  35. モノリスの課題を解決できそうな
    "可能な限り共有の少ない"
    アーキテクチャ

    View full-size slide

  36. いきなりマイクロサービスはやらない
    ● ある程度のファットサービスにする
    ● モノリスデータベースを使い続ける
    ● BFFはつくらない
    今は Service-Based Architecture が適していそう

    View full-size slide

  37. Service-Based
    Architecture
    でイメージする
    サービスの粒度が荒くなるが、シン
    プルになる

    View full-size slide

  38. それでも課題はたくさんある
    ● 分散トレーシング
    ● 計算された並列処理
    ● データベースボトルネック
    ● 開発難易度の増大
    ● フロントとAPIの密結合化

    View full-size slide

  39. 進化するアーキテクチャ
    退化するアーキテクチャ

    View full-size slide

  40. その選択は進化なのか退化なのか
    それは組織にしかわからない
    我々にできることは「何を解決したいのか」
    課題から始めること

    View full-size slide

  41. いきなりマイクロサービスはだめ
    マイクロサービスはある日突然なるわけではない
    日々、課題を解決していて気づいたらマイクロサービ
    スになっているもの

    View full-size slide

  42. マイクロサービスと聞こえたら

    View full-size slide

  43. 何を解決しようとしているのか考えよう

    View full-size slide

  44. 今、
    解決するべきか
    考えよう

    View full-size slide

  45. 今の課題を解決して一歩ずつ進んでいこう

    View full-size slide

  46. ご清聴ありがとうございました

    View full-size slide