Основы SQL Server на Linux

Выбор платформы

В мае 2016 был выпущен Microsoft SQL Server 2016, который стал 11 редакцией SQL Server. Одновременно с большой работой по запуску этой редакции команда разработчиков уже работала над SQL Server 2017, для которого ключевым заголовком в перечне функциональности могла бы быть наконец реализованная поддержка в SQL Server 2017 для Linux и контейнеров.

Перевод SQL Server в Linux является ещё одним способом сделать продукты Microsoft более доступными для более широкого круга пользователей. Решение перенести SQL Server в Linux не было связано с отказом от Windows Server. Речь шла о создании платформы данных как для Windows, так и для Linux. Речь шла о предоставлении клиентам права выбора платформ.

Во- первых, стало ясно, что в отрасли наметилась тенденция относительно того, что Linux становится очень популярным. Сегодняшние исследования показывают, что около 30% корпоративных серверов в настоящее время используют какой- то дистрибутив Linux. Исследования независимых фирм показывают, что серверы Linux - самый быстрорастущий сегмент ОС.

Во- вторых, даже внутри Microsoft обнаружилась такая тенденция. Для виртуальных машин Microsoft Azure самой быстрорастущей гостевой операционной системой стал Linux. У Microsoft имелись клиенты, которые размещали "смешанные" среды (Linux и Windows Server) и приходили с вопросом, рассматривается ли когда-нибудь в будущем доступность SQL Server поверх Linux.

Наконец, партнёры Linux начали спрашивать не рассматривается ли перемещение SQL Server в Linux.

Проект Drawbridge

В марте 2011 команда Microsoft Research опубликовала статью с названием Rethinking the Library OS from the Top Down. Данная статья основывалась на некоем прототипе проекта с названием Drawbridge и концепции, именуемой как библиотечная ОС (library OS). В 2011 году, виртуализация была очень горячей и чрезвычайно популярной темой. Виртуальные машины были неким общим механизмом для осуществления консолидации проектов и абстрагировании приложений от лежащего в основе оборудования. Единственная проблема состоит в том, что виртуальные машины являются тяжёлым ресурсом.

Команда Drawbridge (Разводной мост) искала способ создать нечто с меньшим весом, но сохранить преимущества виртуализации. Более того, было обнаружено в ходе изысканий, что многие службы и вызовы API (интерфейсов прикладного программирования), требующихся приложениям Windows в действительности не обязаны выполняться внутри ядра Windows. Более предпочтительно наличие возможности запуска такого кода, который поддерживает многие API Windows в режиме пользователя, тем самым уменьшая переключения контекста основного ядра. Сокращение переключений контекста повышает производительность и приводит к более эффективным приложениям и использованию вычислительных ресурсов.

Основным результатом этого проекта было некое понятие с названием пикопроцесс (picoprocess), исполняемым в библиотечной ОС, действенно создавая PAL (Platform Abstraction Layer, Уровень абстракции платформы).

Нижеприведенный рисунок отображает архитектуру, полученную в результате.

1jpg

 На рисунке сам пикопроцесс представляет некий двоичный файл, который сочетает ваше приложение и необходимые компоненты библиотечной ОС в обособленном процессе. Прелесть данного подхода заключается в том, что ваше приложение и его DLL не изменяются. Не требуется никакая повторная компиляция или какие- то изменения. Именно такой подход позволил включить эту концепцию и применить её в другой операционной системе такой как Linux, и это двоичный интерфейс приложения (ABI, Application Binary Interface). Многие API Windows (на данной схеме они представлены вызовами Win32 и NT) реализуются в данном процессе самой библиотечной ОС, в то время как примерно 45 выставляются через имеющийся PAL и устанавливают соответствие своего ABI и в конечном счёте лежащей в основе ОС.

Архитектура SQL Server поверх Linux

В результате изысканий Microsoft пришел к гибридной стратегии. Были объединены в SQL Server Operation System (SOS) и библиотечная ОС из Drawbridge для создания SQL PAL (SQL Platform Abstraction Layer, Уровня абстракции платформы SQL). Что касается тех областей Библиотечной ОС, которые не требуются SQL Server, их следовало удалить. Для слияния этих архитектур потребовались изменения на всех уровнях имеющегося стека.

Полученная новая архитектура состоит из набора непосредственных API SOS, которые не проходят через системные вызовы Win32 или NT. Для кода без непосредственных API SOS они будут осуществляться через некий размещаемый API Windows (такой как MSXML) или NTUM (API пользовательского режима NT - это более 1500 системных вызовов Win32 или NT). Все подсистемы, такие как управление хранилищем, сетью или ресурсами будут основаны на SOS и будут совместно использоваться напрямую SOS и API NTUM.

Подводя всему этому итог, окончательные архитектура и подход состояли в слиянии нашего имеющегося кода SQLOS с библиотечной ОС от Drawbridge для создания законченной концепции SQLPAL, приведенной на рисунке ниже.

 2jpg

 Давайте вычленим все компоненты и то, как они взаимодействуют при воссоздании данной архитектуры. Обратите внимание, что в данной схеме, в точности, как и в Drawbridge, некий обособленный процесс Linux содержит само приложение (SQLSERVR.EXE), библиотечную ОС (LibOS) и PAL (в данном случае это SQLPAL). В качестве названия этого процесса в Linux выступает sqlservr. SQLSERVER представляет тот же самый двоичный файл SQLSERVR.EXE из Windows и его компоненты DLL, включая sqlmin.dll, sqllang.dll и прочие. LibOS это соответствующие DLL и службы Windows, которые поддерживают API Windows. Они включают в свой состав kernel32.dll, advapi32.dll и такие службы как RPCSS.EXE.

