Архитектура расширяемости в службах машинного обучения SQL Server.Extensibility architecture in SQL Server Machine Learning Services

Применимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздние версииПрименимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) and later

В этой статье описывается архитектура платформы расширяемости для запуска в Службах машинного обучения SQL Server внешнего скрипта Python или R.This article describes the architecture of the extensibility framework for running an external Python or R script on SQL server Machine Learning Services. Сценарий выполняется в среде языковой среды в качестве расширения ядра СУБД.The script executes in a language runtime environment as an extension to the core database engine.

Историческая справкаBackground

Платформа расширяемости появилась в SQL Server 2016 для поддержки среды выполнения R посредством служб R.The extensibility framework was introduced in SQL Server 2016 to support the R runtime with R Services. В SQL Server 2017 и более поздних версий Службы машинного обучения поддерживают Python.SQL Server 2017 and later has support for Python with Machine Learning Services.

Целью платформы расширяемости является предоставление интерфейса между SQL Server и языками обработки и анализа данных, такими как R и Python.The purpose of the extensibility framework is to provide an interface between SQL Server and data science languages such as R and Python. Целью является сокращение трения при перемещении решений обработки и анализа данных в рабочую среду и защита данных, предоставляемых в процессе разработки.The goal is to reduce friction when moving data science solutions into production, and protecting data exposed during the development process. Выполняя доверенный язык сценариев на безопасной платформе, управляемой SQL Server, администраторы баз данных могут поддерживать безопасность, обеспечивая анализаторам данных доступ к корпоративным данным.By executing a trusted scripting language within a secure framework managed by SQL Server, database administrators can maintain security while allowing data scientists access to enterprise data.

Следующая диаграмма наглядно описывает возможности и преимущества расширяемой архитектуры.The following diagram visually describes opportunities and benefits of the extensible architecture.

Цели интеграции с SQL ServerGoals of integration with SQL Server

Внешний сценарий может быть запущен путем вызова хранимой процедуры, а результаты возвращаются в виде табличных результатов непосредственно в SQL Server.An external script can be run by calling a stored procedure, and the results are returned as tabular results directly to SQL Server. Это упрощает создание или использование машинного обучения из любого приложения, которое может отправлять SQL-запрос и обрабатывать результаты.This makes it easy to generate or consume machine learning from any application that can send a SQL query and handle the results.

  • Выполнение внешнего сценария зависит от безопасности данных в SQL Server.External script execution is subject to SQL Server data security. Пользователь, выполняющий внешний сценарий, может получить доступ только к тем данным, которые доступны в SQL-запросе.A user running an external script can only access data that is equally available in a SQL query. Если запрос завершается ошибкой из-за недостаточных разрешений, сценарий, запущенный этим же пользователем, завершится ошибкой по той же причине.If a query fails due to insufficient permission, a script run by the same user would also fail for the same reason. Безопасность SQL Server может осуществляться на уровне таблицы, базы данных или экземпляра.SQL Server security is enforced at the table, database, and instance level. Администраторы баз данных могут управлять доступом пользователей, ресурсами, используемыми внешними сценариями, а также внешними библиотеками кода, добавленными на сервер.Database administrators can manage user access, resources used by external scripts, and external code libraries added to the server.

  • Возможности масштабирования и оптимизации основываются на двух выгодах: выгода от платформы баз данных (индексы ColumnStore, управление ресурсами); и выгода для конкретных расширений, например, если для моделей обработки и анализа данных используются библиотеки Майкрософт для R и Python.Scale and optimization opportunities have a dual basis: gains through the database platform (ColumnStore indexes, resource governance); and extension-specific gains, for example when Microsoft libraries for R and Python are used for data science models. В то время как R является однопотоковым, функции RevoScaleR являются многопоточными и способны распределять рабочую нагрузку по нескольким ядрам.Whereas R is single-threaded, RevoScaleR functions are multi-threaded, capable of distributing a workload over multiple cores.

  • Развертывание использует методологии SQL Server.Deployment uses SQL Server methodologies. Это могут быть хранимые процедуры, охватывающие внешний сценарий, внедренный SQL или запросы T-SQL, вызывающие такие функции, как PREDICT, для возврата результатов из моделей прогнозирования, сохраненных на сервере.These can be stored procedures wrapping an external script, embedded SQL, or T-SQL queries calling functions like PREDICT to return results from forecasting models persisted on the server.

  • Разработчики с установленными навыками в определенных средствах и IDE могут писать код в этих средствах, а затем переносить код в SQL Server.Developers with established skills in specific tools and IDEs can write code in those tools and then port the code to SQL Server.

Диаграмма архитектурыArchitecture diagram

