Windows Azure Multi-tenant applicatie Bouwen van een multi-tenant applicatie in de praktijk 1.

Slides:



Advertisements
Verwante presentaties
KWALITEITSZORG november 2012
Advertisements

Voorrangsregels bij rekenen (2)
Rekenen met procenten Rekenen met procenten.
Wat was toen het grootste het grootste probleem van de van de FOD?
Presentatie cliëntenonderzoek. Algemeen Gehouden in december 2013 (doorlopend tot eind januari) DoelgroepVerzondenOntvangen% LG wonen en dagbesteding.
HM-ES-th2 Les 9 en 10 Electronic System Level Design and Verification.
NEDERLANDS WOORD BEELD IN & IN Klik met de muis
1 Resultaten marktonderzoek RPM Zeist, 16 januari 2002 Door: Olga van Veenendaal, medew. Rothkrans Projectmanagement.
Agenda Blok 1 - Evolutie van Cloud Computing
November 2013 Opinieonderzoek Vlaanderen – oktober 2013 Opiniepeiling Vlaanderen uitgevoerd op het iVOXpanel.
Uitgaven aan zorg per financieringsbron / /Hoofdstuk 2 Zorg in perspectief /pagina 1.
Atos, Atos and fish symbol, Atos Origin and fish symbol, Atos Consulting, and the fish itself are registered trademarks of Atos Origin SA. August 2006.
Duurzaamheid en kosten
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
JQuery en ASP.NET Bart De Meyer.
Confidential & Proprietary Copyright © 2007 The Nielsen Company INNOVATIE Tracking Februari 2007.
Ronde (Sport & Spel) Quiz Night !
Copyright © 2008 Tele Atlas. All rights reserved. Zet uw Business Data op de kaart: Locaties in eTOM ®
Programmeren in Java met BlueJ
Mode1. Cijfers  Onvoldoende 5  Matig 6  Voldoende 7  Goed 8  Uitstekend 9  Excellent 10.
ICT Infrastructuur.
Een optimale benutting van vierkante meters Breda, 6 juni 2007.
Kb.1 Ik leer op een goede manier optellen en aftrekken
Tevredenheids- enquête 2012 P. Grouwels Inleiding Mogelijke antwoorden: Zeer goed: 4 sterren ****: volledig tevreden; Goed: 3 sterren ***:
© BeSite B.V www.besite.nl Feit: In 2007 is 58% van de organisaties goed vindbaar op internet, terwijl in 2006 slechts 32% goed vindbaar.
Speaking OData to SharePoint 2010 in a RESTful manner Michaël Hompus | Principal Developer | Winvision.
Nooit meer onnodig groen? Luuk Misdom, IT&T
SQL injections en meer... PERU. web application vulnerabilities Cross Site Scripting (21.5%) SQL Injection (14%) PHP includes (9.5%) Buffer overflows.
Elke 7 seconden een nieuw getal
Server side scripting 1 Webtechnologie Lennart Herlaar.
Oefeningen F-toetsen ANOVA.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
WinFX Overview Martin Tirion Senior Consultant Microsoft Services.
Client Management met ConfigMgr Jannes Alink – Management.
In dit vakje zie je hoeveel je moet betalen. Uit de volgende drie vakjes kan je dan kiezen. Er is er telkens maar eentje juist. Ken je het juiste antwoord,
Foto 65 – wegenis + parking + rechts G01 Foto 66 – G01.
Seminarie 1: Pythagoreïsche drietallen
Hibernate Object relational mapping
Ministerie van de Vlaamse Gemeenschap Afdeling HRM BUE Middenkader 2005 Een eerste verkenning van de resultaten.
Meten BMI Dat is in de veilige zone, want de BMI zit tussen 18,5 en 25
1 © GfK 2012 | Supermarktkengetallen | GFK SUPERMARKTKENGETALLEN ‘Hoe ontwikkelt het aantal kassabonnen zich?’ ‘Wat is de omzet van de supermarkten.
Ben Bruidegom 1 Sequentiële schakelingen Toestand uitgang bepaald door:  ingangen;  vorige toestand uitgang.
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
Inger Plaisier Marjolein Broese van Groenou Saskia Keuzenkamp
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
Help! ‘Niet vorderende ontsluiting’
SAMENWERKING WO EN HBO BIJ AANSLUITINGSONDERZOEK V0-HO Rob Andeweg DAIR 7 en 8 november 2007.
Visual Basic.Net - Overzicht
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  D3EEMS1  programmed I/O: de.
Cijfers Zorg en Gezondheid
EFS Seminar Discriminatie van pensioen- en beleggingsfondsen
Hoe gaat dit spel te werk?! Klik op het antwoord dat juist is. Klik op de pijl om door te gaan!
Eerst even wat uitleg. Klik op het juiste antwoord als je het weet.
Opzet van het onderzoek Merk- en reclamebekendheid
Op reis naar een dierentuin
Web Applicaties Bouwen met Visual Studio .NET
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
Vasten 2013Stellingenspel: Vasten is voor mij...1.
Uitleg scheikundige begrippen
STIMULANS KWALITEITSZORG juni 2014.
De financiële functie: Integrale bedrijfsanalyse©
Dick Dijkstra Azure Technical Specialist Microsoft
Kanters Promo Magazine 1 Juli t.e.m. 31 Augustus Bezoek ook eens onze website/Shop! Like us on facebook: Kanters Haar en Nagelcosmetica.
Culturele Atlas 2004 Gelderland en Overijssel. Culturele Atlas, Enschede ( 76)Apeldoorn ( 92) Zwolle (121)Nijmegen
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
DIGITAL ANALYTICS TOOLS. 2 DIGITALE MEDIA - METEN.
ZijActief Koningslust
Openbaar je talent Service public, talent particulier.
Hoofdstuk 6 – Objectgeoriënteerd Programmeren: Overerving
Transcript van de presentatie:

