Масштабирование в SQL Azure - SQL Azure Federations

Preview:

DESCRIPTION

Масштабируемость приложения стала критическим элементом дизайна после перехода от модели индивидуальных программ к серверной модели работы приложений. Масштабируемые приложения способны справиться с более активным использованием и возросшим объёмом данных. Масштабируемые приложения обладают высокой доступностью и отказоустойчивостью. Масштабируемые приложения управляемы и сопровождаемы. Всё это справедливо по отношению ко всем слоям приложения, в том числе и к базе данных. Масштабирование базы данных - процесс отнюдь не тривиальный и довольно сложный. SQL Azure, со своей концепцией моментального создания и распределения баз данных внутри ЦОД, является хорошей альтернативой одиночному серверу, а SQL Azure Federations выводят масштабирование в SQL Azure на совершенно новый уровень.

Citation preview

PBC302

Масштабирование в SQL AzureSQL Azure Federations

Денис РезникРуководитель департамента веб-разработкиDigital Cloud Technologies

Денис Резник

Руководитель департамента веб-разработки компании Digital Cloud TechnologiesТренер Microsoft Innovation CenterMicrosoft MVP (SQL Server)Microsoft Certified TrainerБлог: http://reznik.uneta.com.ua Твиттер: @DenisReznikEmail: DenisReznik@live.ru

Масштабирование

МасштабированиеСпособность справляться с увеличением нагрузки без влияния на производительностьВысокая доступность и отказоустойчивостьУправляемость и сопровождаемость

ZoomingScaling

Масштабирование

Scale upКупить мощный сервер

Мощные сервера дорогие!

Загрузить сервер по полнойЧто делать если нагрузка меняется? Резервы для пиковой нагрузки - нерентабельно!

Scale-outРаспределить данные и нагрузку между

несколькими серверамиМаленькие сервера дешёвые! Scale linearly800 маленьких серверов работают очень быстро

Способность противостоять пиковым нагрузкамРаспределение нагрузки внутри датацентра

Масштабирование Базы Данных (Scale Up)

Scale Up в SQL Azure нет!

32 GB RAM, 8 cores

Масштабирование Базы Данных (Scale Out)

«Сложнее всего масштабировать базу данных»

Варианты масштабирования базы данныхРепликация

Дублирование данных на серверах

ШардингРаспределение данных между серверами

DataData...

Большая гибкость

Архитектура TicketDirect

SQL Azure

Castellan

Castellan Venue DB

Castellan Venue DB’sVenue 1

Partition(s)

Castellan Venue DB

Castellan Venue DB’sVenue 2

Partition(s)

Castellan Venue DB

Castellan Venue DB’sVenue N

Partition(s)

One application DB, many venue DB’s – each partitioned in to many parts (40+)

...

Windows Azure Roles

http:// TicketDirect .* Dynamic Worker(tasks uploaded

as blobs)

Partitioner Worker

Windows Azure StorageQueues for communication between clients and roles

-- - --- - -

-- - --- - -

Tables to record server & partition information

Blobs to store web and worker role resources

Client Applications

Castellan.old (VB6)

Service Bus

WCF

On PremisesSQL Server

Castellan Venue

Distributed Cache Worker

Castellan.Azure• Box Office sales• Ticket Printing • System Administration • Venue/Event Management• Partitioning

Большая гибкость

Использование модели pay-as-you-go в полной мереРасширение БД без потери времени

Возможность строить приложения, которые будут масштабироваться по мере роста нагрузкиОбработка пиковых нагрузок

Несколько БД Много БД

Multi-Tenancy Приложения

Tenancy Models:Single tenant per database

Multiple-tenants per database Multiple databases per tenant

Tenant_id =55 Tenant_id =55

Tenant_id =55

Tenant_id =56

Tenant_id =57

Реализация шардинга БД

Резервирование• Рост и уменьшение объёма

данных (покупка/продажа серверов)

Управление• ПО, Обновление, Высокая

доступность

Маршрутизация• Где находятся мои данные?

Управление секциями• Разбиение и слияние• Распределение данных

Шардинг

Что такое Federation?

С точки зрения базы данных это объект, который позволяет масштабировать базу данных и распределять её данные между отдельными базами данных.

С точки зрения пользователя это набор метаданных о том как распределены данные между базами данных и удобная модель работы с этими данными

Концепция Federations

Federation RootБаза данных в которой находится объект Federation

FederationFederation – объект Root базы данных, который знает как распределены данные между шардами

Federation Member (aka Шард): Отдельная база данных SQL Azure. Каждая такая база данных, хранит в себе часть общего набора данных.

SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation

Federation MembersFederation Root

Federations

Концепция Federations

Federation Distribution KeyКлюч, используемый для распределения данных внутри федерации. Он определяет тип данных ключа (uniqueidentifier, int, bigint, varbinary), и способ распределения данных (range). Его значение определяет Federation Member, на котором будут находиться данные.

Atomic UnitВсе данные имеющие одинаковый Federation Distribution Key. Например это все строки федеративных таблиц, которые имеют один федеративный ключ. Эта коллекция данных гарантированно будет находиться на одном и том-же шарде (federation member).

SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation

Federation MembersFederation Root

Federations member: Range [1000, 2000)

AUPK=5

AUPK=25

AUPK=35

AUPK=5

AUPK=25

AUPK=35

AUPK=1005

AUPK=1025

AUPK=1035

Atomic Units

Концепция Federations

Federated TablesСодержат кусочек распределённых данные. Federated tables создаются в federation members и содержат federation distribution key.

Reference TablesСодержат данные необходимые для lookup запросов. Создаются в Federation Member. Данные таблиц реплицируются между всеми Federation Members.

Central TableТаблицы, созданные в federation root базе данных. Используются в основном как набор метаданных.

SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation

Federation membersUser Database and Federation root

Federations

Federated Tables

Central Tables

Reference Tables

Маршрутизация

Приложение всегда вначале соединяется с ROOT databaseUSE FEDERATION – переключает в контекст конкретного federation member Данные с одинаковым значением federation key (atomic unit) всегда находятся в пределах одного federation member

SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation

Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]

USE FEDERATION CustomerFederation(customer_id = 5075) …

МаршрутизацияMember Connections

FILTERING=OFFРаботаем с данными всего Federation member

Неограниченный доступ к данным базы: Всё равно что соединиться по имени БДDDL, DML и доступ ко всем Atomic Units внутри Federation Member

Хорошо для…Management Tasks: Обновление схемы данныхFan-out Querying – получение данных нескольких atomic units

Microsoft ConfidentialMicrosoft Confidential

SalesDB

member: Range [100,200)

Customers(federated)

CustomerFederation Orders(federated)

Products(referece)

CustomerFederation

Customer_id=55

USE FEDERATION CustomerFederation(cid = 55) WITH RESET, FILTERING=OFFGO

FILTERING=ONРаботаем с данными одного Atomic Unit

Полностью доступны данные Reference TablesЗапрещены любые изменения глобального состояния Federation Member

Хорошо для…Безопасной модели разработкиПредотвращения утечки данных

МаршрутизацияFiltering Connections

Microsoft Confidential

SalesDB

member: Range [100,200)

Customers(federated)

CustomerFederation Orders(federated)

Products(referece)

CustomerFederationCustomer_id=55

Customer_id=55

USE FEDERATION CustomerFederation(cid = 55) WITH RESET, FILTERING=ONGO

Разделение шарда

Разделение шарда делается при помощи T-SQL команды SPLIT. Разделение шарда происходит без остановки работы приложения. Данные шарда недоступны в течении очень короткого промежутка времени.

SalesDBOrders_federationCustomerFederationerationCustomerFederation

Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]

ALTER FEDERATION CustomerFederation SPLIT AT (tenant_id=7500)

SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation

SPLIT в Действии

Appmember: Range [100,200)

Customer(federated)

CustomerAddress

(federated)

PostalCode(reference)

Member: Range [100,150) Member: Range [150,200)

Пример Multi-Tenant приложения

Пример: Приложение, обрабатывающее заказы множества покупателей и обслуживающее большую базу продуктов.

Database Name = SalesDBFederations =

CustomerFederation (CustomerId int RANGE)Federation distribution key = CustomerIdFederated Tables = Customers, OrdersReference Tables = Products

Sample Scenario – Multi-Tenant App

-- День #2 – Разворачиваем системуCREATE DATABASE SalesDBGOCREATE FEDERATION CustomerFederation(CustomerId int RANGE)GO

SalesDB

member: Range [MIN, NULL)

CustomerFederation

CREATE TABLE Products( ProductId int NOT NULL, SupplierId int NOT NULL, ProductName nvarchar(50) NOT NULL, Price decimal(12,2) NOT NULL, PRIMARY KEY(ProductId) )GO

Sample Scenario – Multi Tenant App

-- Соедняемся с federation memberUSE FEDERATION CustomerFederationeration(CustomerId = 0) WITH FILTERING = OFF, RESETGOCREATE TABLE Customers( CustomerId int NOT NULL, … PRIMARY KEY (CustomerId) )FEDERATED ON (CustomerId = CustomerId)GOCREATE TABLE Orders ( CustomerId int NOT NULL, OrderId uniqueidentifier NOT NULL, … PRIMARY KEY (OrderId, CustomerId))FEDERATED ON (CustomerId = CustomerId)GO