Архитектура разработана таким образом, что внешние сценарии выполняются в отдельном от SQL Server процессе, но с компонентами, которые внутренне управляют цепочкой запросов на данные и операции в SQL Server.The architecture is designed such that external scripts run in a separate process from SQL Server, but with components that internally manage the chain of requests for data and operations on SQL Server. В зависимости от версии SQL Server поддерживаемые языковые расширения включают R, Python и сторонние языки, такие как Java и .NET.Depending on the version of SQL Server, supported language extensions include R, Python, and third-party languages such as Java and .NET.

*Архитектура компонентов в Windows: _*Component architecture in Windows: _

Архитектура компонентов WindowsWindows component architecture

*Архитектура компонентов в Linux:*Component architecture in Linux:

Архитектура компонентов LinuxLinux component architecture

Компоненты включают в себя службу _ *панели запуска**, которая используется для вызова внешних сред выполнения и логики, зависящей от библиотеки, для загрузки интерпретаторов и библиотек.Components include a _ launchpad* service used to invoke external runtimes and library-specific logic for loading interpreters and libraries. Средство запуска загружает языковую среду выполнения и все собственные модули.The launcher loads a language runtime, plus any proprietary modules. Например, если код включает функции RevoScaleR, загружается интерпретатор RevoScaleR.For example, if your code includes RevoScaleR functions, a RevoScaleR interpreter is loaded. BxlServer и вспомогательная служба SQL управляет связью и обменом данными с SQL Server.BxlServer and SQL Satellite manage communication and data transfer with SQL Server.

В Linux SQL использует службу панели запуска для взаимодействия с отдельным процессом панели запуска для каждого пользователя.In Linux, SQL uses a launchpadd service to communicate with a separate launchpad process for each user.

Панель запускаLaunchpad

Панель запуска SQL ServerSQL Server Launchpad — это новая служба, которая управляет и запускает внешние скрипы, аналогично тому, как служба полнотекстового индексирования и обработки запросов запускается на отдельном узле для обработки полнотекстовых запросов.The Панель запуска SQL ServerSQL Server Launchpad is a service that manages and executes external scripts, similar to the way that the full-text indexing and query service launches a separate host for processing full-text queries. Служба панели запуска может запускать только доверенные средства запуска, опубликованные или сертифицированные корпорацией Майкрософт как соответствующие требованиям к управлению ресурсами и производительностью.The launchpad service can start only trusted launchers that are published by Microsoft, or that have been certified by Microsoft as meeting requirements for performance and resource management.

Доверенные средства запускаTrusted launchers РасширениеExtension Версии SQL ServerSQL Server versions
RLauncher. dll для языка R для WindowsRLauncher.dll for the R language for Windows Расширение RR extension SQL Server 2016 и более поздние версииSQL Server 2016 and later
Pythonlauncher.dll для Python 3.5 для WindowsPythonlauncher.dll for Python 3.5 for Windows Расширение PythonPython extension SQL Server 2017 и более поздние версииSQL Server 2017 and later
RLauncher. dll для языка R для LinuxRLauncher.so for the R language for Linux Расширение RR extension SQL Server 2019 и более поздние версииSQL Server 2019 and later
Pythonlauncher.so для Python 3.5 для LinuxPythonlauncher.so for Python 3.5 for Linux Расширение PythonPython extension SQL Server 2019 и более поздние версииSQL Server 2019 and later

Служба Панель запуска SQL ServerSQL Server Launchpad выполняется со своей собственной учетной записью пользователя.The Панель запуска SQL ServerSQL Server Launchpad service runs under its own user account. При изменении учетной записи, запускающей панель запуска, не забудьте сделать это с помощью диспетчера конфигурации SQL Server, чтобы обеспечить запись изменений в связанные файлы.If you change the account that runs launchpad, be sure to do so using SQL Server Configuration Manager, to ensure that changes are written to related files.

В Windows для каждого экземпляра ядра СУБД, к которому были добавлены SQL Server Службы машинного обучения, создается отдельная служба Панель запуска SQL ServerSQL Server Launchpad.In Windows, a separate Панель запуска SQL ServerSQL Server Launchpad service is created for each database engine instance to which you have added SQL Server Machine Learning Services. Для каждого экземпляра ядра СУБД существует одна служба панели запуска, поэтому при наличии нескольких экземпляров с поддержкой внешних сценариев для каждой из них будет установлена служба панели запуска.There is one launchpad service for each database engine instance, so if you have multiple instances with external script support, you will have a launchpad service for each one. Экземпляр ядра СУБД привязан к созданной для нее службе панели запуска.A database engine instance is bound to the launchpad service created for it. Все вызовы внешнего скрипта в хранимой процедуре или T-SQL приводят к тому, что служба SQL Server вызывает службу панели запуска, созданную для того же экземпляра.All invocations of external script in a stored procedure or T-SQL result in the SQL Server service calling the launchpad service created for the same instance.