Windows Azure Multi-tenant applicatie Bouwen van een multi-tenant applicatie in de praktijk 1

Edo van Asseldonk Ordina Microsoft Solutions

3 Agenda Introductie / Architectuur URL strategie / Tenant id Data opslag (SQL Azure, Table Storage) Maatwerk (UI / Business Logica) Cache Access Control Service

4 Multitenancy Definitie

5 …single instance of software serving multiple clients (tenants)… …een enkele softwareinstantie die meerdere klanten bedient…

6 Multitenancy Definitie

7

8 Iedere tenant heeft: eigen data eigen opmaak eigen business logic gemeenschappelijke codebase gemeenschappelijk datamodel Iedere tenant heeft: eigen data eigen opmaak eigen business logic gemeenschappelijke codebase gemeenschappelijk datamodel

9 Architectuur Overview Casus / Demo

10 Architectuur Overview Webrole SQL Azure Table Storage ACS

11 Architectuur Overview Webrole SQL Azure Table Storage ACS

12 Architectuur Overview Eisen: Tenantapplicatie bereikbaar via eigen url Eén database schema Eigen stijl per tenant Self service Share everything

URL Strategie / Tenant id

14 URL Strategie / Tenant id Opties Optie 1: Tenant bepalen a.d.h.v. ingelogde gebruiker Geen referentie naar naam van tenant

15 URL Strategie / Tenant id Opties

16 URL Strategie / Tenant id Opties

17 URL Strategie / Tenant id Opties Optie 2: TenantId in URL

18 URL Strategie / Tenant id Opties Optie 3: Tenant bepalen a.d.h.v. URL

19 URL Strategie / Tenant id Opties Optie 3: Tenant bepalen a.d.h.v. URL > verwijst naar

20 URL Strategie / Tenant id Opties

21 URL Strategie / Tenant id Opties

22 URL Strategie / Tenant id Opties

23 URL Strategie In Windows Azure [MyMultitenantApp].cloudapp.net

24 URL Strategie In Windows Azure [MyMultitenantApp].cloudapp.net [Tenant].cloudapp.net [Tenant].[MyMultitenantApp].cloudapp.net

25 URL Strategie In Windows Azure [MyMultitenantApp].cloudapp.net Domain name: MyMultitenantApp.nl

26 URL Strategie In Windows Azure [MyMultitenantApp].cloudapp.net Domain name: MyMultitenantApp.nl URLs:

