22
11.3.2013 1 Windows Azure SQL Database + VM © FC Sovelto Oyj Windows Azure SQL Database + VM Pekka Korhonen ja Ahti Haukilehto, senior-konsultit Soveltosta Sisältö Tietokannat Azuressa SQL Database Federointi Entity Frameworkin käyttö Federoinnissa Azure Storage Suorituskyky Hinnoittelu 2

Windows Azure SQL Database + VM

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Windows Azure SQL Database + VM

11.3.2013

1Windows Azure SQL Database + VM

© FC Sovelto Oyj

Windows Azure SQL Database + VMPekka Korhonen ja Ahti Haukilehto,senior-konsultit Soveltosta

Sisältö

• Tietokannat Azuressa

• SQL Database Federointi

• Entity Frameworkin käyttö Federoinnissa

• Azure Storage

• Suorituskyky

• Hinnoittelu

2

Page 2: Windows Azure SQL Database + VM

11.3.2013

2Windows Azure SQL Database + VM

© FC Sovelto Oyj

Tietokanta Windows Azuressa

• Kaksi perusvaihtoehtoa• SQL Database, tietokanta palveluna, ent. SQL Azure

• Azure VM, jossa SQL Server asennettuna

• Tärkeimmät erot• Scale out vain Sql Databasessa (= federointi)

• Azure VM:ssä voit vaikuttaa palvelinlaitteen ominaisuuksiin (keskusmuisti, ytimet)

• Ja onhan tietysti Azure Storage, ml. Tables• Ei ole relaatiokanta

3

Windows Azure SQL Database

(ent. SQL Azure)

4

Page 3: Windows Azure SQL Database + VM

11.3.2013

3Windows Azure SQL Database + VM

© FC Sovelto Oyj

Kytkeytyminen SQL Databaseen

• Vain SQL Server autentikointi, ei Windows-autentikointia

• Ei Use tietokanta –komentoa, eli kantaa ei voi vaihtaa lennossa

• Connection Stringissä siis: palvelin, käyttäjätunnus, salasana, kanta• esim:

Server=tcp:soxpw8k0ij.database.windows.net;Database=KirjaDB;User ID=Pekka@soxpw8k0ij;Password=myPassword; Trusted_Connection=False;Encrypt=True;

• Liikennöinti aina tcp-porttiin 1433 (jonne siis ulospäin lähtevä liikenne sallittava)

5

SQL Database sovellukset

• Yhteys tietokantaan saatetaan katkaista mm. seuraavista syistä• suuri resurssien käyttö (ylikuormitus)

• pitkään kestävät kyselyt• pitkä yksittäinen transaktio• yhteys pitkään käyttämättä (ei tapahdu mitään)

• Sovelluksen olisi varauduttava yhteyden katkeamiseen jauudelleen kytkeytymiseen

• http://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/

6

Page 4: Windows Azure SQL Database + VM

11.3.2013

4Windows Azure SQL Database + VM

© FC Sovelto Oyj

Looginen vs. fyysinen hallinta

• Palvelu huolehtii fyysisestä hallinnasta• Automaattinen HA “out of box”• Transparent failover kaatumistilanteissa

• Kuormantasaus, Load balancing (SLA)• Ei ole edes mahdollista viitata fyysisiin levyihin

• Ei mahdollista käyttää tiedostoryhmiä• Ei mahdollista vaikuttaa muistin määrään

• Ei mahdollista vaikuttaa prosessorien määrään

• Skaalaus siis vain• Luomalla useita kantatoja tai

• Federaatioilla

7

SQL Azure tietokannat

• Kaksi kantatyyppiä (ja vain kaksi)

• WEB

• max. koko 1-5 GB

• Business

• max. koko 10 - 150 GB

• Hinta käytetyn koon mukaan, jyvitetään per päivä

• Max 149 kantaa + master per Server

• Kollaatio-asetus voidaan antaa kannan luonnin yhteydessä. Ei voi muuttaa.

• Snapshot-lukitustaso aina käytössä (ei voi muuttaa)

• Klusteroitu indeksi pakollinen tauluissa

• luotava viimeistään ennen Insert-komentoja

• Ei hajautettuja DTC-tapahtumaa

8

Page 5: Windows Azure SQL Database + VM

11.3.2013

5Windows Azure SQL Database + VM

© FC Sovelto Oyj

Käyttäjätunnusten luominen

9

-- Master-tietokanta:

CREATE LOGIN login1 WITH password='<ProvidePassword>';CREATE DATABASE database1;

