Slide 1

Slide 1 text

© 2023 Anti-Pattern Inc. All rights reserved. テナント分離⽅式の使い分けとバランス 2023/08/23 於 SaaS Engineering Meetup キックオフイベント 株式会社アンチパターン ⽮ヶ崎哲宏

Slide 2

Slide 2 text

⾃⼰紹介 2 ⽮ヶ崎 哲宏(Akihiro YAGASAKI) 株式会社アンチパターン 取締役 CTO兼COO 役割︓⽇本のソフトウェアエンジニアを憧れの職業に するためのいろいろ 経歴︓アマゾン ウェブサービス ジャパン にて SaaSシニアパートナーソリューションアーキテクト Webメディア/SaaSベンダーにて技術責任者ボードメンバー ⼤⼿SIerグループ会社にて情シス責任者 アニメソングのコーラス など 2022, 2023 Japan AWS Top Engineers (Software) 1975年⽣まれ

Slide 3

Slide 3 text

© 2023 Anti-Pattern Inc. All rights reserved. 企業概要 事業 3 会社名 株式会社アンチパターン (Anti-Pattern Inc.) 設⽴ 2019年7⽉1⽇ 代表者名 ⼩笹 佑京 (おざさ ゆうき) 所在地 東京都港区南⻘⼭3-15-9 MINOWA表参道3階 社員数 14名 (2023年1⽉1⽇時点) 資本⾦ 65,000千円 主要株主 ⼩笹 佑京 公式Web・SNS https://anti-pattern.co.jp/ Twitter: @antipatterninc ソフトウェア開発⽀援 • 様々な企業に対するソフトウェア開発の⽀援事業 • アジャイルのアプローチでプロダクト価値を最⼤化 決算期 6⽉ エンジニア特化型コミュニティスペース • ソフトウェアエンジニアに必要な場を提供 • エンジニア向け勉強会/交流会/セミナーなども実施 B2B SaaS 開発運⽤⽀援 SaaS • ソフトウェアエンジニア向けの SaaS • SaaS 向けの共通機能を管理画⾯と SDK/APIで提供 ⼤学⽣向けプログラミング学習コミュニティ • Webアプリケーションを中⼼にソフトウェア開発を 4年間かけて学びデジタルネイティブ⼈材を輩出 ハイスペックエンジニア特化型マッチングサービス • 優秀なエンジニアと、⾼付加価値/⾼単価な案件を依頼 したい企業のマッチングサービス 会社概要

Slide 4

Slide 4 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaS として共通に考えること

Slide 5

Slide 5 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaS で考えるべきことは多い 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 分析 移⾏

Slide 6

Slide 6 text

© 2023 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ SaaS で考えるべきことは多い

Slide 7

Slide 7 text

© 2023 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ テナントの概念が⼊ると ⼀気にめんどくさくなる たとえば SaaS で考えるべきことは多い

Slide 8

Slide 8 text

© 2023 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可 請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 マルチテナントの難しさ (もちろん場合によってはシングルテナントx複数もあり) 分析 移⾏ テナントの概念が⼊ると ⼀気にめんどくさくなる たとえば SaaS で考えるべきことは多い テナント分離は SaaS 開発の基礎中の基礎︕︕︕

Slide 9

Slide 9 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaS 開発/運⽤のポイント - 1 • テナント サービスの契約をする顧客組織の単位。会社であったり⼀部⾨であったり特定の団体であったり実 際の組織はいろいろある。 • サイロ、プール、ブリッジモデル(、ハイブリッドモデル) リソースの共有範囲を表す。後述の項⽬に合わせて検討が必要。 • SaaSにおける認証と認可 ユーザの認証とともにそのユーザがどのテナントに属しているかという認証、ユーザ単位・テナント単位 両⽅の観点から認可をする必要がある。契約している料⾦プランも関係してくる。 • テナント分離 ⾃⾝のテナント以外にアクセスできないようにマルチテナントにおいて分離は必須になる。コスト、運 ⽤効率、コンプライアンス、展開モデルによって検討する必要がある • データーパーティショニング テナント分離とともに、特にデータ(データベースやストレージなど)をどのように分割していくのかを考 える必要がある

Slide 10

Slide 10 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaS 開発/運⽤のポイント - 2 • ノイジーネイバー テナント間でリソース共有していると、とあるユーザのリソース消費が他のユーザの体験(特に性 能)に影響を与えるので考える必要がある • テナントオンボーディング 新しいテナント(顧客)契約時に、そのテナントに関連する全てのリソースを⾃動的にプロビジョニン グする必要がある。 • テナントティアー 多種多様なお客様に対応するため、料⾦プランとセットで機能や利⽤量、また信頼性まで差をつけ て提供することにより、運⽤負荷を適切に分散する • メータリングとビリング 料⾦プランの内容によっては、利⽤量の計測が必須になる。また、その利⽤量をベースに利⽤料⾦ を確定し請求処理を⾏うことが必要。これらも極⼒⾃動化することによりスケールできるようになる。 • テナントアクティビティの収集と分析 SaaSは継続的改善が前提になるため、⼤量のユーザの利⽤状況からインサイトを得て改善を進め ていく必要がある。また、テナント横串でのアクティビティを分析して新たなベストプラクティスを⾒つけ、 新しい価値として実装をしていくことも重要。

