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

テナント分離⽅式の使い分けとバランス (SaaS Engineering Meetup キック...

テナント分離⽅式の使い分けとバランス (SaaS Engineering Meetup キックオフイベント)

YAGASAKI Akihiro

August 23, 2023
Tweet

More Decks by YAGASAKI Akihiro

Other Decks in Technology

Transcript

  1. © 2023 Anti-Pattern Inc. All rights reserved. テナント分離⽅式の使い分けとバランス 2023/08/23 於

    SaaS Engineering Meetup キックオフイベント 株式会社アンチパターン ⽮ヶ崎哲宏
  2. ⾃⼰紹介 2 ⽮ヶ崎 哲宏(Akihiro YAGASAKI) 株式会社アンチパターン 取締役 CTO兼COO 役割︓⽇本のソフトウェアエンジニアを憧れの職業に するためのいろいろ

    経歴︓アマゾン ウェブサービス ジャパン にて SaaSシニアパートナーソリューションアーキテクト Webメディア/SaaSベンダーにて技術責任者ボードメンバー ⼤⼿SIerグループ会社にて情シス責任者 アニメソングのコーラス など 2022, 2023 Japan AWS Top Engineers (Software) 1975年⽣まれ
  3. © 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年間かけて学びデジタルネイティブ⼈材を輩出 ハイスペックエンジニア特化型マッチングサービス • 優秀なエンジニアと、⾼付加価値/⾼単価な案件を依頼 したい企業のマッチングサービス 会社概要
  4. © 2023 Anti-Pattern Inc. All rights reserved. SaaS で考えるべきことは多い 認証・認可

    請求 料⾦プラン 新機能追加 セキュリティ 可⽤性 性能 利⽤量計測 ユーザ体験 分析 移⾏
  5. © 2023 Anti-Pattern Inc. All rights reserved. x テナント︕ 認証・認可

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

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

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

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

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

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

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

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

    テナントB⽤ テナントC⽤ 分離する部分は様々 サーバ サーバ サーバ DB
  14. © 2023 Anti-Pattern Inc. All rights reserved. ハイブリッドモデル DB サーバ

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

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

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

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

    DB サーバ SaaS テナントA, B など共⽤ テナントC専⽤ 各モデルの⻑所・短所が⼊り交じって 複雑になり、より運⽤に労⼒がかかる
  19. 新規 SaaS 構築の時のテナント分離検討例 市場規模の テナント数が数⼗ セキュリティや コンプライアンスで 物理分離が必須 新規SaaS開発 検討の流れ例

    シングルテナント SaaS (サイロモデル) マルチテナント SaaS (プールモデル) 実アプリケーションを 利⽤した検証や 提供が最優先 リリース最優先 なるべくシンプルに 迅速にリリースし SaaS のニーズ検証したい マルチテナント SaaS (ブリッジモデル) 運⽤負荷の最⼤値が ⾒えている データ分離必須 テナント分離必須 テナントごとの 性能要求がシビア テナント間での コミュニケーションが 主な機能
  20. テナント分離モデルごとの特徴 サイロモデル プールモデル ブリッジモデル ・ユーザ認証 ・テナント識別 ・データベース切替 ・運⽤コスト ・複雑度 ・テナント分離

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

    (主にセキュリティと性能) 不要な場合あり 不要 不要 ⼤ ⼩ ⾼ 必要 必要 不要 ⼩ 中 ⽐較的⼩ 必要 必要 必要 中 ⼤ 中 アプリケーションで ビジネスサイドとテックサイド(エンジニア)で よく話し合って決めましょう エンジニアに丸投げすると、プール(⾵)モデルになる可能性が⾼いです
  22. © 2023 Anti-Pattern Inc. All rights reserved. データ分離(パーティショニング)のいろいろ(RDB編) テナント1 テナント2

    テナント3 テナント4 テナントID テナント5 テナント テナント テナント テナント テナント テナント テナント データベース分離 スキーマ(orテーブル)分離 ⾏分離 セキュリティ要件と性能 運⽤負荷などのバランスで選定
  23. © 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要

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

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

    お客様 SaaS VPC SaaS利⽤者 SaaS提供者 構築・運⽤ SaaSを利⽤ 認証・認可、テナント管理、 料⾦プラン、請求、 各種管理画⾯など SaaS で必要な要素も 合わせて実装する Amazon ECS Amazon RDS
  26. © 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
  27. © 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 この中は どうなってるのか な︖
  28. © 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
  29. © 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アカウントレベルでサイロ分離 テナントオンボーディングを完全⾃動化することにより運⽤負荷を軽減
  30. © 2023 Anti-Pattern Inc. All rights reserved. Conclusion ・技術的にも SaaS

    ならではの考えることがたくさんある ・その中でも、まずはテナント分離の考え⽅が基本になる ・インフラ、アプリ、開発、運⽤を全部ひっくるめて考える必要がある︕ ・なので SaaS は作った⼈が運⽤するべし︕ You built it, you run it! ・さらになので、お客様からのフィードバックを開発・運⽤に活かすべし︕ ・(今回はなかったですが)データを製品改善に活かすべし︕ ということで、 SaaS のエンジニアは楽しいですよ︕
  31. © 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開発ガイド【基礎編】 続編(テナント編)も近⽇公開予定です︕