Презентация к докладу Резника Дениса (MVP (SQL Server), руководитель департамента веб-разработки в DCT).
В докладе будут рассмотрены основные принципы и техники масштабирования баз данных и возможности SQL Server и SQL Azure, которые упрощают этот процесс.
2. О себе
Руководитель департамента веб-разработки компании
Digital Cloud Technologies
Тренер Microsoft Innovation Center
Microsoft MVP (SQL Server)
Microsoft Certified Trainer
USSUG Lead
Блог: http://reznik.uneta.com.ua
Твиттер: @DenisReznik
Email: DenisReznik@live.ru
Track # – Session # 2
4. Масштабирование
Способность справляться с увеличением
нагрузки без влияния на производительность
Высокая доступность и отказоустойчивость
Управляемость и сопровождаемость
Track # – Session # 4
9. Горизонтальное масштабирование
База данных
Варианты масштабирования базы данных
Репликация
Дублирование данных на серверах
Шардинг
Распределение данных между серверами
Track # – Session # 9
15. Master-Slave репликация
Пишем на Master, читаем со Slave-ов
Масштабирование чтения
Запись не масштабируюется
Блокировки на всех серверах
Track # – Session # 15
18. AlwaysOn – Механизм работы
1
Commit Подтверждение
7 Подтверждение
6
Запись данных
2
в базу
2 Передача данных 4
Запись в
локальный Сохранено в Запись в
3 локальном log log 5
Log
DB Log Log DB
Track # – Session # 18
19. AlwaysOn
Переключение нескольких баз
(концепция Availability Groups)
Автоматическое переключение
Несколько копий базы
Чтение с копий
Перенаправление соединения
пользователя в случае отказа
основной базы
Track # – Session # 19
21. Резервирование Управление
• Рост и уменьшение объѐма • ПО, Обновление, Высокая
данных (покупка/продажа доступность
серверов)
Шардинг
Маршрутизация Управление секциями
• Где находятся мои данные? • Разбиение и слияние
• Распределение данных
Track # – Session # 21
22. Варианты шардинга данных
Диапазон – разбиение диапазона на секции
Диапазоны могут иметь разный размер
Хороший выбор для запросов по диапазону
Может не выдержать большой нагрузки
Хеширование – использование хэша в качестве
ключа
Отличное решение для распределения данных
Хорошее решение для выборки по ключу
Track # – Session # 22
23. Управление схемой
Дизайн схемы должен исключать взаимодействие
между базами данных
Процесс обновление схемы должен быть устойчивым
Track # – Session # 23
24. Распределѐнные запросы
Задумайтесь можно ли обойтись без них
Запускайте запросы к разным базам
параллельно и агрегируйте результаты
Используйте несколько соединений и
многопоточность для увеличения
производительности
Track # – Session # 24
25. SQL Server and SQL Azure shard library
Track # – Session # 25
27. SQL Azure Federations
С точки зрения базы данных это
объект, который позволяет
масштабировать базу данных и
распределять еѐ данные между
отдельными базами данных.
С точки зрения пользователя это
набор метаданных о том как
распределены данные между
базами данных и удобная модель
работы с этими данными
Track # – Session # 27
28. Концепция Fеderations
Federations
SalesDB
CustomerFederationeration
CustomerFederationeration
CustomerFederation
Federation Root
Federation Members
Federation Root
База данных в которой находится объект Federation
Federation
Federation – объект Root базы данных, который знает как распределены данные между шардами
Federation Member (aka Шард):
Отдельная база данных SQL Azure. Каждая такая база данных, хранит в себе часть общего набора
данных.
Track # – Session # 28
29. Концепция Fеderations
Federations member: Range [1000, 2000)
SalesDB AU AU AU
CustomerFederationeration
CustomerFederationeration
PK=5
AU
PK=25
AU
PK=35
AU
CustomerFederation PK=5
AU
PK=1005
PK=25
AU
PK=1025
PK=35
AU
PK=1035
Federation Root Atomic Units
Federation Distribution Key
Ключ, используемый для распределения данных внутри федерации. Он определяет тип
данных ключа (uniqueidentifier, int, bigint, varbinary), и способ распределения данных (range).
Его значение определяет Federation Member, на котором будут находиться данные.
Atomic Unit
Все данные имеющие одинаковый Federation Distribution Key. Например это все строки
федеративных таблиц, которые имеют один федеративный ключ. Эта коллекция данных
гарантированно будет находиться на одном и том-же шарде (federation member).
Track # – Session # 29
30. Концепция Fеderations
Central Tables
Federations
SalesDB
Federated Tables
CustomerFederationeration
CustomerFederationeration
CustomerFederation
Reference Tables
User Database and
Federation root Federation members
Federated Tables
Содержат кусочек распределѐнных данные. Federated tables создаются в federation members и
содержат federation distribution key.
Reference Tables
Содержат данные необходимые для lookup запросов. Создаются в Federation Member. Данные таблиц
реплицируются между всеми Federation Members.
Central Table
Таблицы, созданные в federation root базе данных. Используются в основном как набор метаданных.
Track # – Session # 30
31. Маршрутизация
USE FEDERATION CustomerFederation(customer_id = 5075) …
SalesDB
CustomerFederationeration
CustomerFederationeration
CustomerFederation
Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]
Приложение всегда вначале соединяется с ROOT database
USE FEDERATION – переключает в контекст конкретного
federation member
Данные с одинаковым значением federation key (atomic unit)
всегда находятся в пределах одного federation member
Track # – Session # 31
32. Маршрутизация – Member Connection
USE FEDERATION CustomerFederation(cid = 55)
WITH RESET, FILTERING=OFF
GO
member: Range [100,200)
Products
(referece) Customer_id=55
SalesDB
CustomerFederation
CustomerFederation Customers Orders
(federated) (federated)
Microsoft Confidential
FILTERING=OFF
Работаем с данными всего Federation member
Неограниченный доступ к данным базы: Всѐ равно что соединиться по имени БД
DDL, DML и доступ ко всем Atomic Units внутри Federation Member
Хорошо для…
Management Tasks: Обновление схемы данных
Fan-out Querying – получение данных нескольких atomic units
Track # – Session # 32
33. Маршрутизация – Filtering connection
USE FEDERATION CustomerFederation(cid = 55)
WITH RESET, FILTERING=ON
GO
member: Range [100,200)
Products
Customer_id=55
(referece)
SalesDB
CustomerFederation
CustomerFederation Customers Orders
(federated)Customer_id=55
(federated)
Microsoft Confidential
FILTERING=ON
Работаем с данными одного Atomic Unit
Полностью доступны данные Reference Tables
Запрещены любые изменения глобального состояния Federation Member
Хорошо для…
Безопасной модели разработки
Предотвращения утечки данных
Track # – Session # 33
34. Разделение шарда
ALTER FEDERATION CustomerFederation SPLIT AT (CustomerId=7500)
SalesDB
Orders_federation
CustomerFederationeration
CustomerFederation
Range Distribution [min,1000, 2000, 3000 ….. 5000, 10000, Max]
Разделение шарда делается при помощи T-SQL
команды SPLIT.
Разделение шарда происходит без остановки
работы приложения. Данные шарда недоступны
в течении очень короткого промежутка времени.
Track # – Session # 34
35. Сценарий применения
Приложение, обрабатывающее заказы
множества покупателей и обслуживающее
большую базу продуктов.
Database Name = SalesDB
Federations = CustomerFederation (CustomerId int
RANGE)
Federation distribution key = CustomerId
Federated Tables = Customers, Orders
Reference Tables = Products
Track # – Session # 35
38. SQL Azure Federations vNext
Управление схемой данных
Поддержка управления схемами членов федерации. Больший контроль
процесса обновления схемы
Эмуляция Federations
Локальная эмуляция Federations, для того, чтобы разрабатывать
приложения под Federations, не используя SQL Azure
Автоматический шардинг
Автоматическое разбиение базы данных в зависимости от
определѐнного критерия (время отклика, размер базы данных и т.п.)
Распределѐнные запросы
Получение данных с нескольких Federation Members одним запросом
Track # – Session # 38
39. Масштабирование
Способность справляться с увеличением
нагрузки без влияния на производительность
Высокая доступность и отказоустойчивость
Управляемость и сопровождаемость
Track # – Session # 39
40. Масштабирование
Масштабирование в 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/
Track # – Session # 40