SaaS - Architektura Multitenant

79
SaaS Architektura Multitenant Michał Mac Architekt MCPD Win Developer, MCITP DBA, Developer

description

Prezentacja poświęcona architekturze w modelu usługowym z praktycznymi przykładami implementacji.

Transcript of SaaS - Architektura Multitenant

Page 1: SaaS - Architektura Multitenant

SaaSArchitektura Multitenant

Michał MacArchitektMCPD Win Developer, MCITP DBA, Developer

Page 2: SaaS - Architektura Multitenant

Agenda

Page 3: SaaS - Architektura Multitenant

Agenda

Długi ogon/SaaSReguły biznesoweRozszerzalność danychPojemnik na dane

Sql Server

Page 4: SaaS - Architektura Multitenant

Długi ogon

Page 5: SaaS - Architektura Multitenant
Page 6: SaaS - Architektura Multitenant
Page 7: SaaS - Architektura Multitenant
Page 8: SaaS - Architektura Multitenant
Page 9: SaaS - Architektura Multitenant

Jak zrealizować ideę długiego ogona w IT?

Najwięksi klienci

$ / Klient

Typowi klienci

Rynek (aktualnie) poza zasięgiemNowy rynek >> aktualny rynek

Co jeśli obniżymy koszt wyprodukowania i dostarczenia oprogramowania?

Page 10: SaaS - Architektura Multitenant
Page 11: SaaS - Architektura Multitenant

Za co płaci klient?

Page 12: SaaS - Architektura Multitenant

Za co płaci klient?

Sprzęt Ludzie Software0

1

2

3

4

5

6

7

Page 13: SaaS - Architektura Multitenant

Sprzęt u dostawcy: efekt skali

Dostawca może zainwestować w olbrzymie Data-Center

Page 14: SaaS - Architektura Multitenant

Sprzęt u dostawcy: efekt skali

Microsoft Data Center (Chicago, IL) Koszt inwestycji $500m, wielkość 10 boisk football

Page 15: SaaS - Architektura Multitenant

SaaS – zyski użytkownika

Nie kupuje sprzętuNie instaluje oprogramowaniaNie ponosi dużego kosztu na starcie

Model abonamentowyReklamy

Page 16: SaaS - Architektura Multitenant

SaaS – zyski producenta

Ciągłe i stałe przychodyLepsza ochrona własności intelektualnejAktualizacje aplikacji odbywają się centralnie

Page 17: SaaS - Architektura Multitenant

Za co płaci klient?

Sprzęt Ludzie Software0

1

2

3

4

5

6

7

Page 18: SaaS - Architektura Multitenant

Za co płaci klient?

Sprzęt Ludzie Software0

1

2

3

4

5

6

7

Page 19: SaaS - Architektura Multitenant

SaaS – modele dojrzałości

Page 20: SaaS - Architektura Multitenant

SaaS – modele dojrzałości

Page 21: SaaS - Architektura Multitenant

SaaS – modele dojrzałości

Page 22: SaaS - Architektura Multitenant

SaaS – modele dojrzałości

Page 23: SaaS - Architektura Multitenant

SaaS – modele dojrzałości

Page 24: SaaS - Architektura Multitenant

3 własności

KonfigurowalnośćMultitenancySkalowalność

Page 25: SaaS - Architektura Multitenant

SaaS

Page 26: SaaS - Architektura Multitenant

Przykładowa aplikacja

Page 27: SaaS - Architektura Multitenant

Założenia

Wymienialne reguły biznesoweRozszerzalny model danychKonfigurowalny interfejsMultitenancy

Page 28: SaaS - Architektura Multitenant

DEMO

Page 29: SaaS - Architektura Multitenant
Page 30: SaaS - Architektura Multitenant

Założenia

Wymienialne reguły biznesoweRozszerzalny model danychKonfigurowalny interfejsMultitenancy

Page 31: SaaS - Architektura Multitenant

Reguły biznesowe

Page 32: SaaS - Architektura Multitenant
Page 33: SaaS - Architektura Multitenant

DEMO

Page 34: SaaS - Architektura Multitenant

Różne wymagania biznesowe

Total = Quantity * ProductPrice