-- Tarvittaessa loginille roolit:-- näitä peruskäyttäjä ei tarvitse

EXEC sp_addrolemember 'dbmanager', 'login1User';EXEC sp_addrolemember 'loginmanager', 'login1User';-- systeemitaulut:SELECT * FROM sys.sql_logins;SELECT * FROM sys.databases;

-- Uusi yhteys suoraan luotuun kantaan:

CREATE USER login1User FROM LOGIN login1;

-- oikeudet normaaliin tapaan, esim.exec sp_addrolemember 'db_datareader', Login1User

Varmistukset

• Server Failure

• automaatinen High Availability

• Inhimillinen/sovellusvirhe• Ei Backup-käsitettä!

• Voidaan kiertää luomalla uusi kanta kopiona vanhasta

CREATE DATABASE Database1B AS COPY OF Database1A

• TAI Export/Import BACPACina Azure Storageen tai On-Premises levyille

• 3. osapuolien tuotteet, esim codeplex

10

Page 6: Windows Azure SQL Database + VM

11.3.2013

6Windows Azure SQL Database + VM

© FC Sovelto Oyj

SQL Azure Data Sync

11

Hinnoittelu

• Hinta lasketaan jyvitettynä päivittäin ko. päivän maksimikoon mukaan (koko pyöristetään yli gigan kannoille seuraavaan täyteen gigaan)

• 99,9% SLA

12

Page 7: Windows Azure SQL Database + VM

11.3.2013

7Windows Azure SQL Database + VM

© FC Sovelto Oyj

SQL Azure Federation

• Miten toteutetaan esim. SaaS-järjestelmä (multitenant)?• oma palvelin

• oma kanta

• oma schema

• kaikki data samoissa tauluissa

• vai federointi

• tarvitaanko tenant kohtainen backup/restore, scheman customointi, suorituskykyä?

• Federation perustuu datan hajautukseen useaan tietokantaan (federation member)

• Data hajautetaan Federation Keyllä

13

T1 T2 T3 T4 T5

T6 T7 T8 T9 T10

T11 T12 T13 T14 T15

T16 T17 T18 T19 T20

kaikki data yhdessä

kannassa

Federation

• Use Federation Syntaksi

• Filtering optio oleellinen• Kertoo sen nähdäänkö koko federaation sisältö vai vain valittu jäsen

USE FEDERATION ROOT WITH RESET

TAI

USE FEDERATION federation_name (distribution_name = value)

WITH [FILTERING={ON|OFF},] RESET

14

Page 8: Windows Azure SQL Database + VM

11.3.2013

8Windows Azure SQL Database + VM

© FC Sovelto Oyj

Federation, esim.

15

CREATE FEDERATION AsiakasFederation(id bigint RANGE)GOUSE FEDERATION AsiakasFederation(id=0) WITH RESET, FILTERING=OFFGO--DROP TABLE ASIAKASCREATE TABLE [dbo].[asiakas](

[OrgId] [bigint] NOT NULL,[asnro] [uniqueidentifier] NOT NULL DEFAULT NEWID(),[nimi] [varchar](100) NULL,[osoite] [varchar](100) NULL,[puhelin] [varchar](100) NULL,[selite] [varchar](500) NULL,

) FEDERATED ON (id=orgId)gocreate unique clustered index a1 on asiakas(orgid, asnro)go

Federation, esim.2

16

GOALTER FEDERATION AsiakasFederation SPLIT AT (id=40000)GO

------------------------- Federaation käyttö -------------------------------------------- FILTER on / off

USE FEDERATION AsiakasFederation(id=50000) WITH RESET, FILTERING=Off-- paluttaa kaikki 40000 -> USE FEDERATION AsiakasFederation(id=50000) WITH RESET, FILTERING=On-- palauttaa vain id = 50000

Page 9: Windows Azure SQL Database + VM

11.3.2013

9Windows Azure SQL Database + VM

© FC Sovelto Oyj

Federation

DEMO

17

Esimerkki, Federoitu kanta, jossa M-M -sude

18

Page 10: Windows Azure SQL Database + VM

11.3.2013

10Windows Azure SQL Database + VM

© FC Sovelto Oyj

Esimerkki: Federoitu kanta ja Entity Framework

• Kannan voi suunnitella EF Designerilla tai Code-First• Käyttää Root-federaatiota

• Mutta generoituun DDL:n on käsin lisättävä federointi• Federointiavain ja klusteroidut indeksit on korjattava.