Slide 11

Slide 11 text

© 2023 Anti-Pattern Inc. All rights reserved. テナント分離の形

Slide 12

Slide 12 text

© 2023 Anti-Pattern Inc. All rights reserved. テナント分離の種類例 サイロモデル プールモデル ブリッジモデル ハイブリッドモデル

Slide 13

Slide 13 text

© 2023 Anti-Pattern Inc. All rights reserved. サイロモデル DB サーバ DB サーバ DB サーバ SaaS テナントA⽤ テナントB⽤ テナントC⽤ サイロモデルでも、コードベースは1つに保つ (会社ごとのカスタマイズは⾏わない)

Slide 14

Slide 14 text

© 2023 Anti-Pattern Inc. All rights reserved. プールモデル DB サーバ SaaS テナントA, B, C など共⽤ 共⽤インフラでも適切な論理テナント分離を考える

Slide 15

Slide 15 text

© 2023 Anti-Pattern Inc. All rights reserved. ブリッジモデル DB DB DB SaaS テナントA⽤ テナントB⽤ テナントC⽤ サーバ 分離した部分を意識しないでよいプログラミングを⼼がける

Slide 16

Slide 16 text

© 2023 Anti-Pattern Inc. All rights reserved. ブリッジモデル(その2) SaaS テナントA⽤ テナントB⽤ テナントC⽤ 分離する部分は様々 サーバ サーバ サーバ DB

Slide 17

Slide 17 text

© 2023 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤

Slide 18

Slide 18 text

© 2023 Anti-Pattern Inc. All rights reserved. サイロモデル DB サーバ DB サーバ DB サーバ SaaS テナントA⽤ テナントB⽤ テナントC⽤ バージョンアップやセキュリティパッチ、 DBスキーマ変更など 全てのテナントを同じ状態に保つのにも 労⼒を必要とする

Slide 19

Slide 19 text

© 2023 Anti-Pattern Inc. All rights reserved. プールモデル DB サーバ SaaS テナントA, B, C など共⽤ ノイジーネイバー問題(性能問題)や セキュリティ対応に労⼒がかかる

Slide 20

Slide 20 text

© 2023 Anti-Pattern Inc. All rights reserved. ブリッジモデル DB DB DB SaaS テナントA⽤ テナントB⽤ テナントC⽤ サーバ 構成が複雑になり、どこで サイロとプールをわけるかが難しい

Slide 21

Slide 21 text

© 2023 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤ 各モデルの⻑所・短所が⼊り交じって 複雑になり、より運⽤に労⼒がかかる

Slide 22

Slide 22 text

新規 SaaS 構築の時のテナント分離検討例 市場規模の テナント数が数⼗ セキュリティや コンプライアンスで 物理分離が必須 新規SaaS開発 検討の流れ例 シングルテナント SaaS (サイロモデル) マルチテナント SaaS (プールモデル) 実アプリケーションを 利⽤した検証や 提供が最優先 リリース最優先 なるべくシンプルに 迅速にリリースし SaaS のニーズ検証したい マルチテナント SaaS (ブリッジモデル) 運⽤負荷の最⼤値が ⾒えている データ分離必須 テナント分離必須 テナントごとの 性能要求がシビア テナント間での コミュニケーションが 主な機能

Slide 23

Slide 23 text

テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離 (主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで

Slide 24

Slide 24 text

テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離 (主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで ビジネスサイドとテックサイド(エンジニア)で よく話し合って決めましょう エンジニアに丸投げすると、プール(⾵)モデルになる可能性が⾼いです

Slide 25

Slide 25 text

© 2023 Anti-Pattern Inc. All rights reserved. データ分離(パーティショニング)のいろいろ(RDB編) テナント1 テナント2 テナント3 テナント4 テナントID テナント5 テナント テナント テナント テナント テナント テナント テナント データベース分離 スキーマ(orテーブル)分離 ⾏分離 セキュリティ要件と性能 運⽤負荷などのバランスで選定

Slide 26

Slide 26 text

© 2023 Anti-Pattern Inc. All rights reserved. 弊社SaaS SaaSus Platform はどう分離しているのか︖

Slide 27

Slide 27 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要 弊社がもつ SaaS 開発/運⽤ のナレッジを集約し SaaS 作りと運⽤・販売のサポートをする SaaS を提供する

Slide 28

Slide 28 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要 認証・認可 請求 料⾦プラン コミュニケーション セキュリティ 利⽤量計測 x テナント管理 分析 業務ロジック 業務ナレッジ ベストプラクティス SaaSの直接的な価値を⽣む ここの実装に集中︕ DB分離 事業モニタリング ここは外部の サービスに まかせるのじゃ

Slide 29

Slide 29 text

© 2023 Anti-Pattern Inc. All rights reserved. 普通の SaaS 開発例 お客様 SaaS VPC SaaS利⽤者 SaaS提供者 構築・運⽤ SaaSを利⽤ 認証・認可、テナント管理、 料⾦プラン、請求、 各種管理画⾯など SaaS で必要な要素も 合わせて実装する Amazon ECS Amazon RDS

Slide 30

Slide 30 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platformを使った SaaS 開発例 お客様 SaaS VPC SaaS利⽤者 SaaS提供者 ログイン画⾯など 共通画⾯は SaaSus Platform の機能を利⽤ SaaS本来の部分の利⽤ 管理画⾯など 共通画⾯は SaaSus Platform の機能を利⽤ SaaS本来の部分を作る API Endpoint 認可、請求など 共通機能は API/SDK を利⽤ SDK イベントを通知し リアルタイムに 処理が可能 Amazon ECS Amazon RDS AWS Lambda Amazon EventBridge

Slide 31

Slide 31 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platformを使った SaaS 開発例 お客様 SaaS VPC SaaS利⽤者 SaaS提供者 ログイン画⾯など 共通画⾯は SaaSus Platform の機能を利⽤ SaaS本来の部分の利⽤ 管理画⾯など 共通画⾯は SaaSus Platform の機能を利⽤ SaaS本来の部分を作る API Endpoint 認可、請求など 共通機能は API/SDK を利⽤ SDK イベントを通知し リアルタイムに 処理が可能 Amazon ECS Amazon RDS AWS Lambda Amazon EventBridge この中は どうなってるのか な︖

Slide 32

Slide 32 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platform の分離例 Core API AWS Account API Endpoint API Containers (Auto Scale) Auth Module Billing Module Pricing Module Marketplace Module EventBridge Module Shared Storage Shared DB Tenant AWS Account for SaaSus Web Console Contents Management AWS Account Identity Provider AWS Control Tower Amazon EventBrdige Tenant DB Tenant Web Contents Tenant AWS Account for Tenant2 Identity Provider Tenant DB Tenant Web Contents Tenant AWS Account for Tenant1 Identity Provider Tenant DB Tenant Web Contents

Slide 33

Slide 33 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platform の分離例 Core API AWS Account API Endpoint API Containers (Auto Scale) Auth Module Billing Module Pricing Module Marketplace Module EventBridge Module Shared Storage Shared DB Tenant AWS Account for SaaSus Web Console Contents Management AWS Account Identity Provider AWS Control Tower Amazon EventBrdige Tenant DB Tenant Web Contents Tenant AWS Account for Tenant2 Identity Provider Tenant DB Tenant Web Contents Tenant AWS Account for Tenant1 Identity Provider Tenant DB Tenant Web Contents ブリッジモデルを採⽤ APIコンピュート層はスケールしやすいのでプール型(モジュラモノリス) テナント固有データは、性能・セキュリティを考慮して 各AWSアカウントレベルでサイロ分離 テナントオンボーディングを完全⾃動化することにより運⽤負荷を軽減

Slide 34

Slide 34 text

© 2023 Anti-Pattern Inc. All rights reserved. Conclusion ・技術的にも SaaS ならではの考えることがたくさんある ・その中でも、まずはテナント分離の考え⽅が基本になる ・インフラ、アプリ、開発、運⽤を全部ひっくるめて考える必要がある︕ ・なので SaaS は作った⼈が運⽤するべし︕ You built it, you run it! ・さらになので、お客様からのフィードバックを開発・運⽤に活かすべし︕ ・(今回はなかったですが)データを製品改善に活かすべし︕ ということで、 SaaS のエンジニアは楽しいですよ︕

Slide 35

Slide 35 text

© 2023 Anti-Pattern Inc. All rights reserved. SaaS開発ガイド【基礎編】も合わせてご覧ください 1.SaaSにおけるソフトウェア開発の重要性 - SaaS提供事業者の責任 - 成⻑ステージ毎に考慮すべきSaaS運営のポイント - SaaS⽴ち上げ前に知っておきたい開発の進め⽅ 2.SaaSにおけるソフトウェア開発の勘所 SaaS⽴ち上げ前に知っておきたい開発の進め⽅ - BizDevOps - MVP / プロトタイプ SaaS開発時に考慮すべき6つのポイント 1. テナントという概念の考慮 2. 迅速なサービス改善を実現するアーキテクチャの検討 3. セキュリティの強化 4. 拡張性の担保 5. 料⾦プランの設計と請求⽅法の確⽴ 6. データの活⽤ https://saasus.io/resource/e-book/saas-dev-guide-basic SaaS開発ガイド【基礎編】 続編(テナント編)も近⽇公開予定です︕

Slide 36

Slide 36 text

© 2023 Anti-Pattern Inc. All rights reserved. “⽇本のソフトウェアエンジニアを 憧れの職業へ”