Для выполнения задач на определенном поддерживаемом языке панель запуска получает защищенную рабочую учетную запись из пула и запускает вспомогательный процесс для управления внешней средой выполнения.To execute tasks in a specific supported language, the launchpad gets a secured worker account from the pool, and starts a satellite process to manage the external runtime. Каждый вспомогательный процесс наследует учетную запись пользователя панели запуска и использует эту учетную запись в течение времени выполнения сценария.Each satellite process inherits the user account of the launchpad and uses that worker account for the duration of script execution. Если в сценарии используются параллельные процессы, они создаются под одной рабочей учетной записью.If script uses parallel processes, they are created under the same, single worker account.

В Linux поддерживается только один экземпляр ядра СУБД, и к нему привязана одна служба с заданной панелью запуска.In Linux, only one database engine instance is supported and there is one launchpadd service bound to the instance. При выполнении сценария служба панели запуска запускает отдельный процесс панели запуска с учетной записью пользователя с низким уровнем прав mssql_satellite.When a script is executed, the launchpadd service starts a separate launchpad process with the low-privileged user account mssql_satellite. Каждый вспомогательный процесс наследует учетную запись пользователя панели запуска и использует эту учетную запись в течение времени выполнения сценария.Each satellite process inherits the mssql_satellite user account of launchpad and uses that for the duration of script execution.

BxlServer и вспомогательное соединение SQLBxlServer and SQL Satellite

BxlServer — это исполняемый объект, предоставляемый корпорацией Майкрософт, который управляет связью между SQL Server и языковой средой выполнения.BxlServer is an executable provided by Microsoft that manages communication between SQL Server and the language runtime. Он создает объекты задания Windows для Windows или пространства имен для Linux, которые используются для хранения сеансов внешних сценариев.It creates the Windows job objects for Windows, or the namespaces for Linux, that are used to contain external script sessions. Он также предоставляет защищенные рабочие папки для каждого задания внешнего сценария и использует вспомогательную среду SQL для управления обменом данными между внешней средой выполнения и SQL Server.It also provisions secure working folders for each external script job and uses SQL Satellite to manage data transfer between the external runtime and SQL Server. При запуске Process Explorer во время выполнения задания может появиться один или несколько экземпляров BxlServer.If you run Process Explorer while a job is running, you might see one or multiple instances of BxlServer.

По сути, BxlServer — это вспомогательная среда языковой среды, которая работает с SQL Server для перемещения данных и управления задачами.In effect, BxlServer is a companion to a language runtime environment that works with SQL Server to transfer data and manage tasks. BXL расшифровывается как двоичный язык Exchange и ссылается на формат данных, используемый для эффективного перемещения данных между SQL Server и внешними процессами.BXL stands for Binary Exchange language and refers to the data format used to move data efficiently between SQL Server and external processes. BxlServer также является важной частью соответствующих продуктов, таких как Microsoft R Client и Microsoft R Server.BxlServer is also an important part of related products such as Microsoft R Client and Microsoft R Server.

Вспомогательное соединение SQL — это API расширяемости, который включен в ядро СУБД для поддержки внешнего кода или внешних сред выполнения, реализованных на языке C или C++.SQL Satellite is an extensibility API, included in the database engine, that supports external code or external runtimes implemented using C or C++.

BxlServer использует вспомогательное соединение SQL для следующих задач:BxlServer uses SQL Satellite for these tasks:

  • чтение входных данных;Reading input data
  • запись выходных данных;Writing output data
  • получение входных аргументов;Getting input arguments
  • запись входных аргументов;Writing output arguments
  • Обработка ошибокError handling
  • обратная запись StdOut и StdErr в клиент.Writing STDOUT and STDERR back to client

Вспомогательное соединение SQL использует пользовательский формат данных, оптимизированный для быстрой передачи данных между SQL Server и языками внешних скриптов.SQL Satellite uses a custom data format that is optimized for fast data transfer between SQL Server and external script languages. Оно выполняет преобразования типов и определяет схемы входных и выходных наборов данных во время обмена данными между SQL Server и средой выполнения внешнего сценария.It performs type conversions and defines the schemas of the input and output datasets during communications between SQL Server and the external script runtime.

Вспомогательное соединение SQL можно отслеживать с помощью расширенных событий (xEvents).The SQL Satellite can be monitored by using windows extended events (xEvents). Дополнительные сведения см. в разделе о расширенных событиях для Служб машинного обучения SQL Server.For more information, see Extended Events for SQL Server Machine Learning Services.