• Koska PK on (usein) GUID, on syytä olla ”CreatedOn” –tyyppinen kenttä järjestyksen saamiseksi

• Mekaaninen muutos, on mahdollista tehdä ohjelmallisesti

19

-- Creating table 'Users'CREATE TABLE [dbo].[Users] (

[Id] uniqueidentifier NOT NULL default newid(),[Name] nvarchar(max) NOT NULL,[Customer_id] bigint NOT NULL default 0,[CreatedOn] datetime2 NOT NULL default sysdatetime()

)FEDERATED ON (range_id = customer_id)

Kannan luonti - EF

• Primary Key:n on lisättävä federaatio

• Kuten myös viiteavaimiin

20

-- Creating primary key on [Id] in table 'Users'ALTER TABLE [dbo].[Users]ADD CONSTRAINT [PK_Users]

PRIMARY KEY CLUSTERED (customer_id, [Id] ASC);GO

-- Creating foreign key on [Groups_Id] in table 'UserGroup'ALTER TABLE [dbo].[UserGroup]ADD CONSTRAINT [FK_UserGroup_Group]

FOREIGN KEY (customer_id, [Groups_Id])REFERENCES [dbo].[Groups]

(customer_id, [Id])ON DELETE NO ACTION ON UPDATE NO ACTION;

Page 11: Windows Azure SQL Database + VM

11.3.2013

11Windows Azure SQL Database + VM

© FC Sovelto Oyj

Federointi, M-M -suhde

• Liitostauluun on lisättävä federointi-avain• Jos EF-model (eikä Code-First), niin sille annetaan default-arvo

21

-- Creating table 'UserGroup'CREATE TABLE [dbo].[UserGroup] (

[Users_Id] uniqueidentifier NOT NULL,[Groups_Id] uniqueidentifier NOT NULL,[Customer_id] bigint NOT NULL default 40, -- tässä federaatio 40[CreatedOn] datetime2 NOT NULL default sysdatetime()

)FEDERATED ON (range_id = customer_id)

Federointi ja EF -käsittely

• Federaatio on asetettava kuhunkin dbConnect:oon

22

using (FedTestEntities dc = new FedTestEntities()){string federationCmdText = @"USE FEDERATION FED_1 (range_id=40) WITH

FILTERING=ON, RESET";

// Tietokantayhteys on explisiittisesti avattava ja asetetaan federaatio((IObjectContextAdapter)dc).ObjectContext.Connection.Open();dc.Database.ExecuteSqlCommand(federationCmdText);

// ja sitten käsittelydataGridView1.DataSource = dc.Orders.ToList();

}

Page 12: Windows Azure SQL Database + VM

11.3.2013

12Windows Azure SQL Database + VM

© FC Sovelto Oyj

Federaatiot - rajoituksia

• MARS (Multiple Active Result Sets) ei voi olla päällä

• Joka on EF:n oletus

• Joten Lazy loading ei ole käytettävissä!

23

// Ei lazy loading, siksi ToList()foreach (var order in dc.Orders.ToList()){listBox1.Items.Add("Order id:" + order.order_id);

// explicit load will not work because no MARS// dc.Entry(order).Collection(o => o.OrderDetails).Load();

foreach (var orderDetail in order.OrderDetails){listBox1.Items.Add(" orderDetail id:" + orderDetail.order_detail_id);

}}

Federaatiot - rajoituksia

• MSDTC ei tuettu, vain lokaali Tx tuettuna

• Azure SQL:n oletus Read Commited Snapshot Isolation (RCSI)

• Transaktiot on tehtävä seuraavassa järjestyksessä

1. Avaa tietokantayhteys

2. Use Federation

3. Aloita Local Tx

24

Page 13: Windows Azure SQL Database + VM

11.3.2013

13Windows Azure SQL Database + VM

© FC Sovelto Oyj

Federaatiot – local Tx

25

using (FedTestEntities dc = new FedTestEntities()){string federationCmdText = @"USE FEDERATION FED_1 (range_id=40) WITH

FILTERING=ON, RESET";((IObjectContextAdapter)dc).ObjectContext.Connection.Open();dc.Database.ExecuteSqlCommand(federationCmdText);

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))

{Order order = dc.Orders.First();order.total_cost += 1;dc.SaveChanges();scope.Complete();

}}

Windows Azure tietovarastot

1. Windows Azure Storage

2. Windows Azure SQL Database

• Ovat hyvin erilaisia kuin on-premises –ratkaisuissa

