Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
11.3.2013
9Windows Azure SQL Database + VM
© FC Sovelto Oyj
Federation
DEMO
17
Esimerkki, Federoitu kanta, jossa M-M -sude
18
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;
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();
}
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
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
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
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.”
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
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
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ä: / \ # ?
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
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
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.
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