SalesDB

member: Range [MIN, NULL)

CustomerFederationCustomerFederation Customer(federated)

Orders(federated)

Products(reference)

Sample Scenario – Multi Tenant App

-- День #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

SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation

Демонстрация

SQL Azure Federations

Thanks To: Cihan Biyikoglu, Michael Thomassy, Slava Krasovsky and all SQL Azure Team…

Windows Azure Platform Training Kit

Multi-tenant SQL Azure Federations Sample

Multi-tenant SQL Azure Federations Sample

SQL Azure Federation Data Migration Wizard

SQL Azure Federation Data Migration Wizard

SQL Server and SQL Azure Shard Library

Масштабирование

МасштабированиеСпособность справляться с увеличением нагрузки без влияния на производительностьВысокая доступность и отказоустойчивостьУправляемость и сопровождаемость

Управление схемой данныхПоддержка управления схемами членов федерации. Больший контроль процесса обновления схемы

Эмуляция FederationsЛокальная эмуляция Federations, для того, чтобы разрабатывать приложения под Federations, не используя SQL Azure

Автоматический шардингАвтоматическое разбиение базы данных в зависимости от определённого критерия (время отклика, размер базы данных и т.п.)

Распределённые запросыПолучение данных с нескольких Federation Members одним запросом

Federations vNext

Полезные ссылкиМасштабирование в SQL Azure – Шардинг

http://reznik.uneta.com.ua/post/2011/05/16/sql-azure-federations-sharding-in-sql-azure.aspx

Знакомимся с SQL Azure Federationshttp://reznik.uneta.com.ua/post/2011/05/25/introducing-to-sql-azure-federations.aspx

SQL Azure - Your Data in the Cloud (Cihan Biyikoglu)http://blogs.msdn.com/b/cbiyikoglu/

Windows Azure Customer Advisory Teamhttp://windowsazurecat.com/

Video: Building Scale-Out Database Solutions on SQL Azurehttp://player.microsoftpdc.com/Session/591d586f-3732-4bff-8ee2-857f27d74df4

Windows Azure Platform Training Kit - October Updatehttp://www.microsoft.com/download/en/details.aspx?id=8396

Multi-tenant SQL Azure Federations Samplehttp://shard.codeplex.com/

SQL Azure Federation Data Migration Wizardhttp://sqlazurefedmw.codeplex.com/

SQL Server and SQL Azure Shard Libraryhttp://enzosqlshard.codeplex.com/

Как получить доступ?

Будет доступно до конца календарного годаСледите за анонсами на моём блоге:

http://reznik.uneta.com.ua

Мой электронный адрес:DenisReznik@live.ru

Вы сможете задать вопросы докладчику в зоне «Спроси эксперта» в течение часа после завершения этой сессии

Обратная связь

Уважаемые участники!Ваше мнение очень важно для нас!В блокноте, который находится в инфопаке участника, вы найдете анкету для оценки докладовПожалуйста, оцените доклад и сдайте анкету при выходе из зала модераторуДля участия в конкурсе заполненных анкет, отметьте в анкете номер, который указан на вашем бейдже

Спасибо!

Спасибо!

Масштабирование в SQL AzureSQL Azure FederationsДенис Резник

Internals

SQL Azure

Gateway Gateway Gateway Gateway Gateway Gateway

Gateway: TDS protocol gateway, enforces AUTHN/AUTHZ policy; proxy to CloudDB

SQL Azure Network Topology Application

InternetAzure Cloud

LB

TDS (tcp)

TDS (tcp)

TDS (tcp)

Applications use standard SQL client libraries: ODBC, ADO.Net, PHP, …

Load balancer forwards ‘sticky’ sessions to TDS protocol tier

Security Boundary

SQL SQL SQL SQL SQLSQL

Scalability and Availability: Fabric, Failover, Replication, and Load balancing

SQL Azure Database provisioning

TDS GatewayFront-end Node

Protocol Parser

Gateway Logic

Master Cluster

Master Node

Master Node Components

1

2

3

5 67

Scalability and Availability: Fabric, Failover, Replication, and Load balancingScalability and Availability: Fabric, Failover, Replication, and Load balancing

4

8

TDS Session

Backend Node 1SQL Instance

SQL DB

Backend Node 2SQL Instance

SQL DB

Backend Node 3SQL Instance

SQL DB