Stacja benzynowaQuantity = Total / ProductPrice

(z dokładnością do obsługi dzielenia przez 0)

Page 35: SaaS - Architektura Multitenant

Reguły biznesowe

ReużywalneAutomatyczna detekcja zależności

Expression TreesReguły walidacyjneMożliwość dodawania z zewnątrzProsty tekstowy język – Formula

Antlr + Expression Trees

Page 36: SaaS - Architektura Multitenant

Rozszerzalność danych

Page 37: SaaS - Architektura Multitenant
Page 38: SaaS - Architektura Multitenant

Rozszerzalność danych

RealizacjaSłownikExpandoObject - .Net 4.0

Dynamiczny interfejs użytkownikaMetadane per tenant

Same dane nie wystarczą. Wymagana możliwość używania w regułach biznesowychBaza danych – w następnej części

Page 39: SaaS - Architektura Multitenant

Warstwa danych

Page 40: SaaS - Architektura Multitenant

Baza danych

Osobne bazy

Page 41: SaaS - Architektura Multitenant

Osobne bazy

Prosta rozszerzalnośćProsta strategia backupówBezpieczeństwo, izolacja

Bankowość, branża medycznaWiększe koszty – zużyte zasoby

Auto close może zwiększyć ten limit, ale pogarsza czas dostępu

Premiun approach

Page 42: SaaS - Architektura Multitenant

Baza danych

Wspólna baza, osobne schematy

Page 43: SaaS - Architektura Multitenant

Wspólna baza, osobne schematy

Łatwa implementacja i rozszerzalnośćŚredni poziom izolacjiUtrudniony backup/restoreNiższe koszty, bo więcej tenantów na jednej bazieOperacje DDL, które blokują katalog systemowy

Page 44: SaaS - Architektura Multitenant

Baza danych

Wspólna baza, wspólny schemat

Page 45: SaaS - Architektura Multitenant

Wspólna baza, wspólny schemat

Najniższe koszty sprzętu per tenantMożliwość dostarczenia drogich mechanizmów wysokiej dostępności po korzystnych cenach.

Problemy z backupe/restoremWiększe koszty produkcji aplikacji

Należy zapewnić bezpieczeństwo, nawet w przypadku nieprzewidzianego błędu

Tenant Data EncryptionTenant View Filter

Możliwość partycjonowania per tenant

Page 46: SaaS - Architektura Multitenant

Porównanie

Page 47: SaaS - Architektura Multitenant

Warstwa danych

Realizacja

Page 48: SaaS - Architektura Multitenant

Wymagania

Framework agnosticTransparentnośćBezpieczeństwo

Ewentualny błąd programisty nie może ujawnić danych innego

Używanie pooli połączeńWydajność

Page 50: SaaS - Architektura Multitenant

Baza danych

CREATE USER TenantA WITHOUT LOGIN WITH DEFAULT_SCHEMA = Secured;

GRANT SELECT, EXECUTE, INSERT, UPDATE, DELETEON SCHEMA::[Secured] TO TenantA;

Page 51: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

ProductId INT NOT NULL IDENTITY(1,1) PRIMARY KEY,Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL REFERENCES Warehouses,

);

Page 52: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1) PRIMARY KEY,Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL REFERENCES Warehouses,

);

Page 53: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1) PRIMARY KEY,Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL REFERENCES Warehouses,

);

Page 54: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1),PRIMARY KEY(TenantId, ProductId),Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL REFERENCES Warehouses,

);

Page 55: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1),PRIMARY KEY(TenantId, ProductId),Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL REFERENCES Warehouses,

);

Page 56: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1),PRIMARY KEY(TenantId, ProductId),Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL,FOREIGN KEY ( TenantId, WarehouseId )

REFERENCES Warehouses);

Page 57: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1),PRIMARY KEY(TenantId, ProductId),Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL,FOREIGN KEY ( TenantId, WarehouseId )

REFERENCES Warehouses);

Page 58: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1),PRIMARY KEY(TenantId, ProductId),Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL,FOREIGN KEY ( TenantId, WarehouseId )

REFERENCES Warehouses);CREATE VIEW Secured.vProductsAS

