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

Railsで実装されている機能のマイクロサービスへの切り離し / split to micro...

Mihyaeru
December 14, 2018

Railsで実装されている機能のマイクロサービスへの切り離し / split to microservices from rails

freee Tech Night #1 「freee on Rails の今とこれからの話」
https://freee-tech-night.connpass.com/event/106851/
にて発表に使った資料です。

Mihyaeru

December 14, 2018
Tweet

More Decks by Mihyaeru

Other Decks in Technology

Transcript

  1. 6 噴出する問題 不用意な密結合 • 規約では治安を維持しきれない • 一度不用意な密結合が生まれると、そ れが前例となりなかなか排除できない • 変更の影響範囲が想像以上に広がる

    ことで開発難易度が上昇 デプロイ巨大化 • 毎日大量のプルリクがマージされる • 1つのアプリケーションを大勢で開発す る限り避けられない
  2. 12 切り離し対象機能 ※これらは実際に切り離した機能の関係に似せたダミーです 販売の状態を管理 • 自動車 • バイク • おもちゃ

    • etc マーケティングチャネルの設定 • 販 売 状 態は、あらかじめ設 定したチャ ネルを利用する
  3. 13 リソースに分解して境界を見つける アプリケーション 自動車 バイク おもちゃ 販売状態 チャネル • 機能を構成する要素を関連するいく

    つかのリソースとして分解する • アプリケーションに固 有の要 素なの かを検討する • 固有でないものを切り離し対象とする
  4. 14 リソースに分解して境界を見つける アプリケーション マイクロサービス 自動車 バイク おもちゃ 販売状態 チャネル •

    今回は2つのリソースが切り離し対象 に決定 • DB的には10個程度のテーブルが該 当
  5. 23 どうやる? • マイクロサービスを作ってからアプリケーション側を入れ替える? • アプリケーション 側 で 新 しいインタフェースを

    満 たすようにリファクタリングしてか ら、裏側をマイクロサービスに入れ替える? • データはどこに持つ? • 入れ替えるときは全部一気に?一部ずつ? • ……
  6. 33 少しずつ置き換えていく 1. 最も独立しているチャネルの読み込みコントローラのみ 2. チャネルの書き込みコントローラまで拡大 3. 販売状態の読み込みを伴う自動車販売のコントローラのみ 4. 販売状態の書き込みを伴う自動車販売のコントローラまで拡大

    5. バイク販売、おもちゃ販売のコントローラまで拡大 6. その他のリソースに関するコントローラまで拡大 7. コントローラ単位ではないモデルレベルでの参照を置き換え 8. 古い実装を削除
  7. 34 リソースを操作するクラス群を導入 • マイクロサービス側のリソースに関わる操 作に対 する責務を負う ◦ マイクロサービス 側 のユースケースと、アプリ

    ケーション側のユースケースの間を埋める • マイクロサービス側、アプリケーション側の実装を 切り替える役目も兼ねる • リソースの数 x 操作の種類 の掛け算でたくさん マイクロサービス gRPCサービス アプリケーション モデル DB コントローラ ユースケース DB
  8. 35 リソースのアダプタ+α • マイクロサービスから取 得したリソースそのままで はちょっと困る ◦ JSONにシリアライズする部分 ◦ マイクロサービス側リソースではidしか持ってい

    ないデータ ▪ ユーザの名前など • アダプタ兼、追加のデータを効率良く取得するため にラッパー マイクロサービス gRPCサービス アプリケーション モデル DB コントローラ ユースケース DB
  9. 38 モデルのvalidationが難しい • 自動車販売やおもちゃ販売を表現するモデルの validationが販売状態の状態に一部依存していた • 該当するvalidationはユースケースのクラス経由で 行うようにして対応した • その

    他 は、マイクロサービス 側 、アプリケーション 側でそれぞれvalidationを実行する アプリケーション マイクロサービス 自動車販売 バイク販売 おもちゃ販売 販売状態 チャネル アプリケーション マイクロサービス gRPCサービス モデル DB コントローラ ユースケース 実装を 切り替え