絡み合うSaaSプロダクトのマイクロサービスアーキテクチャ | LayerX
by
mosa
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Confidential © 2022 LayerX Inc. 1 絡み合うSaaSプロダクトの マイクロサービスアーキテクチャ 2022/03/15 @mosa_siru SaaS.tech #1
Slide 2
Slide 2 text
Confidential © 2022 LayerX Inc. 2 これはなに ● 業務フローをなめらかにするために絡み合う複数プロダクトに、 マイクロサービスならどう向き合うかの話です。 ● 完璧な設計&アプローチとかではなく、現実にあったケーススタディと して、優しく⾒ていただけると幸いです。 ● めちゃくちゃボリューミーです、すいません…
Slide 3
Slide 3 text
Confidential © 2022 LayerX Inc. 3 ⾃⼰紹介 榎本 悠介 @mosa_siru ・LayerX取締役 SaaS事業部⻑ ・プロダクト/エンジニアチームをリード ・創業時CTO。新規事業、新規プロダクトをひたすらつくるマン ・前線でプロダクト仕様考えまくってコードかきまくってます
Slide 4
Slide 4 text
Confidential © 2022 LayerX Inc. 4 ⽬次 1. プロダクト紹介 2. 基本の構成図と考え⽅ 3. マイクロサービスのケーススタディ(循環参照を避ける話) 4. マイクロサービスのケーススタディ(レプリケーション) 5. アーキテクチャ再考 6. まとめ
Slide 5
Slide 5 text
Confidential © 2022 LayerX Inc. 5 1. プロダクト紹介
Slide 6
Slide 6 text
Confidential © 2022 LayerX Inc. 6 2021/01から、3つのプロダクトを順次展開(どれも単体で便利︕) 特に今回、 この2つに注⽬
Slide 7
Slide 7 text
Confidential © 2022 LayerX Inc. 7 AI OCRによる⾃動読取 仕訳の⾃動⼊⼒補完・振込データ⾃動⽣成 会計システムとシームレスに連携 AI OCRによる稟議の⾃動下書・申請補助 購買申請との紐付けで予算管理 Slack連携でSlackで承認が完結 めちゃくちゃ便利な 請求書処理プロダクト めちゃくちゃ便利な 汎⽤ワークフロー(申請&承認)プロダクト
Slide 8
Slide 8 text
Confidential © 2022 LayerX Inc. 8 企業A 企業B 売り⼿・受注者 買い⼿・発注者 請求書を発⾏ 請求書を受け取り 会計・⽀払処理 バクラク請求書とは 受け取った請求書の処理を効率化するサービスです
Slide 9
Slide 9 text
Confidential © 2022 LayerX Inc. 9 Before バクラク請求書 ✓ 請求書を⾒ながらシステムに⼿⼊⼒が多い。⼊⼒ミスも多い。 ✓ 前⽉の仕訳を確認しながら、仕訳を切っていて⼤変。 ⼿⼊⼒・ミス 回収漏れ ✓ 現場が請求書を上げ忘れる。取引先が請求書を送ってこない。 ✓ 請求書の抜け漏れチェックが⼤変。 稟議・統制 ✓ 現場が上げる⽀払依頼が遅い。申請が間違っている。 ✓ 請求書だけ⾒ても、⽀払っていいかわからない。請求書と稟議が紐付いてい ない。(紙で申請と請求書がまわってくる…) 今回、ここに フォーカス当てます
Slide 10
Slide 10 text
Confidential © 2022 LayerX Inc. 10 After バクラク請求書 ✓ AI-OCRで請求書情報を⾃動⼊⼒ ✓ 仕訳の⾃動⼊⼒補完・振込データ⾃動作成 ✓ 回収状況レポートで回収漏れを確認 ✓ 回収催促機能で、請求書をURLで回収可能 ✓ 稟議をOCRで⾃動⼊⼒。現場でミスや負担削減 ✓ 請求書と稟議の紐付けでかんたん確認 ⼿⼊⼒・ミス 回収漏れ 稟議・統制 今回、ここに フォーカス当てます
Slide 11
Slide 11 text
Confidential © 2022 LayerX Inc. 11 回収 稟議・承認 仕訳・⽀払・消込 保管 各プロセスの⾮効率を解消し、⼀気通貫の業務に ✓抜け漏れ確認 ✓請求書催促 ✓AI OCRで申請補助 ✓購買申請で予算統制 ✓slackでラクラク承認 ✓AI OCRで⾃動読取 ✓仕訳データの⾃動作成 ✓⽀払データ⾃動作成 ✓電⼦帳簿保存法対応 データを ⾃動同期 バクラクシリーズで⼀気通貫の業務プロセスのデジタル化が可能
Slide 12
Slide 12 text
Confidential © 2022 LayerX Inc. 12 ここだけおさえておいて欲しいポイント︕ ● 経理に請求書だけ来ても、経理は会社の全てを把握しているわけではないので、払っていい かわからなかったりするよ ○ 上⻑がその⽀払を承認していたか、元の”⽀払申請”(請求書がきたので払ってくださ い申請)を⾒る必要があるよ ● でも承認プロセスと請求書処理業務は普通「分断」されているから、その紐付けが⼤変だよ ○ 例︓承認された⽀払申請の内容を、プリントアウトして経理に渡している ● バクラク申請とバクラク請求書は、そこが連携されているのがポイントだよ ○ ⽀払申請がされると、バクラク請求書側に請求データが作られるよ (単体で便利なプロダクトたちだけど、2つ合わさるとさらに便利なんだよ)
Slide 13
Slide 13 text
Confidential © 2022 LayerX Inc. 13 2. 基本の構成図と考え⽅
Slide 14
Slide 14 text
Confidential © 2022 LayerX Inc. 14 構成図(基本形) 各プロダクトのFrontendが裏側の専⽤APIを叩く形式。DBは共有しない。 例︓ユーザー情報については、共通管理基盤(認証基盤)から取りにいく
Slide 15
Slide 15 text
Confidential © 2022 LayerX Inc. 15 ⽅針 ● SPA + Backend APIの構成 (Nuxt.js + Golang) ● 各プロダクトごとのマイクロサービス ○ 各プロダクトにPublic APIとPrivate APIがあり、裏側ではPrivate APIを 利⽤ ● DBはマイクロサービスをまたいで共有しない (ReadもWriteも⼀⼈) ● プロダクト間の循環参照は避ける(重要) ○ デプロイ順が意味不明になるため
Slide 16
Slide 16 text
Confidential © 2022 LayerX Inc. 16 Why Microservices? ● 単体で成⽴するSaaSプロダクトは、ドメイン境界として適切に⾒えた ● 実際、開発チームは分かれていた&チームをスケールさせる覚悟があった ● 今後どんどんプロダクトを出す可能性があった ● 複数プロダクトを展開するSaaSの先輩たちが、モノリスからマイクロサービス に切り出すのに苦⼼しているのを知っていた
Slide 17
Slide 17 text
Confidential © 2022 LayerX Inc. 17 3. マイクロサービスのケーススタディ (循環参照を避ける話)
Slide 18
Slide 18 text
Confidential © 2022 LayerX Inc. 18 ここからが本題
Slide 19
Slide 19 text
Confidential © 2022 LayerX Inc. 19 回収 稟議・承認 仕訳・⽀払・消込 保管 各プロセスの⾮効率を解消し、⼀気通貫の業務に ✓抜け漏れ確認 ✓請求書催促 ✓AI OCRで申請補助 ✓購買申請で予算統制 ✓slackでラクラク承認 ✓AI OCRで⾃動読取 ✓仕訳データの⾃動作成 ✓⽀払データ⾃動作成 ✓電⼦帳簿保存法対応 (※ 2022年1⽉~対応予定) データを ⾃動同期 バクラクシリーズで⼀気通貫の業務プロセスのデジタル化が可能
Slide 20
Slide 20 text
Confidential © 2022 LayerX Inc. 20 回収 稟議・承認 仕訳・⽀払・消込 保管 各プロセスの⾮効率を解消し、⼀気通貫の業務に ✓抜け漏れ確認 ✓請求書催促 ✓AI OCRで申請補助 ✓購買申請で予算統制 ✓slackでラクラク承認 ✓AI OCRで⾃動読取 ✓仕訳データの⾃動作成 ✓⽀払データ⾃動作成 ✓電⼦帳簿保存法対応 (※ 2022年1⽉~対応予定) データを ⾃動同期 バクラクシリーズで⼀気通貫の業務プロセスのデジタル化が可能 データを ⾃動同期︕︕
Slide 21
Slide 21 text
Confidential © 2022 LayerX Inc. 21 要件(1) バクラク申請で⽀払申請(請求書がきたので払ってください申請)がされると、 申請内容を元にしてバクラク請求書で請求書レコードが作られる (Write) 申請すると、 申請内容を元に 請求書レコード作成 請求書No. 111 ⽀払⾦額: 660,000 ⽀払期⽇: 2020-10-31 取引先︓株式会社⽇本 (添付ファイル付) 申請作成画⾯
Slide 22
Slide 22 text
Confidential © 2022 LayerX Inc. 22 要件(1) バクラク申請で⽀払申請(請求書がきたので払ってください申請)がされると、 申請内容を元にしてバクラク請求書で請求書レコードが作られる (Write)
Slide 23
Slide 23 text
Confidential © 2022 LayerX Inc. 23 要件(2) バクラク請求書で請求書を⾒るときは、元になった申請情報も⾒える(Read) (経理がパッと確認するため)
Slide 24
Slide 24 text
Confidential © 2022 LayerX Inc. 24 要件(2) バクラク請求書で請求書を⾒るときは、元になった申請情報も⾒える(Read) (経理がパッと確認するため)
Slide 25
Slide 25 text
Confidential © 2022 LayerX Inc. 25 ごく普通の要件感あるが、すでにプロダクト間で循環する・・・・
Slide 26
Slide 26 text
Confidential © 2022 LayerX Inc. 26 どうするか
Slide 27
Slide 27 text
Confidential © 2022 LayerX Inc. 27 考えた⽅法 A. BFF / Gateway API を利⽤して、循環を避ける B. SPAが他プロダクトのPublic APIを叩くのを許す C. 必要なデータを同期してしまう
Slide 28
Slide 28 text
Confidential © 2022 LayerX Inc. 28 (A) BFF / Gateway API を利⽤して、循環を避ける
Slide 29
Slide 29 text
Confidential © 2022 LayerX Inc. 29 (A) BFF / Gateway API を利⽤して、循環を避ける ● メリット ○ シンプルである ● デメリット ○ 今は存在しないGateway APIが登場する ■ ※そもそもあるべきという説も濃厚であるが、各種事情で今からつくるの が簡単ではない ○ Gatewayがロジックを持たないなら、結局依存関係が発⽣(次ページ)
Slide 30
Slide 30 text
Confidential © 2022 LayerX Inc. 30 Gatewayが更新制御ロジックを持たないなら、結局依存関係が発⽣ Gateway API には 2つのマイクロサービスをまたいだ更新制御ロジックを持たせたくない。 (ロールバック処理等をGatewayに持たせたくないため。) その場合、バクラク申請 => バクラク請求書の依存が発⽣する。 この理屈だと、更新処理の起点がバラバラだと、結局循環参照が起きる可能性がある。
Slide 31
Slide 31 text
Confidential © 2022 LayerX Inc. 31 (B) Frontend が各プロダクトのPublic APIを叩くのを許す
Slide 32
Slide 32 text
Confidential © 2022 LayerX Inc. 32 (B) Frontend が各プロダクトのPublic APIを叩くのを許す ● よくある、BFFを導⼊する前のパターン。⽐較的シンプルではある ● 場合によっては結局依存が発⽣する(次ページ) ● 認証・権限まわりがカオスになりがち ○ 例︓バクラク申請の権限が⾜りず、バクラク請求書側で元になった申請を⾒るこ とができない(あるべき姿かもしれないが、混乱の元になりうる)
Slide 33
Slide 33 text
Confidential © 2022 LayerX Inc. 33 Frontendが更新制御ロジックを持たないなら、結局依存が発⽣ 両プロダクトの更新処理をFrontendから投げるのは、トランザクション管理を考えるとおすすめ しない。 backend経由にする場合、結局バクラク申請 => バクラク請求書の依存は発⽣する。(Gateway APIの時と同様) 循環参照を避けるには、更新の起点を統⼀する必要がある。
Slide 34
Slide 34 text
Confidential © 2022 LayerX Inc. 34 (C) 必要なデータを同期してしまう
Slide 35
Slide 35 text
Confidential © 2022 LayerX Inc. 35 (C) 必要なデータを同期してしまう ● メリット ○ バクラク請求書ユーザーは、申請側の権限に依らず申請情報を⾒ることができる ● デメリット ○ データ同期の複雑性 ○ データ不整合の危険 ○ DBスキーマ変更時に⼤変 これやるくらいなら、DB直参照を許した⽅が良いのではという気分にならなくもない。 (Writeは1⼈の責任、Readは最悪複数⼈を許す)
Slide 36
Slide 36 text
Confidential © 2022 LayerX Inc. 36 さらに要件は続く
Slide 37
Slide 37 text
Confidential © 2022 LayerX Inc. 37 よく考えたら出てきた⾟い要件(3) バクラク請求書側の請求書⼀覧の検索にて、元の申請のステータス(承認済等)でフィルタしたい (例︓承認済の請求書だけ処理したい)
Slide 38
Slide 38 text
Confidential © 2022 LayerX Inc. 38 これはやばい ● 請求書⼀覧のフィルタは、請求書の⽇付や⾦額等、あらゆる条件の掛け合わせで⾏わ れる。申請ステータスはその⼀部。 ● これを最適なページング込みで実現するには、同じDBに持つしかない
Slide 39
Slide 39 text
Confidential © 2022 LayerX Inc. 39 よく考えたら出てきた⾟い要件(4) バクラク請求書側で、元になった申請のデータと合わせて請求書リストをデータ出⼒したい 請求書No 取引先名 ⾦額 元の申請No 元の申請タイトル #123 mosa産業 10,000 #12 ⽀払申請(mosa産業) #121 ymatsu⽔産 20,000 #9 ⽀払申請(ymatsu⽔ 産) #120 … … .,.. …
Slide 40
Slide 40 text
Confidential © 2022 LayerX Inc. 40 これもやばい A. Gateway APIパターン︓ Gateway APIでCSV組み⽴てるの・・・︖ B. Frontend パターン︓Frontでデータの組み⽴てをすることは現実的ではない。 結局、バクラク請求書 => バクラク申請の依存が発⽣する(下図) これにより循環参照となる。 C. データ同期して、同じDBに持つのがベストではという結論
Slide 41
Slide 41 text
Confidential © 2022 LayerX Inc. 41 データ同期の実現⽅法 3つ
Slide 42
Slide 42 text
Confidential © 2022 LayerX Inc. 42 実際は、API経由ではなく⾮同期でデータ同期する API経由だと ● 同期処理によりレスポンスが遅くなる ● 他サービスの障害に影響して、本来の処理(申請作成)⾃体も失敗してしまう。 ● トランザクション境界が分かれているため、失敗時にデータ不整合がありうる => Queue経由でリトライ機構を⼊れ、結果整合とする。 Private APIは 微妙…
Slide 43
Slide 43 text
Confidential © 2022 LayerX Inc. 43 パターン1: Push型 必要な情報をまるっと渡し、⾮同期で更新。必要なコンポーネントも少なく、シンプル。queue のpayloadは太りがち。 バクラク申請 => バクラク請求書 の依存が発⽣する。
Slide 44
Slide 44 text
Confidential © 2022 LayerX Inc. 44 パターン2: Pull型 申請IDのみを渡し、実体は取りにこさせる形式。queueのpayloadがシンプルで扱いやすい。 軽微な循環参照だが、今後 バクラク申請 <= バクラク請求書 の依存(Push型と逆の依存)の⽅ 向が強くなりそうな場合、有⽤。
Slide 45
Slide 45 text
Confidential © 2022 LayerX Inc. 45 パターン3: 仲介型 複雑だが、専⽤のコンポーネントを仲介することで、直接的な依存を発⽣させない。
Slide 46
Slide 46 text
Confidential © 2022 LayerX Inc. 46 パターンのまとめ A => B の依存 A <= B の依存 コンポーネント数 1. Push型 強 - 少 2. Pull型 弱 強 中 3. 仲介型 弱 - 多 どの依存関係を作りたいかによって、アプローチが異なる。 => 僕らは今後どの依存関係がメインになりそうか︖ 顧客の声をもとに、将来ありそうな要件をベースに考えた。
Slide 47
Slide 47 text
Confidential © 2022 LayerX Inc. 47 開発を進めるうちに出てきた要件(5) バクラク申請のサービスで、現在バクラク請求書で保持しているマスタデータを⼊⼒したい (例︓申請にて、どの部⾨で使われた費⽤かを⼊⼒・表⽰させたい)
Slide 48
Slide 48 text
Confidential © 2022 LayerX Inc. 48 おそらくバクラク申請 => バクラク請求書の依存が発⽣しやすいドメインと理解 補⾜︓今回の要件ならGateway APIがあれば依存は発⽣しないように⾒えるが、「申請⼀覧を出⼒したい」と⾔われるとやはりアウト
Slide 49
Slide 49 text
Confidential © 2022 LayerX Inc. 49 【結論】 依存関係の整理の結果、シンプルな「 1. Push型」にした A => B の依存 A <= B の依存 コンポーネント数 1. Push型 強 - 少 2. Pull型 弱 強 中 3. 仲介型 弱 - 多
Slide 50
Slide 50 text
Confidential © 2022 LayerX Inc. 50 補⾜︓データの置き場所 ● 依存を発⽣させないために、各プロダクトから参照されやすい マスタデータを、そもそも別サービスに切り出す⼿もある ● 「どこから更新されるか」「どこから参照したくなるか」 あらゆるユースケースを想像して、「誰の持ち物か」を考え続 ける必要がある ○ 事前に決めるには、めちゃくちゃドメイン知識がいる。 設計レベルでドメインエキスパートと相談していた。 ● 実際、とあるマスタデータは後から最適な場所に移動させた。
Slide 51
Slide 51 text
Confidential © 2022 LayerX Inc. 51 補⾜︓データ同期の整合性担保 不整合をおこさないために・・・ ● 当然リトライする ● データ同期ジョブについて、当然監視をする ● 最終的にデータに不整合がおきていないか、定期的に確認し、アラートを⾶ばしている
Slide 52
Slide 52 text
Confidential © 2022 LayerX Inc. 52 4. マイクロサービスのケーススタディ (レプリケーション)
Slide 53
Slide 53 text
Confidential © 2022 LayerX Inc. 53 他にもデータ同期が必要なデータが現れだした ● バクラク申請にて、他のRDBとJOINしないと、パフォーマンス的に厳しいクエ リが出てきた(詳細略) ○ (この時点でドメイン境界とは…など⾊々⾔いたいことはある⽅はいそうですが、 まだ抑えてください) ● これは「申請をもとに請求書レコードをつくり、さらに申請データも同期する」 等ではなく単純なレプリケーションで良いため、前述と異なる同期パターンが考 えられた
Slide 54
Slide 54 text
Confidential © 2022 LayerX Inc. 54 同期パターン1 Push型 / パターン2 Pull型 / パターン3 仲介型 上述と同様。(下図はパターン1)
Slide 55
Slide 55 text
Confidential © 2022 LayerX Inc. 55 パターン4︓定期Pull型 定期実⾏して、差分のあるレコードを取得し、更新する。
Slide 56
Slide 56 text
Confidential © 2022 LayerX Inc. 56 パターン4︓定期Pull型 クライアントサイドは「最終更新時刻」を持っておき、「それ以降に更新された レコード⼀覧をくれ︕」と⾔うイメージ。 ● メリット ○ パターン1-3と異なり、とりこぼしがなく、データ整合性を保ちやすい ● デメリット ○ リアルタイム性が低い ○ ⼀括でデータ更新されていると同期量が多い ○ 物理削除されたことをハンドリングするにはひと⼿間いる
Slide 57
Slide 57 text
Confidential © 2022 LayerX Inc. 57 パターン5︓DBをまたいでレプリケーションする ● 例︓AWS DMS(hostをまたいで特定テーブルのレプリが可能) ○ 1回限りではなく、継続的なレプリケーションが可能
Slide 58
Slide 58 text
Confidential © 2022 LayerX Inc. 58 パターン5︓DBをまたいでレプリケーションする ● AWS DMSを素振りしたところ、問題なくhostをまたいでレプリケーション された ● ALTERもsyncされることを確認した ○ ※カラムのデフォルト値, nullability, charset の変更は同期されないので注意 ● ⼀⽅、localでの開発環境をどうするかが課題 ● (そして同様のユースケースで使っているのを⾒たことがなく、不安)
Slide 59
Slide 59 text
Confidential © 2022 LayerX Inc. 59 【結論】 ● 今回のケースではデメリットを許せたため、「パターン4︓定期Pull型」とした ● やはりユースケースによって最適な⼿段は変わる
Slide 60
Slide 60 text
Confidential © 2022 LayerX Inc. 60 5. アーキテクチャ再考
Slide 61
Slide 61 text
Confidential © 2022 LayerX Inc. 61 そして現在、まだまだ増え続ける連携ニーズ 「バクラク請求書のファイルをバクラク電⼦帳簿保存に連携したい」 「バクラク申請のファイルをバクラク電⼦帳簿保存に連携したい」 「バクラク電⼦帳簿保存にあがったファイルを、バクラク申請に使えないか」
Slide 62
Slide 62 text
Confidential © 2022 LayerX Inc. 62 俺たちは⼀体何と戦っているんだ︖
Slide 63
Slide 63 text
Confidential © 2022 LayerX Inc. 63 そもそもドメイン境界間違えてない︖ モノリスじゃだめなの︖
Slide 64
Slide 64 text
Confidential © 2022 LayerX Inc. 64 実際やってみた
Slide 65
Slide 65 text
Confidential © 2022 LayerX Inc. 65 モジュラモノリス化のトライ ● mosaがマイクロサービスに発狂し、1-2週間集中して取り組んだ。 ● せっかく分かれているDBは⼤統⼀せずに、モジュラモノリスっぽくやるの を検討した
Slide 66
Slide 66 text
Confidential © 2022 LayerX Inc. 66 当初考えていたメリット 1. 循環参照問題からの解放 2. データ同期と整合性チェック、Txまたぎの必要がなくなる 3. コード共有ができる、無駄なPrivate API開発がなくなる
Slide 67
Slide 67 text
Confidential © 2022 LayerX Inc. 67 結論︓撤退した
Slide 68
Slide 68 text
Confidential © 2022 LayerX Inc. 68 撤退の理由 ● 循環参照問題からの解放はされなかった。 ○ モジュラモノリス内で循環依存を避けるために、結局同じことを考え る必要があった ○ 例︓申請情報をembedする請求書struct があると、package依存が発 ⽣ ○ コンポーネント間の複雑さを、そのままコード間の複雑さにおしこめ た印象だった。 ● DBが分かれている時点で、Txまたぎと不整合リスクは残った ● 組織のスケールという流れに逆⾏している ● 思ったより共有されるロジックはなかった ● コードの⾒通しが悪くなった。書いていて楽しくなくなった(フィーリング)
Slide 69
Slide 69 text
Confidential © 2022 LayerX Inc. 69 本当に試すべきは真のモノリス & DBの統⼀化だったか ● 仮にモジュラモノリスがうまく⾏くなら、今のマイクロサービスでもうま くいくはず。 ● やるならDBも統⼀、循環依存上等な完全なモノリス化だが、今のメリット を完全に捨てることになる。モジュラモノリスでない以上、戻ることも茨 の道。ゼロベースならさておき、今からやるには…。
Slide 70
Slide 70 text
Confidential © 2022 LayerX Inc. 70 あらためて、今の構成の メリットは何か︖
Slide 71
Slide 71 text
Confidential © 2022 LayerX Inc. 71 連携の設計は難しいが、マイクロサービスのメリットを享受しているのも事実 ● 各位が⾃律して動き、ファクトとして爆速で開発できて おり、運⽤もできている ○ いまも現在進⾏形で新しいプロダクトを開発しよ うとしている ● 他にも、OCR基盤/認証基盤/タイムスタンプ機構などプ ロダクトによらないマイクロサービスもあり、効率化の 恩恵を感じている ● そもそも単体で成⽴しているプロダクトであり、「⼀部 でもデータ連携(の可能性)があるから分けるべきでな い」というのもどうなのか ○ 今後新しいプロダクト群も全部モノリスにするの か︖ ● 新しいプロダクトでは新しい開発⼿法を試すことができ、 確実にチームに知⾒がたまっている
Slide 72
Slide 72 text
Confidential © 2022 LayerX Inc. 72 6. まとめ
Slide 73
Slide 73 text
Confidential © 2022 LayerX Inc. 73 まとめ ● 複数プロダクトで業務フローをなめらかにするSaaSは、ドメイン境界の設 定が単純ではない ○ 適切な切り⽅を知るには、深いドメイン知識が必要で、後からわかる ことも多い ● 連携部分とデータの置き場所は、設計⼒が極めて問われ、ユースケースに 依存する ● 割り切って最初からモノリスにすることは⼗分ありうる。⼀⽅、先輩⽅が 後から切り出すのに苦労しているのも事実 ● モジュラモノリスも結局依存関係と戦うことになると実感
Slide 74
Slide 74 text
Confidential © 2022 LayerX Inc. 74 We are Hiring︕ LayerXでは、顧客と向き合い、最⾼の体験と最適な設計を 両⽴できるエンジニアを求めています︕ https://jobs.layerx.co.jp/