Масштабируемость приложения стала критическим элементом дизайна после перехода от модели индивидуальных программ к серверной модели работы приложений. Масштабируемые приложения способны справиться с более активным использованием и возросшим объёмом данных. Масштабируемые приложения обладают высокой доступностью и отказоустойчивостью. Масштабируемые приложения управляемы и сопровождаемы. Всё это справедливо по отношению ко всем слоям приложения, в том числе и к базе данных. Масштабирование базы данных - процесс отнюдь не тривиальный и довольно сложный. SQL Azure, со своей концепцией моментального создания и распределения баз данных внутри ЦОД, является хорошей альтернативой одиночному серверу, а SQL Azure Federations выводят масштабирование в SQL Azure на совершенно новый уровень.
9. Windows Azure Roles Client Applications
Service Bus Castellan.Azure
• Box Office sales
• Ticket Printing
• System Administration
• Venue/Event
http:// TicketDirect .* Dynamic Worker Distributed Partitioner WCF Management
(tasks uploaded Cache Worker Worker • Partitioning
as blobs)
Windows Azure Storage On Premises
Blobs to -- -- Tables to
-- Queues for
SQL Server
store web
and worker --- -- record &
--- server
communication
between clients
role partition and roles
resources
-- information
Castellan Venue
SQL Azure
Castellan
Castellan Castellan
Castellan Castellan
Castellan
Castellan Venue DB 1
Venue
Venue Venue DB 2
Venue
Venue Venue DB N
Venue
Venue ...
DB’s
Partition(s) DB’s
Partition(s) DB’s
Partition(s) Castellan.old (VB6)
One application DB, many venue DB’s – each partitioned in to many parts (40+)
12. Резервирование Управление
• Рост и уменьшение объѐма • ПО, Обновление, Высокая
данных (покупка/продажа доступность
серверов)
Шардинг
Маршрутизация Управление секциями
• Где находятся мои данные? • Разбиение и слияние
• Распределение данных
14. Federations
SalesDB
CustomerFederationeration
CustomerFederationeration
CustomerFederation
Federation Root
Federation Members
15. Federations member: Range [1000, 2000)
SalesDB AU AU AU
PK=5 PK=25 PK=35
CustomerFederationeration
CustomerFederationeration
AU
PK=5
AU
PK=25
AU
PK=35
CustomerFederation AU
PK=1005
AU
PK=1025
AU
PK=1035
Federation Root
Federation Members Atomic Units
16. Central Tables
Federations
SalesDB Federated Tables
CustomerFederationeration
CustomerFederationeration
CustomerFederation
Reference Tables
User Database and
Federation root Federation members
17. USE FEDERATION CustomerFederation(customer_id = 5075) …
SalesDB
CustomerFederationeration
CustomerFederationeration
CustomerFederation
Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]
18. USE FEDERATION CustomerFederation(cid = 55)
WITH RESET, FILTERING=OFF
GO
FILTERING=OFF
Работаем с данными всего Federation member
Неограниченный доступ к данным базы: Всѐ равно что соединиться по имени БД
DDL, DML и доступ ко всем Atomic Units внутри Federation Member
Хорошо для…
Management Tasks: Обновление схемы данных
Fan-out Querying – получение данных нескольких atomic units
member: Range [100,200)
Products
(referece) Customer_id=55
SalesDB
CustomerFederation
CustomerFederation Customers Orders
(federated) (federated)
Microsoft Confidential Microsoft Confidential
19. USE FEDERATION CustomerFederation(cid = 55)
WITH RESET, FILTERING=ON
GO
FILTERING=ON
Работаем с данными одного Atomic Unit
Полностью доступны данные Reference Tables
Запрещены любые изменения глобального состояния Federation Member
Хорошо для…
Безопасной модели разработки
Предотвращения утечки данных
member: Range [100,200)
Products
(referece) Customer_id=55
SalesDB
CustomerFederation
CustomerFederation Customers Orders
(federated) Customer_id=55 (federated)
Microsoft Confidential
20. ALTER FEDERATION CustomerFederation SPLIT AT (tenant_id=7500)
SalesDB
Orders_federation
CustomerFederationeration
CustomerFederation
Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]
21. App
member: Range [100,200)
PostalCode
SalesDB (reference)
CustomerFederationeration
CustomerFederationeration
CustomerFederation Customer CustomerAddress
(federated) (federated)
Member: Range [100,150) Member: Range [150,200)
23. -- День #2 – Разворачиваем систему
CREATE DATABASE SalesDB
GO
CREATE FEDERATION CustomerFederation(CustomerId int RANGE)
GO
member: Range [MIN, NULL)
SalesDB
CustomerFederation
24. CREATE TABLE сProducts( member
-- Соедняемся federation
USE FEDERATION CustomerFederationeration(CustomerId = 0) WITH FILTERING = OFF, RESET
ProductId int NOT NULL,
GO
SupplierId int NOT NULL,
CREATE TABLE Customers(
CustomerId int nvarchar(50) NOT NULL,
ProductName NOT NULL,
…Price decimal(12,2) NOT NULL,
PRIMARY KEY (CustomerId) ) )
PRIMARY KEY(ProductId)
FEDERATED ON (CustomerId = CustomerId)
GO
GO
CREATE TABLE Orders
(
CustomerId int NOT NULL,
OrderId uniqueidentifier NOT NULL,
…
PRIMARY KEY (OrderId, CustomerId)
)
FEDERATED ON (CustomerId = CustomerId)
GO
member: Range [MIN, NULL)
Products
(reference)
SalesDB
CustomerFederation
CustomerFederation Customer Orders
(federated) (federated)
25. -- День #2 Трафик растёт!
ALTER FEDERATION CustomerFederation SPLIT AT(CustomerId = 1000)
GO
-- День #3 ПЯТНИЦЦО! Трафик взлетает до небес! (future)
ALTER FEDERATION CustomerFederation SPLIT AT(CustomerId = 100,200,300,…900)
GO
-- День #4 Наплыв трафика спадает! (future)
ALTER FEDERATION CustomerFederation MERGE AT(CustomerId = 100,200,300,…900)
GO
SalesDB
CustomerFederationeration
CustomerFederationeration
CustomerFederation
36. Управление схемой данных
Поддержка управления схемами членов федерации. Больший контроль
процесса обновления схемы
Эмуляция Federations
Локальная эмуляция Federations, для того, чтобы разрабатывать
приложения под Federations, не используя SQL Azure
Автоматический шардинг
Автоматическое разбиение базы данных в зависимости от
определѐнного критерия (время отклика, размер базы данных и т.п.)
Распределѐнные запросы
Получение данных с нескольких Federation Members одним запросом