Data Database

28 Database Introductie Alle tenants in dezelfde database Twee issues: Limiet aan databasegrootte Limiet aan verwerkingscapaciteit (CPU, I/O etc.)

29 Database Introductie Oplossing: Database splitsen

30 Database Introductie Oplossing: Database splitsen -> SQL Azure Federations

Database Introductie

45 SQL Azure Federations Root database Root DB Root Table1 Root Table2 Root Table…

46 SQL Azure Federations Create federation Member DBRoot DB Root Table1 Root Table2 Root Table…

47 SQL Azure Federations Create tables Member DBRoot DB Root Table1 Root Table2 Root Table… Member Table1 Member Table2 Member Table…

48 SQL Azure Federations Split federation member Member DB Root DB Root Table1 Root Table2 Root Table… Member Table1 Member Table2 Member Table…

49 SQL Azure Federations Split federation member Member DB Root DB Root Table1 Root Table2 Root Table… Member Table1 Member Table2 Member Table…

50 SQL Azure Federations Split federation member Member DB Root DB Root Table1 Root Table2 Root Table… Member Table1 Member Table2 Member Table… Member DB Member Table1 Member Table2 Member Table… Member DB Member Table1 Member Table2 Member Table…

51 SQL Azure Federations Split federation member Root DB Root Table1 Root Table2 Root Table… Member DB Member Table1 Member Table2 Member Table… Member DB Member Table1 Member Table2 Member Table…

52 SQL Azure Federations Voordelen DB Size van max 150 GB -> 75 TB CPU Cores en I/O verveelvoudigd Real-time Geen downtime

53 SQL Azure Federations Voordelen DB Size van max 150 GB -> 75 TB CPU Cores en I/O verveelvoudigd Real-time Geen downtime

54 SQL Azure Federations Voordelen DB Size van max 150 GB -> 75 TB CPU Cores en I/O verveelvoudigd Real-time Geen downtime

55 SQL Azure Federations Voordelen DB Size van max 150 GB -> 75 TB CPU Cores en I/O verveelvoudigd Real-time Geen downtime

56 SQL Azure Federations Kosten Sinds halverwege februari 2012 prijsverlaging. Tot 78% goedkoper. Hoe meer tenants per member database, hoe goedkoper. Eén databaseMeerdere databases FORMAATKOSTENFORMAATKOSTEN 10 GB$45,95 p/m10 x 1 GB10 x $9.99 = $99,90 p/m

57 SQL Azure Federations Kosten Sinds halverwege februari 2012 prijsverlaging. Tot 78% goedkoper. Hoe meer tenants per member database, hoe goedkoper. Eén databaseMeerdere databases FORMAATKOSTENFORMAATKOSTEN 10 GB$45,95 p/m10 x 1 GB10 x $9.99 = $99,90 p/m 50 GB$125,88 p/m10 x 5 GB$259,80 p/m

58 SQL Azure Federations Kosten Sinds halverwege februari 2012 prijsverlaging. Tot 78% goedkoper. Hoe meer tenants per member database, hoe goedkoper. Eén databaseMeerdere databases FORMAATKOSTENFORMAATKOSTEN 10 GB$45,95 p/m10 x 1 GB10 x $9.99 = $99,90 p/m 50 GB$125,88 p/m10 x 5 GB$259,80 p/m 50 GB$125,88 p/m50 x 1 GB$499,50 p/m

59 SQL Azure Federations Kosten Sinds halverwege februari 2012 prijsverlaging. Tot 78% goedkoper. Hoe meer tenants per member database, hoe goedkoper. Eén databaseMeerdere databases FORMAATKOSTENFORMAATKOSTEN 10 GB$45,95 p/m10 x 1 GB10 x $9.99 = $99,90 p/m 50 GB$125,88 p/m10 x 5 GB$259,80 p/m 50 GB$125,88 p/m50 x 1 GB$499,50 p/m 150 GB$225,78 p/m150 x 1 GB$1498,50 p/m