Каналы связи между компонентамиCommunication channels between components

В этом разделе описаны протоколы связи между компонентами и платформами данных.Communication protocols among components and data platforms are described in this section.

  • TCP/IPTCP/IP

    По умолчанию для внутренней связи между SQL Server и вспомогательным соединением SQL используется протокол TCP/IP.By default, internal communications between SQL Server and the SQL Satellite use TCP/IP.

  • Именованные каналыNamed Pipes

    Для внутренней передачи данных между BxlServer и через вспомогательное соединение SQL используется внутренний формат сжатых данных для оптимизации производительности.Internal data transport between the BxlServer and SQL Server through SQL Satellite uses a proprietary, compressed data format to enhance performance. Данные передаются между временем языкового запуска и BxlServer в формате BXL с использованием именованных каналов.Data is exchanged between language run times and BxlServer in BXL format, using Named Pipes.

  • ODBCODBC

    Взаимодействие между внешними клиентами обработки и анализа данных и удаленным экземпляром SQL Server происходит с помощью ODBC.Communications between external data science clients and a remote SQL Server instance use ODBC. Учетная запись, отправляющая задания в рамках сценариев в SQL Server, должна иметь разрешения и для подключения к экземпляру, и для выполнения внешних скриптов.The account that sends the script jobs to SQL Server must have both permissions to connect to the instance and to run external scripts.

    Кроме того, в зависимости от задачи учетной записи могут потребоваться следующие разрешения:Additionally, depending on the task, the account might need these permissions:

    • Чтение данных, используемых заданиемRead data used by the job
    • Запись данных в таблицы. Например, при сохранении результатов в таблицу.Write data to tables: for example, when saving results to a table
    • Создание объектов базы данных. Например, при сохранении внешнего сценария как части новой хранимой процедуры.Create database objects: for example, if saving external script as part of a new stored procedure.

    Когда SQL Server используется как контекст вычислений для выполняемого сценария, отправленного с удаленного клиента, а исполняемый сценарий должен получать данные из внешнего источника, для обратной записи используется ODBC.When SQL Server is used as the compute context for script executed from a remote client, and the executable must retrieve data from an external source, ODBC is used for writeback. SQL Server сопоставляет идентификатор пользователя, вызывающего удаленную команду, с идентификатором пользователя в текущем экземпляре и выполняет команду ODBC, используя учетные данные этого пользователя.SQL Server maps the identity of the user issuing the remote command to the identity of the user on the current instance, and runs the ODBC command using that user's credentials. Строка подключения, необходимая для выполнения этого вызова ODBC, получается из клиентского кода.The connection string needed to perform this ODBC call is obtained from the client code.

  • RODBC (только для R)RODBC (R only)

    Дополнительные вызовы ODBC можно вносить в скрипт с помощью RODBC.Additional ODBC calls can be made inside the script by using RODBC. RODBC — это популярный пакет R для доступа к данным в реляционных базах данных. Тем не менее его производительность обычно медленнее, чем у поставщиков, используемых SQL Server.RODBC is a popular R package used to access data in relational databases; however, its performance is generally slower than comparable providers used by SQL Server. Многие скрипты R используют встроенные вызовы RODBC как способ получения "вторичных" наборов данных для использования при анализе.Many R scripts use embedded calls to RODBC as a way of retrieving "secondary" datasets for use in analysis. Например, хранимая процедура, которая обучает модель, может определить SQL-запрос, чтобы получить данные для обучения модели, но использовать встроенный вызов RODBC, чтобы получить дополнительные факторы для выполнения операций поиска или для получения новых данных из внешних источников, таких как текстовые файлы или Excel.For example, the stored procedure that trains a model might define a SQL query to get the data for training a model, but use an embedded RODBC call to get additional factors, to perform lookups, or to get new data from external sources such as text files or Excel.

    Следующий код иллюстрирует вызов RODBC, встроенный в скрипт R:The following code illustrates an RODBC call embedded in an R script:

    library(RODBC);
    connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name, ";Trusted_Connection=true;", sep="");
    dbhandle <- odbcDriverConnect(connStr)
    OutputDataSet <- sqlQuery(dbhandle, "select * from table_name");
    
  • Другие протоколыOther protocols

    Процессы, которые могут потребоваться для работы в блоках или передачи данных обратно удаленному клиенту, также могут использовать формат файла Xdf-File.Processes that might need to work in "chunks" or transfer data back to a remote client can also use the XDF file format. Фактический перенос данных осуществляется через закодированные BLOB-объекты.Actual data transfer is via encoded blobs.

См. также:See Also