Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
SaaS Architektura Multitenant
Michał Mac Architekt, Comarch MCPD Win Developer, MCITP DBA, Developer
2
Agenda
3
Agenda Długi ogon/SaaS Reguły biznesowe Rozszerzalność danych
Pojemnik na dane Sql Server
4
Długi ogon
9
Jak zrealizować ideę długiego ogona w IT?
$ / Klient Najwięksi klienci Co jeśli obniżymy koszt wyprodukowania i dostarczenia oprogramowania? Typowi klienci Nowy rynek >> aktualny rynek Rynek (aktualnie) poza zasięgiem
11
Za co płaci klient?
12
Za co płaci klient?
13
Sprzęt u dostawcy: efekt skali
Dostawca może zainwestować w olbrzymie Data-Center
14
Sprzęt u dostawcy: efekt skali
Microsoft Data Center (Chicago, IL) Koszt inwestycji $500m, wielkość 10 boisk football
15
SaaS – zyski użytkownika
Nie kupuje sprzętu Nie instaluje oprogramowania Nie ponosi dużego kosztu na starcie Model abonamentowy Reklamy Większe możliwości sprzętowe producenta – high availability
16
SaaS – zyski producenta
Ciągłe i stałe przychody Lepsza ochrona własności intelektualnej Aktualizacje aplikacji odbywają się centralnie
17
Za co płaci klient?
18
Za co płaci klient?
19
SaaS – modele dojrzałości
20
SaaS – modele dojrzałości
Przykład baz.
21
SaaS – modele dojrzałości
22
SaaS – modele dojrzałości
23
SaaS – modele dojrzałości
24
3 własności Konfigurowalność Multitenancy Skalowalność
25
SaaS
26
Przykładowa aplikacja
27
Założenia Wymienialne reguły biznesowe Rozszerzalny model danych
Konfigurowalny interfejs Multitenancy
28
Demo
30
Założenia Wymienialne reguły biznesowe Rozszerzalny model danych
Konfigurowalny interfejs Multitenancy
31
Reguły biznesowe
33
Demo z regułami nie zostało udostępnione, gdyż jest zrobione z użyciem komercyjnego kodu.
Natomiast dobra informacja jest taka, że powstaje open sourcowa implementacja podobnej biblioteki. Zapraszam na code.google.com/p/businessframework/ Znajduje się tam dużo przykładów w formie unit testów: reguły biznesowe, reguły walidacyjne, pisane C#, jak i prostym językiem – Formula, oraz kilka innych rzeczy. Zapraszam do współpracy. Demo
34
Różne wymagania biznesowe
Total = Quantity * ProductPrice Stacja benzynowa Quantity = Total / ProductPrice (z dokładnością do obsługi dzielenia przez 0)
35
Reguły biznesowe Reużywalne Automatyczna detekcja zależności
Expression Trees Reguły walidacyjne Możliwość dodawania z zewnątrz Prosty tekstowy język – Formula Antlr + Expression Trees
36
Rozszerzalność danych
38
Rozszerzalność danych
Realizacja Słownik ExpandoObject - .Net 4.0 Dynamiczny interfejs użytkownika Metadane per tenant Same dane nie wystarczą. Wymagana możliwość używania w regułach biznesowych Baza danych – w następnej części Słownik Expando object Metadane WPF supportuje bindowanie do indexera string, Silverlight nie, ale da się to zrobić
39
Warstwa danych
40
Baza danych Osobne bazy 1/2 poziom dojrzałości
+ możliwość pełnej customizacji per tenant + backup + premium approach + łatwa implementacja - Aktualizacja licencje wymagany sprzęt: 1000 baz, każda po 2 mb, długi czas odtwarzania baz po restarcie servera, a co za tym idzie być może złamane SLA
41
Osobne bazy Prosta rozszerzalność Prosta strategia backupów
Bezpieczeństwo, izolacja Bankowość, branża medyczna Większe koszty – zużyte zasoby Auto close może zwiększyć ten limit, ale pogarsza czas dostępu Premiun approach
42
Baza danych Wspólna baza, osobne schematy
43
Wspólna baza, osobne schematy
Łatwa implementacja i rozszerzalność Średni poziom izolacji Utrudniony backup/restore Niższe koszty, bo więcej tenantów na jednej bazie Operacje DDL, które blokują katalog systemowy + prosta customizacja per tenant - operacje ddl, które powodują ogromne lokowanie w katalogach systemowym, przykład userów w bazie = 20 sek. Dodanie następnego
44
Baza danych Wspólna baza, wspólny schemat + brak operacji ddl
+ licencje, sprzęt, odtwarzanie + możliwość obsłużenia większej liczby tenantów + high availability - Trudniejsza implementacja
45
Wspólna baza, wspólny schemat
Najniższe koszty sprzętu per tenant Możliwość dostarczenia drogich mechanizmów wysokiej dostępności po korzystnych cenach. Problemy z backupe/restorem Większe koszty produkcji aplikacji Należy zapewnić bezpieczeństwo, nawet w przypadku nieprzewidzianego błędu Tenant Data Encryption Tenant View Filter Możliwość partycjonowania per tenant
46
Porównanie
47
Warstwa danych Realizacja Trusted Database Connections
Tenant View Filter
48
Wymagania Framework agnostic Transparentność Bezpieczeństwo
Ewentualny błąd programisty nie może ujawnić danych innego Używanie pooli połączeń Wydajność
49
DAL
50
Baza danych CREATE USER TenantA WITHOUT LOGIN
WITH DEFAULT_SCHEMA = Secured; GRANT SELECT, EXECUTE, INSERT, UPDATE, DELETE ON SCHEMA::[Secured] TO TenantA; Sposób podobny do security zrealizowane na bazie danych Wcześniejsza alokacja użytkowników – inaczej problem z dodawaniem: użytkowników – 20 sek. przebudowa wew. cacha userów sql servera
51
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, );
52
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, ); DATABASE_PRINCIPAL_ID(), a nie USER_ID(), bo ta druga obsługuje tylko ok. 32 tys. obsolute
53
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, );
54
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, );
55
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, );
56
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 ); Klucz obcy składa się z kolumny tenant by łatwiej było migrować dane Zapewnia nam to izolację pomiędzy tenantami, żaden nie może się odwołać do danych innego.
57
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 ); Podobnie z UNIQUE + Indeksy Można użyć partycjonawania tabel jak i indeksów, gdy mamy dużych klientów
58
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.vProducts AS SELECT ProductId, Name, Price, WarehouseId FROM Products WHERE TenantId = DATABASE_PRINCIPAL_ID(); Dobrze umieścić widok w osobnym schemacie, bo łatwiej nadaje się uprawnienia Mechaniczna transformacja – t4, albo użycie mangement view, zależnie od podejścia
59
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.vProducts AS SELECT ProductId, Name, Price, WarehouseId FROM Products WHERE TenantId = DATABASE_PRINCIPAL_ID(); Dobrze umieścić widok w osobnym schemacie, bo łatwiej nadaje się uprawnienia Mechaniczna transformacja – t4, albo użycie mangement view, zależnie od podejścia
60
Baza danych EXECUTE AS USER = 'TenantA'; SELECT * FROM vProducts;
INSERT vProducts VALUES('Basketball', 55, 2);
61
Baza danych CREATE PROC Secured.GetProductsWithState @State INT AS
BEGIN ... END
64
ConnectionPool DEMO
65
Rozszerzalność Modelu Danych
66
Rozszerzalność danych
Dodawanie kolumn Tylko w osobnych bazach albo osobnych schematach
67
Dodawanie kolumn Tylko osobne bazy/osobny schemat Prostota
Operacje DDL Nie potrzeba metadanych, ale może być trudniejsze do realizacji po stronie aplikacji Osobne codebase’y
68
Rozszerzalność danych
Zaalokowane pola
69
Zaalokowane pola Predefiniowane pola
np. 3 stringi 2 liczby Niepotrzebne zużycie miejsca, gdy któryś z tenantów nie używa pola SPARE Columns A co gdy tenant potrzebuje 4 stringi? Wariacje: Trzymanie danych jako string + metadane typu Skomplikowane, ale podobnego mechanizmu używa SalesForce
70
Rozszerzalność danych
Klucz wartość Kiepska wydajność
71
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
72
Rozszerzalność danych
Xml Słabe wsprawcie narzedzi, np. raportów, etc. Data centric appliacations, mała interakcja obiektów, prosta logika
73
Xml Słabe wsparcie narzędzi, np. raportów
Dobre, gdy konfiguracja jest wymagana na poziomie instancji encji Dobre dla danych „rzadkich” Prosta implementacja
74
SalesForce Trudne, wymagająca implementacja, ale super wydajne i super elastyczne
75
Poza SaaS PaaS - Platform As A Service HaaS - Hardware As A Service
IaaS - Infrastructure As A Service “Blue Cloud” by IBM Simple Storage Service (Amazon S3), Elastic Computing Cloud (Amazon EC2) Google computing services Microsoft Azure
76
Podsumowanie SaaS Wymaga obniżenia kosztu produkcji
4 modele dojrzałości Wyzwania dla architektury: Konfiguracja – reguły, elastyczny model danych Multitenancy – jedna instancja, wielu klientów Skalowalność
77
Pytania
78
Linki http://www.sztronka.com
79
michal.bartosz.mac@gmail.com www.sztronka.com
Dziękuję
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.