60 SQL Azure Federations Samenwerking met Entity Framework string federationCmdText = "USE FEDERATION tenant_federation (tenantId = [id]) WITH FILTERING=ON, RESET"; ((IObjectContextAdapter)myDatabaseContext).ObjectContext.Connection.Open(); _databaseContext.Database.ExecuteSqlCommand(federationCmdText); var query = from o in _myDatabaseContext.Orders where o.TenantId = id select o;

61 SQL Azure Federations Geen Federations in SQL Server 2008R2 string federationCmdText = "USE FEDERATION tenant_federation (tenantId = [id]) WITH FILTERING=ON, RESET"; ((IObjectContextAdapter)myDatabaseContext).ObjectContext.Connection.Open(); _databaseContext.Database.ExecuteSqlCommand(federationCmdText); var query = from o in _myDatabaseContext.Orders where o.TenantId = id select o;

62 SQL Azure Federations Geen where-clause nodig in gefilterde verbinding string federationCmdText = "USE FEDERATION tenant_federation (tenantId = [id]) WITH FILTERING=ON, RESET"; ((IObjectContextAdapter)myDatabaseContext).ObjectContext.Connection.Open(); _databaseContext.Database.ExecuteSqlCommand(federationCmdText); var query = from o in _myDatabaseContext.Orders where o.TenantId = id select o;

63 SQL Azure Federations Entity Framework: geen support parallelle queries

64 Architectuur Overview - > Table Storage Webrole SQL Azure Table Storage ACS

65 Table storage Meten en Afrekenen Afrekenen op basis van verbruik (aantal page requests, aantal objecten etc.) Verbruik inzichtelijk maken voor tenants Statcounter.com is niet geschikt voor multitenancy

Maatwerk

67 Maatwerk Maatwerk per tenant op twee gebieden: User Interface Business Logic

68 Maatwerk User Interface Tenant-logo

69 Maatwerk User Interface Tenant-logo Niet doen op deze manier: Kleuren Fonts Posities van html-elementen Etc.

70 Maatwerk User Interface - Themes

71 Maatwerk User Interface - Themes