SELECT ProductId, Name, Price, WarehouseIdFROM ProductsWHERE TenantId = DATABASE_PRINCIPAL_ID();

Page 59: SaaS - Architektura Multitenant

Baza danych

CREATE TABLE Products(

TenantId INT NOT NULL DEFAULT (DATABASE_PRINCIPAL_ID()),

ProductId INT NOT NULL IDENTITY(1,1),PRIMARY KEY(TenantId, ProductId),Name NVARCHAR(64) NOT NULL,Price DECIMAL(19,4) NOT NULL,WarehouseId INT NOT NULL,FOREIGN KEY ( TenantId, WarehouseId )

REFERENCES Warehouses);CREATE VIEW Secured.vProductsAS

SELECT ProductId, Name, Price, WarehouseIdFROM ProductsWHERE TenantId = DATABASE_PRINCIPAL_ID();

Page 60: SaaS - Architektura Multitenant

Baza danych

EXECUTE AS USER = 'TenantA';

SELECT * FROM vProducts;INSERT vProducts VALUES('Basketball', 55, 2);

Page 61: SaaS - Architektura Multitenant

Baza danych

CREATE PROC Secured.GetProductsWithState@State INT

ASBEGIN...END

Page 62: SaaS - Architektura Multitenant
Page 63: SaaS - Architektura Multitenant
Page 64: SaaS - Architektura Multitenant

DEMO

Page 65: SaaS - Architektura Multitenant

Rozszerzalność Modelu Danych

Page 66: SaaS - Architektura Multitenant

Rozszerzalność danych

Dodawanie kolumn

Page 67: SaaS - Architektura Multitenant

Dodawanie kolumn

Tylko osobne bazy/osobny schematProstotaOperacje DDLNie potrzeba metadanych, ale może być trudniejsze do realizacji po stronie aplikacji

Osobne codebase’y

Page 68: SaaS - Architektura Multitenant

Rozszerzalność danych

Zaalokowane pola

Page 69: SaaS - Architektura Multitenant

Zaalokowane pola

Predefiniowane polanp. 3 stringi 2 liczby

Niepotrzebne zużycie miejsca, gdy któryś z tenantów nie używa pola

SPARE ColumnsA co gdy tenant potrzebuje 4 stringi?Wariacje:

Trzymanie danych jako string + metadane typu

Skomplikowane, ale podobnego mechanizmu używa SalesForce

Page 70: SaaS - Architektura Multitenant

Rozszerzalność danych

Klucz wartość

Page 71: SaaS - Architektura Multitenant

Klucz wartość

Dane trzymane są nie w jednym wierszu, ale w kilku

brak ograniczenia na liczbę dodatkowych pól

Gorsza wydajność, niż w Zaalokowanych polach

występuje dużo randomowych operacji w bazie danych

Page 72: SaaS - Architektura Multitenant

Rozszerzalność danych

Xml

Page 73: SaaS - Architektura Multitenant

Xml

Słabe wsparcie narzędzi, np. raportówDobre, gdy konfiguracja jest wymagana na poziomie instancji encjiDobre dla danych „rzadkich”Prosta implementacja

Page 74: SaaS - Architektura Multitenant

SalesForce

Page 75: SaaS - Architektura Multitenant

Poza SaaS

PaaS - Platform As A ServiceHaaS - Hardware As A ServiceIaaS - Infrastructure As A Service“Blue Cloud” by IBMSimple Storage Service (Amazon S3),Elastic Computing Cloud (Amazon EC2)Google computing servicesMicrosoft Azure

Page 76: SaaS - Architektura Multitenant

Podsumowanie

SaaSWymaga obniżenia kosztu produkcji4 modele dojrzałościWyzwania dla architektury:

Konfiguracja – reguły, elastyczny model danychMultitenancy – jedna instancja, wielu klientówSkalowalność

Page 77: SaaS - Architektura Multitenant

Pytania

Page 78: SaaS - Architektura Multitenant

Linki

http://www.sztronka.com http://code.google.com/p/businessframework/http://www.salesforce.com/au/assets/pdf/Force.com_Multitenancy_WP_101508.pdfhttp://msdn.microsoft.com/en-us/library/aa479086.aspxhttp://www.antlr.org/