• Tästä (yhdessä security-muutosten kanssa) aiheutuu suurin muutostarve olemassa oleviin sovelluksiin• On-premises –sovellusta ei nyt vain voi sellaisenaan siirtää pilveen

• Sql Azure on SQL-kanta, mutta sitä ei pilvisovelluksissa käytetä (välttämättä) kaiken datan säilyttämiseen• Sitä käytetään usein yhdessä Azure Storagen kanssa – Azure Storage on halvempi ja skaalautuvampi

Page 14: Windows Azure SQL Database + VM

11.3.2013

14Windows Azure SQL Database + VM

© FC Sovelto Oyj

Windows Azure Storage + SQL Azure

• Blobs• e.g. pictures, videos, documents

• Tables• e.g. entities with properties (no schema)

• Queues• e.g. asynchronous messaging

• SQL Azure

HTTP/REST

TDS

Windows Azure Storage

• Skaalutuva datavarasto pilvessä• No-SQL• 100TB per storage account• Auto-scale to meet massive volume and throughput

• RESTful Web Service API• Access from Windows Azure Compute• Access from anywhere via internet• Supporting .NET Client Library

Page 15: Windows Azure SQL Database + VM

11.3.2013

15Windows Azure SQL Database + VM

© FC Sovelto Oyj

Miksi Azure Storage Table

• Sovellusarkkitehtuuri – erityisesti se, kuinka client käyttää tietovarastoa – mahdollistaa huiman skaalautuvuuden• HTTP Rest

• Key : PartitionKey, RowKey; jokainen client, jokainen kutsu, ottaa kantaa hajautukseen

• Data on hajautunut useilla palvelimille. PartitionKey:llä sovellus ”osoittaa” sen, mikä data olisi syytä olla lähekkäin.

• Pay as you Go –velotusmalli

29

Windows Azure Storage suorituskyky

Scalability Dimension Target

Total Windows Azure Storage Account Capacity Up to 100 TBs

Number of Windows Azure Storage Account Transactions Up to a few thousand requests per second

Total Windows Azure Storage Account Bandwidth Up to a few hundred megabytes per second

“a table with good partitioning can process up to a few thousand requests per second.”

Page 16: Windows Azure SQL Database + VM

11.3.2013

16Windows Azure SQL Database + VM

© FC Sovelto Oyj

Windows Azure Storage Tables

• Key-Value storage• No-SQL

• On siis serialisoitujen entiteettien varasto

• Taulussa voi olla mitä tahansa entiteettejä• Client-koodi yleensä rajoittaa/hoitaa sen, että vai yhdenlaisia

• Ei ole indeksejä (paitsi RowKey)

• Taulut ovat täysin riippumattomia toisistaan• Viite-eheyttä ei ole

• Ei voida tehdä join-kyselyjä

• Joka toisaalta mahdollistaa sen skaalautuvuuden

Azure Storage Table - partitiot

• Partitiot voidaan tallentaa eri palvelimille• Hajautus tehdään automaattisesti käytön perusteella

• Joka mahdollistaa automaattisen rinnakkaisen kyselyn

• Clientin tekemä haku voi kohdistua useaan partitioon• Tehokkaimmat kyselyt kuitenkin aina partitio-kohtaisia

• (ja mieluusti myös RowKey-ehto)

32

Page 17: Windows Azure SQL Database + VM

11.3.2013

17Windows Azure SQL Database + VM

© FC Sovelto Oyj

Windows Azure Storage kyselyt

• Table storage queries are limited to 1000 entities by default.• If a query finds more than 1000 entities, a continuation token is returned and must be used by the application to retrieve the

next set of entities.

• Queries that take longer than 5 seconds to execute also return a continuation token. Queries that take longer than 30 seconds are cancelled.

• Data in table storage is organized by partition key and indexed by row key.

• Because there are no custom indexes in tables, queries by partition key and row key are fast, but queries that do not use partition key and row key are slow.

• Client-kirjasto hoitaa nämä rajoitukset

Tietotyypit

• Ei ole esim decimal-tyyppiä, valutta-arvot täytyy tallentaa sovelluksen omalla tavalla

Table Storage Supported Property Types

byte[]

bool

DateTime

double

Guid

Int32 or int

Int64 or long

String

Page 18: Windows Azure SQL Database + VM

11.3.2013

18Windows Azure SQL Database + VM

© FC Sovelto Oyj

Tables, Entities, Properties ja Partitions