72 Maatwerk User Interface - Themes public class ThemesViewEngine : BuildManagerViewEngine { private readonly string _themeName; public ThemesViewEngine(string themeName) { _themeName = themeName; } protected override IView CreateView( ControllerContext controllerContext, string viewPath, string masterPath) { masterPath = string.Format("~/Themes/{0}/_Layout.cshtml", _themeName); return new RazorView(controllerContext, viewPath, masterPath, …); }

73 Maatwerk User Interface - Themes public class ThemesViewEngine : BuildManagerViewEngine { private readonly string _themeName; public ThemesViewEngine(string themeName) { _themeName = themeName; } protected override IView CreateView( ControllerContext controllerContext, string viewPath, string masterPath) { masterPath = string.Format("~/Themes/{0}/_Layout.cshtml", _themeName); return new RazorView(controllerContext, viewPath, masterPath, …); }

74 Maatwerk User Interface - Themes public class ThemesViewEngine : BuildManagerViewEngine { private readonly string _themeName; public ThemesViewEngine(string themeName) { _themeName = themeName; } protected override IView CreateView( ControllerContext controllerContext, string viewPath, string masterPath) { masterPath = string.Format("~/Themes/{0}/_Layout.cshtml", _themeName); return new RazorView(controllerContext, viewPath, masterPath, …); }

75 Maatwerk User Interface - Themes public class ThemesViewEngine : BuildManagerViewEngine { private readonly string _themeName; public ThemesViewEngine(string themeName) { _themeName = themeName; } protected override IView CreateView( ControllerContext controllerContext, string viewPath, string masterPath) { masterPath = string.Format("~/Themes/{0}/_Layout.cshtml", _themeName); return new RazorView(controllerContext, viewPath, masterPath, …); }

76 Maatwerk User Interface - Themes public class UseThemesViewEngine : ActionFilterAttribute { public ITenantSettings Settings { get; set; } public override void OnActionExecuting( ActionExecutingContext context) { ViewEngines.Engines.Clear(); var engine = new ThemesViewEngine(Settings.ThemeName); ViewEngines.Engines.Add(engine)); }

77 Maatwerk User Interface - Themes public class UseThemesViewEngine : ActionFilterAttribute { public ITenantSettings Settings { get; set; } public override void OnActionExecuting(…) { ViewEngines.Engines.Clear(); var engine = new ThemesViewEngine(Settings.ThemeName); ViewEngines.Engines.Add(engine)); }

78 Maatwerk User Interface - Themes Public class HomeController : Controller { [UseThemesViewEngine] public ActionResult Index() { }

79 Maatwerk User Interface - Themes public class UseThemesViewEngine : ActionFilterAttribute { public ITenantSettings Settings { get; set; } public override void OnActionExecuting( ActionExecutingContext context) { ViewEngines.Engines.Clear(); var engine = new ThemesViewEngine(Settings.ThemeName); ViewEngines.Engines.Add(engine)); }

80 Maatwerk Maatwerk per tenant op twee gebieden: User Interface Business Logic

81 Maatwerk Business Logic Probleem Tenant settings moeten continue doorgegeven worden If-statements en switch-statements door alle code verweven

82 Maatwerk Business Logic var data = Foo.Bar(TenantSettings) If(settings.IsGoldPartner) … else … TenantSettings Business Logic layer MVC Controller

83 Maatwerk Business Logic var data = Foo.Bar(TenantSettings) If(settings.IsGoldPartner) … else … TenantSettings Business Logic layer MVC Controller

84 Maatwerk Business Logic var data = BLL.GetData(TenantId) return DA.GetData(TenantId) from t in table where tenantid == TenantId select t select * from table where tenantid = TenantId TenantId Business Logic layer MVC Controller Data Access Database

85 Maatwerk Business Logic var data = BLL.GetData(TenantId) return DA.GetData(TenantId) from t in table where tenantid == TenantId select t select * from table where tenantid = TenantId TenantId Business Logic layer MVC Controller Data Access Database

86 Maatwerk Business Logic public class BusinessLogic { public void DoeIets(string messageText) { var message = CreateMessage(messageText); var tenantSettings = TenantSettingsHelper.GetSettings(); if(tenantSettings.UseSpamFilter) { if(tenantSettings.SpamFilterType == Fast) { spamfilter = new FastSpamfilter().Execute(message); } else if(TenantSettings.SpamFilterType == Slow) { spamfilter = new SlowSpamfilter().Execute(message); } SaveMessage(message); }

87 Maatwerk Business Logic IoC container (autofac): builder.Register(c => NewSpamfilter()).As ; private Ispamfilter NewSpamfilter() { if(!TenantSettings.UseSpamFilter) return new NoSpamfilter(); if(TenantSettings.SpamFilterType == Fast) return new FastSpamfilter(); else if(TenantSettings.SpamFilterType == Slow) return new SlowSpamfilter();

88 Maatwerk Business Logic public class BusinessLogic { ISpamfilter _spamfilter; public Messenger(ISpamfilter spamfilter) { _spamfilter = spamfilter } public void DoeIets(string messageText) { var message = CreateMessage(messageText); _spamfilter.Execute(message); SaveMessage(message); }

89 Cache App Fabric Cache doet de basics Wissen van totale cache niet mogelijk Geen persistentie Geen inzicht in bytes per tenant Versienummer in cachekey: Bijvoorbeeld [tenantId]_[objecttype]_[versienr]_[objectId] 2ED669F2-9EBC BE2-56CDFDA89B75_employee_v1.1_924F32EA C1-986E-69FF0857F39C 2ED669F2-9EBC BE2-56CDFDA89B75_employee_v1.2_924F32EA C1-986E-69FF0857F39C Cache

90 Cache App Fabric Cache doet de basics, maar niet meer dan dat. Wissen van totale cache niet mogelijk. Geen persistentie. Geen inzicht in bytes per tenant. Versienummer in cachekey: Bijvoorbeeld [tenantId]_[objecttype]_[versienr]_[objectId]

91 Access Control Service Access Control

92 Access Control Service Intro Iedere tenant -> Relying Party Application in ACS Management Service (beschikbaar als Odata Service) Geen gebruikcijfers

93 Access Control Service AudienceMode Na inloggen stuurt ACS een token naar de website. Check (url in token == AllowedAudienceUri) Uitzetten!

94 Contact Bereikbaar voor vragen Edo van Asseldonk Blog:

95