sql rally 2012 - масштабируемость sql server и sql azure
DESCRIPTION
Презентация к докладу Резника Дениса (MVP (SQL Server), руководитель департамента веб-разработки в DCT). В докладе будут рассмотрены основные принципы и техники масштабирования баз данных и возможности SQL Server и SQL Azure, которые упрощают этот процесс.TRANSCRIPT
МАСШТАБИРУЕМОСТЬ SQL SERVER И SQL AZURE
Денис Резник[email protected]
2Track # – Session #
О себе
Руководитель департамента веб-разработки компании Digital Cloud Technologies
Тренер Microsoft Innovation Center
Microsoft MVP (SQL Server)
Microsoft Certified Trainer
USSUG Lead
Блог: http://reznik.uneta.com.ua
Твиттер: @DenisReznik
Email: [email protected]
v
Масштабирование
4Track # – Session #
Масштабирование
Способность справляться с увеличением нагрузки без влияния на производительность
Высокая доступность и отказоустойчивость
Управляемость и сопровождаемость
5Track # – Session #
Вертикальное масштабированиеScale Up
Купить мощный сервер
Добавлять серверу ресурсы
Есть потолок масштабируемости
6Track # – Session #
Вертикальное масштабированиеSQL Server
Горячее добавление памяти и процессоров
Поддержка до 256 ядер
7Track # – Session #
Вертикальное масштабированиеSQL Azure
Scale Up в SQL Azure нет! 32 GB RAM, 8 cores
8Track # – Session #
Горизонтальное масштабированиеScale Out
Распределить данные и нагрузку между несколькими серверами
Не имеет границ масштабирования
9Track # – Session #
Горизонтальное масштабированиеБаза данных
Варианты масштабирования базы данных
Репликация
Дублирование данных на серверах
Шардинг
Распределение данных между серверами
DataData...
v
Техники горизонтального масштабирования
11Track # – Session #
Shared Databases
Общий SAN с базой данных
До восьми инстансов SQL Server
База данных – только для чтения
12Track # – Session #
Partitioned Tables
Таблица разбивается на секции
В пределах одной физической машины
13Track # – Session #
Distributed Partitioned Views
Секционированное представление
Linked Server
v
Репликация
15Track # – Session #
Master-Slave репликация
Пишем на Master, читаем со Slave-ов
Масштабирование чтения
Запись не масштабируюется
Блокировки на всех серверах
16Track # – Session #
Peer-to-Peer репликация
Пишем на все сервера
Читаем со всех серверов
Синхронизация данных
17Track # – Session #
AlwaysOn
A
A
A
A
18Track # – Session #
AlwaysOn – Механизм работы
Commit
Запись в локальный Log
Передача данных
Запись в log
Log
Подтверждение
Сохранено в локальном log
Запись данных в базу
Подтверждение
DBDB Log
1
2
2
3
4
5
6
7
19Track # – Session #
AlwaysOn
Переключение нескольких баз (концепция Availability Groups)
Автоматическое переключение
Несколько копий базы
Чтение с копий
Перенаправление соединения пользователя в случае отказа основной базы
v
ШардингSQL Server
21Track # – Session #
Резервирование• Рост и уменьшение объёма
данных (покупка/продажа серверов)
Управление• ПО, Обновление, Высокая
доступность
Маршрутизация• Где находятся мои данные?
Управление секциями• Разбиение и слияние• Распределение данных
Шардинг
22Track # – Session #
Варианты шардинга данных
Диапазон – разбиение диапазона на секции
Диапазоны могут иметь разный размер
Хороший выбор для запросов по диапазону
Может не выдержать большой нагрузки
Хеширование – использование хэша в качестве ключа
Отличное решение для распределения данных
Хорошее решение для выборки по ключу
23Track # – Session #
Управление схемой
Дизайн схемы должен исключать взаимодействие между базами данных
Процесс обновление схемы должен быть устойчивым
24Track # – Session #
Распределённые запросы
Задумайтесь можно ли обойтись без них
Запускайте запросы к разным базам параллельно и агрегируйте результаты
Используйте несколько соединений и многопоточность для увеличения производительности
25Track # – Session #
SQL Server and SQL Azure shard library
v
ШардингSQL Azure
27Track # – Session #
SQL Azure Federations
С точки зрения базы данных это объект, который позволяет масштабировать базу данных и распределять её данные между отдельными базами данных.
С точки зрения пользователя это набор метаданных о том как распределены данные между базами данных и удобная модель работы с этими данными
28Track # – Session #
Концепция Fеderations
Federation Root
База данных в которой находится объект Federation
Federation
Federation – объект Root базы данных, который знает как распределены данные между шардами
Federation Member (aka Шард):
Отдельная база данных SQL Azure. Каждая такая база данных, хранит в себе часть общего набора данных.
SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation
Federation MembersFederation Root
Federations
29Track # – Session #
Концепция Fеderations
Federation Distribution Key
Ключ, используемый для распределения данных внутри федерации. Он определяет тип данных ключа (uniqueidentifier, int, bigint, varbinary), и способ распределения данных (range). Его значение определяет Federation Member, на котором будут находиться данные.
Atomic Unit
Все данные имеющие одинаковый Federation Distribution Key. Например это все строки федеративных таблиц, которые имеют один федеративный ключ. Эта коллекция данных гарантированно будет находиться на одном и том-же шарде (federation member).
SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation
Federation 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
30Track # – Session #
Концепция Fеderations
Federated Tables
Содержат кусочек распределённых данные. Federated tables создаются в federation members и содержат federation distribution key.
Reference Tables
Содержат данные необходимые для lookup запросов. Создаются в Federation Member. Данные таблиц реплицируются между всеми Federation Members.
Central Table
Таблицы, созданные в federation root базе данных. Используются в основном как набор метаданных.
SalesDBCustomerFederationerationCustomerFederationerationCustomerFederation
Federation members
User Database and Federation root
Federations
Federated Tables
Central Tables
Reference Tables
31Track # – Session #
Маршрутизация
Приложение всегда вначале соединяется с ROOT database
USE 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) …
32Track # – Session #
Маршрутизация – Member Connection
FILTERING=OFF
Работаем с данными всего Federation member
Неограниченный доступ к данным базы: Всё равно что соединиться по имени БД
DDL, DML и доступ ко всем Atomic Units внутри Federation Member
Хорошо для…
Management Tasks: Обновление схемы данных
Fan-out Querying – получение данных нескольких atomic units
Microsoft 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
33Track # – Session #
Маршрутизация – Filtering connection
FILTERING=ON
Работаем с данными одного Atomic Unit
Полностью доступны данные Reference Tables
Запрещены любые изменения глобального состояния Federation Member
Хорошо для…
Безопасной модели разработки
Предотвращения утечки данных
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
34Track # – Session #
Разделение шарда
Разделение шарда делается при помощи T-SQL команды SPLIT.
Разделение шарда происходит без остановки работы приложения. Данные шарда недоступны в течении очень короткого промежутка времени.
SalesDBOrders_federationCustomerFederationerationCustomerFederation
Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]
ALTER FEDERATION CustomerFederation SPLIT AT (CustomerId=7500)
35Track # – Session #
Сценарий применения
Приложение, обрабатывающее заказы множества покупателей и обслуживающее большую базу продуктов.
Database Name = SalesDB
Federations = CustomerFederation (CustomerId int RANGE)
Federation distribution key = CustomerId
Federated Tables = Customers, Orders
Reference Tables = Products
v
ДемонстрацияSQL Azure Federations
37Track # – Session #
БД размером 75 Тб
38Track # – Session #
SQL Azure Federations vNext
Управление схемой данных
Поддержка управления схемами членов федерации. Больший контроль процесса обновления схемы
Эмуляция Federations
Локальная эмуляция Federations, для того, чтобы разрабатывать приложения под Federations, не используя SQL Azure
Автоматический шардинг
Автоматическое разбиение базы данных в зависимости от определённого критерия (время отклика, размер базы данных и т.п.)
Распределённые запросы
Получение данных с нескольких Federation Members одним запросом
39Track # – Session #
Масштабирование
Способность справляться с увеличением нагрузки без влияния на производительность
Высокая доступность и отказоустойчивость
Управляемость и сопровождаемость
40Track # – Session #
МасштабированиеМасштабирование в SQL Azure – Шардинг http://reznik.uneta.com.ua/post/2011/05/16/sql-azure-federations-sharding-in-sql-azure.aspx
Знакомимся с SQL Azure Federations http://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/
Peer-to-Peer Replication http://www.sql-server-performance.com/2008/peertopeer-replication-in-sql-server-2008/
How to setup Availability Groups http://www.brentozar.com/archive/2011/07/how-set-up-sql-server-denali-availability-groups/
Multi-tenant SQL Azure Federations Sample http://shard.codeplex.com/
SQL Azure Federation Data Migration Wizard http://sqlazurefedmw.codeplex.com/
SQL Server and SQL Azure Shard Library http://enzosqlshard.codeplex.com/
v
Спасибо!