• Max 255 properties (sisältää PartitionKey, RowKey ja Timestamp.

• Total Size (sisältäen propertien nimet) max 1 MB.• Pitääkö property-nimet lyhentää a1, a2, a3 jne

• Säästää samalla tietoliikennekustannuksia

• Yleensä dataAccess-kerroksen olioita ei voi monestakaan syystä käyttää “ylempänä”, vaan data on kopiotava Model-oliohin. Se mahdollistaa myös tälläisen “hakkeroinnin”

Keys

• Kullakin entiteetillä on oltava PartitionKey ja RowKey• Niiden muodostamisalgoritmi on mietittävä tarkoin.

• Datan järjestys ja järkevä sivuttaminen on mahdollista tehdä vain partition sisällä RowKey:llä

• Joten sen rakentamisalgoritmi on mietittävä vielä tarkemmin

• PartitionKey ja RowKey ovat merkkijonoja.

• Kummankin pituus max 1 KB

• RowKey:n pitää olla yksilöllinen partition sisällä

• Eivät voi sisältää seuraavia merkkejä: / \ # ?

Page 19: Windows Azure SQL Database + VM

11.3.2013

19Windows Azure SQL Database + VM

© FC Sovelto Oyj

Table-dataa käyttävä koodi

• Yleensä kirjoitetaan entiteettiluokka ja TableServiceContext –luokka

• Rest ei näy sovelluskehittäjälle

Azure Storage SaaS-sovelluksen tietovarastona, etuja

• Internet skaalautuvuus

• jokainen sovellus, jokainen DataAccess –koodi, on partitiontitietoinen => multiTenancy on jo ”äidinmaidossa” saatu• PartitionKey on luontevasti OrganizationID:stä muodostettu

Organisaation data on yhdessä partitioissa

• Partitio sisältää vain yhden organisaation dataa

• Client-koodi on helppo hajauttaa

Page 20: Windows Azure SQL Database + VM

11.3.2013

20Windows Azure SQL Database + VM

© FC Sovelto Oyj

Ja niitä haittoja

• toimittajariippuvuus, vain yksi hostausvaihtoehto

• paljon koodia, vähän palveluja

• tietokantaosaajalle paljon ylläreitä• Esim. tx

• Erittäin rajoittunut kyselykieli, mm. lajittelun puuttuminen

• Hallintavälineiden ja mahdollisuuksien puuttuminen• Data on hajautunut kuin mustikat metsään. Esim. yhden organisaation

poistaminen/turvakopiointi/synkronointi suuren työn takana

• Yleiskuvan saaminen datavarastosta vaikeaa

• Suorituskyky

39

Mittaustuloksia, massiivien päivitys

• Mittaustulokset, iso usean taulun insert Proc• N. 1 Milj. riviä

• Voidaan Tx:nä tai ilman (jokainen insert on TX)

• 2012• On-prem: TX: 21 s

• SQLDatabase TX 255 s

• 2013• On-prem: TX: 11 s (SSD)

• SQLDatabase TX: 43 s

• Azure VM + SQL TX: 20 s, Cachen vaikutus n. 10%

• On-prem: ei TX: 85 s (SSD)

• SQLDatabase ei TX: n 1 h

• Azure VM + SQL ei TX: n. 2 h

40

Page 21: Windows Azure SQL Database + VM

11.3.2013

21Windows Azure SQL Database + VM

© FC Sovelto Oyj

Azure vM hinnat

Windows

Server

CPU Memory

GB

€/h

GA

€/kk

koko ajan

€/kk

10 h/tp

Extra Small Share

d

0.7 0,0142 10 3

Small 1 1.75 0,0816 59 18

Medium 2 3.5 0,1632 118 36

Large 4 7 0,3263 235 72

Extra Large 8 14 0,6525 470 144

41

Azure VM + SQL

Sql Server CPU €/h

GA

€/kk

koko ajan

€/kk 10 h/tp

jos mahdollista

Extra Small Share

d

N/A N/A N/A

Small 1 0,3901 340 104

Medium 2 0,3901 398 122

Large 4 0,3901 516 158

Extra Large 8 0,7802 1032 315

42

Palveluna ostetun Windows Azure SQL Databasen kuukausihinta on

noin 90€/kk.

Page 22: Windows Azure SQL Database + VM

11.3.2013

22Windows Azure SQL Database + VM

© FC Sovelto Oyj

Mittaustuloksia, Datan hakeminen

43

Tilaukset, tilausrivit ja tuotteet

Azure Storage Table

10 0,8

100 13

1000 120

Sql, oma kantaEF

0,05

0,2

1,2

Sql AzureEF

0,2

1,7

14

t

Q&A