SQLPAL имеет два компонента:

·     SQLOS: снаряжается из Windows в виде SQLDK.DLL

·     QLPAL.DLL: Именно она выступает тем ключевым компонентом, который будет реализовывать всю функциональность Windows, требующуюся со стороны LibOS или переправлять все вызовы, которым требуются службы ядра Linux в некий компонент с названием Host Extension (Расширение хоста). Неким примером той функциональности, которая реализуется в SQLPAL являются вызовы реестра Windows, а примером того, что требует самого ядра Linux, выступает выделение памяти.

Возможности SQL Server поверх Linux

SQL Server 2017 имеет множество возможностей и свойств, нацеленных на производительность, безопасность и высокую доступность. Рассмотрим те возможности и свойства, которые доступны для SQL Server поверх Linux:       

  • Некая центральная система SQLOS для планирования, управления памятью и руководства, и управления ресурсами, которые предоставляют встроенные масштабируемость и распознают такие важные архитектуры сервера как NUMA

·         Компоненты механизма ядра для управления буфером, обработкой запросов, исполнением запросов, механизмом хранения и методами доступа

·         Основополагающие операции управления подобные BACKUP/ RESTORE, управлению индексами и командам DBCC (командной строки базы данных)

·         Наш знаменитейший язык T-SQL неизменно работающий за исключением какого- то числа свойств и возможностей, которые не поддерживаются в данном выпуске

·         Рабочие нагрузки в оперативной памяти, такие как индексация Хранилища столбцов и OLTP в оперативной памяти

·         Новые интеллектуальные свойства базы данных, такие как адаптивная обработка запроса (AQP,adaptive query processing) и Автоматическое регулирование (Automatic Tuning).

·         Группы доступности AlwaysOn Availability Groups поддерживаются в полной функциональности.

·         Экземпляр отказоустойчивого кластера Always On (AO FC) в Linux поддерживается с помощью Pacemaker и Corosync.

·         Свойства безопасности, такие как постоянное шифрование, динамическое маскирование данных, безопасность уровня строк, аудит и Прозрачное шифрование данных (TDE, Transparent Data Encryption)

·         Аутентификация SQL Serber и Active Directory при регистрации

·         Зашифрованные соединения поддерживаются с помощью TLS (Transport Layer Security)

·         Богатая функциональность программирования, такая как SQLCLR (только безопасные - SAFE - сборки), возможности T-SQL JSON и базы данных графов

·         Служба планирования Агента SQL Server поддерживает подсистему команд T-SQL

·         Поддерживаются SSIS (SQL Server Integration Services) для фундаментальных операций выделения, преобразования и загрузки (ETL)

·         В SQL Server поверх Linux инструменты работают "как есть", включая SQL Server Management Studio (исполняется в Windows), SQL Server Data Tools (исполняется в Windows) и прочие расширения mssql в соде Visual Studio (межплатформный инструментарий)

·         В Linux поддерживаются естественные инструменты командной строки , в том числе sqlcmd и bcp

·         Диагностика SQL Server, такая как расширенные события, представления динамического управления, предсталения каталога и возможности диагностики плана запроса

Редакции

·         Enterprise (Корпоративная): Это наиболее полно укомплектованная редакция. Она разработана для применения, как и у казанов её названии, в приложениях Корпоративных баз данных. С точки зрения лицензирования, имеются две разновидности Корпоративной редакции: Enterprise и Enterprise Core. Enterprise Core имеет все возможности, в то время как Enterprise обладает рядом ограничений по использованию конкретного числа вычислительных ядер. Enterprise доступна только для определённых пользователей, которые имеют договорные отношения с Microsoft.

·         Standard (Стандартная): Эта редакция разработана для предоставления основной функциональности SQL Server для приложений, имеющих целью подразделения меньшего размера или рабочие нагрузки со средним уровнем. Одно основное изменение сделанным в SQL Server 2016 SP1 было открытие некоторых функций в Стандартной редакции, которые ранее были доступны только для Корпоративной редакции. Смысл состоял в том, чтобы разработчики могли создавать приложения и не беспокоиться о том на какую именно редакцию нацелено их приложение. Имеются ограничения на размеры этих свойств для работы в данной Стандартной редакции, но они тем не менее теперь доступны.

·         Developer (Разработчика): Это свободно распространяемая редакция, которая содержит все доступные в Корпоративной редакции функциональности. Тем не менее, согласно лицензии для данной редакции, она ограничивается только целями разработки для промышленного применения. Вы можете применять эту редакцию для построения и проверки вашего приложения.

·         Web (Веб): Эта редакция подобна Стандартной, с более низкими пределами и специализированной стоимостью имеющей целью веб хостинг.

·         Express (Экспресс): Это самая базовая редакция, но она распространяется свободно и может применяться в промышленном использовании.

·         SQL Server предлагает Evaluation (Оценочную) редакцию. 


Alexander Kalenik,
Senior Premier Field Engineer,
Microsoft Support,
PhD