Erweiterbarkeitsarchitektur in SQL Server-Machine Learning ServicesExtensibility architecture in SQL Server Machine Learning Services

Gilt für: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL Server verfügt über ein Erweiterungsframework zum Ausführen eines externes Skripts wie R oder Python auf dem Server.SQL Server has an extensibility framework for running an external script, such as R or Python, on the server. Das Skript wird in einer Language Runtime-Umgebung als Erweiterung der Haupt-Datenbank-Engine ausgeführt.The script executes in a language runtime environment as an extension to the core database engine.

HintergrundBackground

Das Erweiterbarkeitsframework wurde in SQL Server 2016 zur Unterstützung der R-Runtime eingeführt.The extensibility framework was introduced in SQL Server 2016 to support the R runtime. Python wird von SQL Server 2017 und höher unterstützt.SQL Server 2017 and later has support for Python.

Der Zweck des Erweiterbarkeitsframeworks besteht darin, eine Schnittstelle zwischen SQL Server und Data Science-Sprachen wie R und Python bereitzustellen.The purpose of the extensibility framework is to provide an interface between SQL Server and data science languages such as R and Python. Ziel dabei ist es, eine möglichst reibungslose Migration von Data-Science-Lösungen in die Produktion zu gewährleisten und die während des Entwicklungsprozesses verfügbar gemachten Daten zu schützen.The goal is to reduce friction when moving data science solutions into production, and protecting data exposed during the development process. Durch Ausführen einer vertrauenswürdigen Skriptsprache innerhalb eines von SQL Server verwalteten sicheren Frameworks können Datenbankadministratoren die Sicherheit aufrechterhalten und gleichzeitig Datenanalysten den Zugriff auf Unternehmensdaten ermöglichen.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.

Im folgenden Diagramm werden die Möglichkeiten und Vorteile der erweiterbaren Architektur visuell beschrieben.The following diagram visually describes opportunities and benefits of the extensible architecture.

Ziele der Integration in SQL ServerGoals of integration with SQL Server

Ein externes Skript kann durch Aufrufen einer gespeicherten Prozedur ausgeführt werden, und die Ergebnisse werden als tabellarische Ergebnisse direkt an SQL Server zurückgegeben.An external script can be run by calling a stored procedure, and the results are returned as tabular results directly to SQL Server. Dies vereinfacht das Generieren oder Verwenden von Machine Learning aus einer beliebigen Anwendung, die eine SQL-Abfrage senden und die Ergebnisse verarbeiten kann.This makes it easy to generate or consume machine learning from any application that can send a SQL query and handle the results.

  • Die Ausführung externer Skripts unterliegt der Datensicherheit von SQL Server.External script execution is subject to SQL Server data security. Ein Benutzer, der ein externes Skript ausführt, kann nur auf Daten zugreifen, die gleichzeitig in einer SQL-Abfrage verfügbar sind.A user running an external script can only access data that is equally available in a SQL query. Wenn eine Abfrage aufgrund unzureichender Berechtigungen fehlschlägt, kann ein Skript, das vom gleichen Benutzer ausgeführt wird, aus demselben Grund ebenfalls fehlschlagen.If a query fails due to insufficient permission, a script run by the same user would also fail for the same reason. Die SQL Server-Sicherheit wird auf der Ebene der Tabelle, Datenbank und Instanz erzwungen.SQL Server security is enforced at the table, database, and instance level. Datenbankadministratoren können den Benutzerzugriff, die von externen Skripts verwendeten Ressourcen und die dem Server hinzugefügten externen Codebibliotheken verwalten.Database administrators can manage user access, resources used by external scripts, and external code libraries added to the server.

  • Skalierungs-und Optimierungsmöglichkeiten bieten Vorteile in zweierlei Hinsicht: Vorteile durch die Datenbankplattform (ColumnStore-Indizes, Ressourcenkontrolle) und erweiterungsspezifische Vorteile, z. B. bei Verwendung von Microsoft-Bibliotheken für R und Python für Data-Science- Modelle.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. Bei R handelt es sich um einen einzelnen Thread. RevoScaleR-Funktionen werden hingegen mit mehreren Threads ausgeführt und können eine Workload über mehrere Kerne verteilen.Whereas R is single-threaded, RevoScaleR functions are multi-threaded, capable of distributing a workload over multiple cores.

  • Für die Bereitstellung werden SQL Server-Methoden verwendet.Deployment uses SQL Server methodologies. Dies können gespeicherte Prozeduren sein, die ein externes Skript oder eingebettete SQL- bzw. T-SQL-Abfragen zum Aufrufen von Funktionen wie PREDICT umfassen, um Ergebnisse von auf dem Server verbliebenen Prognosemodellen zurückzugeben.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.

  • Entwickler mit fundierten Kenntnissen in bestimmten Tools und IDEs können Code in diese Tools schreiben und den Code dann in SQL Server portieren.Developers with established skills in specific tools and IDEs can write code in those tools and then port the code to SQL Server.

ArchitekturdiagrammArchitecture diagram

Die Architektur ist so konzipiert, dass externe Skripts in einem separaten Prozess von SQL Server ausgeführt werden, jedoch mit Komponenten, die intern die Kette von Anforderungen für Daten und Vorgänge auf SQL Server verwalten.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. Abhängig von der Version von SQL Server enthalten die unterstützten Spracherweiterungen R, Python und Sprachen von Drittanbietern wie Java und .NET.Depending on the version of SQL Server, supported language extensions include R, Python, and third-party languages such as Java and .NET.

Komponentenarchitektur unter Windows:Component architecture in Windows:

Windows-KomponentenarchitekturWindows component architecture

Komponentenarchitektur unter Linux:Component architecture in Linux:

Linux-KomponentenarchitekturLinux component architecture

Zu den Komponenten gehören ein Launchpaddienst, der zum Aufrufen externer Runtimes und bibliotheksspezifischer Logik zum Laden von Interpretern und Bibliotheken verwendet wird.Components include a launchpad service used to invoke external runtimes and library-specific logic for loading interpreters and libraries. Das Startprogramm lädt eine Language Runtime sowie alle proprietären Module.The launcher loads a language runtime, plus any proprietary modules. Wenn der Code z. B. RevoScaleR-Funktionen enthält, wird ein RevoScaleR-Interpreter geladen.For example, if your code includes RevoScaleR functions, a RevoScaleR interpreter is loaded. BxlServer und SQL Satellite verwalten die Kommunikation mit SQL Server und die Datenübertragung.BxlServer and SQL Satellite manage communication and data transfer with SQL Server.

Unter Linux verwendet SQL einen launchpadd-Dienst, um mit einem separaten Launchpad-Prozess für jeden Benutzer zu kommunizieren.In Linux, SQL uses a launchpadd service to communicate with a separate launchpad process for each user.

LaunchpadLaunchpad

SQL Server-LaunchpadSQL Server Launchpad ist ein Dienst, der die Ausführung externer Skripts verwaltet und unterstützt, ganz ähnlich wie die Volltextindizierung und der Abfragedienst einen separaten Host für die Verarbeitung von Volltextabfragen starten.The SQL Server-LaunchpadSQL 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. Der Launchpaddienst startet nur vertrauenswürdige Startprogramme, die von Microsoft veröffentlicht wurden oder die durch Microsoft zertifiziert wurden, da sie die Anforderungen für Leistung und Ressourcenverwaltung erfüllen.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.

Vertrauenswürdige StartprogrammeTrusted launchers DurchwahlExtension SQL Server-VersionenSQL Server versions
„RLauncher.dll“ für die R-Sprache für WindowsRLauncher.dll for the R language for Windows R-ErweiterungR extension SQL Server 2016 und höherSQL Server 2016 and later
„Pythonlauncher.dll“ für Python 3.5 für WindowsPythonlauncher.dll for Python 3.5 for Windows Python-ErweiterungPython extension SQL Server 2017 und höherSQL Server 2017 and later
„RLauncher.so“ für die R-Sprache für LinuxRLauncher.so for the R language for Linux R-ErweiterungR extension SQL Server 2019 und höherSQL Server 2019 and later
„Pythonlauncher.so“ für Python 3.5 für LinuxPythonlauncher.so for Python 3.5 for Linux Python-ErweiterungPython extension SQL Server 2019 und höherSQL Server 2019 and later

Der SQL Server-LaunchpadSQL Server Launchpad-Dienst wird unter dem eigenen Benutzerkonto ausgeführt.The SQL Server-LaunchpadSQL Server Launchpad service runs under its own user account. Wenn Sie das Konto ändern, mit dem Launchpad ausgeführt wird, stellen Sie sicher, dass dies mit dem SQL Server-Konfigurations-Manager erfolgt, um sicherzustellen, dass Änderungen in die zugehörigen Dateien geschrieben werden.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.

In Windows wird für jede Instanz der Datenbank-Engine, der Sie SQL Server-Machine Learning Services hinzugefügt haben, ein separater SQL Server-LaunchpadSQL Server Launchpad-Dienst erstellt.In Windows, a separate SQL Server-LaunchpadSQL Server Launchpad service is created for each database engine instance to which you have added SQL Server Machine Learning Services. Es gibt einen Launchpaddienst für jede Instanz der Datenbank-Engine. Wenn Sie also über mehrere Instanzen mit externer Skriptunterstützung verfügen, haben Sie für jede einen Launchpaddienst.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. Eine Instanz der Datenbank-Engine ist an den für sie erstellten Launchpaddienst gebunden.A database engine instance is bound to the launchpad service created for it. Alle Aufrufe externer Skripts in einer gespeicherten Prozedur oder in T-SQL führen dazu, dass der SQL Server-Dienst den für dieselbe Instanz erstellten Launchpaddienst aufruft.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.

Zum Ausführen von Aufgaben in einer bestimmten unterstützten Sprache erhält das Launchpad ein gesichertes Workerkonto aus dem Pool und startet einen Satellitenprozess zum Verwalten der externen Runtime.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. Jeder Satellitenprozess erbt das Benutzerkonto des Launchpads und verwendet dieses Workerkonto für die Dauer der Skriptausführung.Each satellite process inherits the user account of the launchpad and uses that worker account for the duration of script execution. Wenn Skripts parallele Prozesse verwenden, werden sie unter demselben Einzelworkerkonto erstellt.If script uses parallel processes, they are created under the same, single worker account.

Unter Linux wird nur eine Instanz der Datenbank-Engine unterstützt, und es ist ein launchpadd-Dienst an die Instanz gebunden.In Linux, only one database engine instance is supported and there is one launchpadd service bound to the instance. Wenn ein Skript ausgeführt wird, startet der launchpadd-Dienst einen separaten Launchpadprozess mit dem mssql_satellite-Benutzerkonto mit geringen Berechtigungen.When a script is executed, the launchpadd service starts a separate launchpad process with the low-privileged user account mssql_satellite. Jeder Satellitenprozess erbt das mssql_satellite-Benutzerkonto des Launchpads und verwendet dieses für die Dauer der Skriptausführung.Each satellite process inherits the mssql_satellite user account of launchpad and uses that for the duration of script execution.

BxlServer und SQL SatelliteBxlServer and SQL Satellite

BxlServer ist eine ausführbare Datei, die von Microsoft bereitgestellt wird und die die Kommunikation zwischen SQL Server und der Language Runtime verwaltet.BxlServer is an executable provided by Microsoft that manages communication between SQL Server and the language runtime. Sie erstellt die Windows-Auftragsobjekte für Windows oder die Namespaces für Linux, die zur Bereitstellung externer Skriptsitzungen verwendet werden.It creates the Windows job objects for Windows, or the namespaces for Linux, that are used to contain external script sessions. Außerdem stellt sie für jeden externen Skriptauftrag sichere Arbeitsordner bereit und verwendet SQL Satellite, um die Datenübertragung zwischen der externen Runtime und SQL Server zu verwalten.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. Wenn Sie während der Ausführung eines Auftrags Prozess-Explorer verwenden, wird möglicherweise eine oder mehrere Instanzen von BxlServer angezeigt.If you run Process Explorer while a job is running, you might see one or multiple instances of BxlServer.

Im Grunde genommen ist BxlServer ein begleitendes Verfahren zu einer Language Runtime-Umgebung, das in Verbindung mit SQL Server für die Übertragung und Verwaltung von Aufgaben eingesetzt werden kann.In effect, BxlServer is a companion to a language runtime environment that works with SQL Server to transfer data and manage tasks. BXL steht für „Binary Exchange Language“ und verweist auf das Datenformat, das zum effektiven Verschieben von Daten zwischen SQL Server und externen Prozessen verwendet wird.BXL stands for Binary Exchange language and refers to the data format used to move data efficiently between SQL Server and external processes. Darüber hinaus ist BxlServer ein wichtiger Bestandteil verwandter Produkte wie Microsoft R Client und Microsoft R Server.BxlServer is also an important part of related products such as Microsoft R Client and Microsoft R Server.

SQL Satellite ist eine in der Datenbank-Engine enthaltene Erweiterbarkeits-API, um externen Code oder externe Runtimes, die mithilfe von C oder C++ implementiert wurden, zu unterstützen.SQL Satellite is an extensibility API, included in the database engine, that supports external code or external runtimes implemented using C or C++.

BxlServer verwendet den SQL-Satelliten für die folgenden Aufgaben:.BxlServer uses SQL Satellite for these tasks:

  • Lesen von EingabedatenReading input data
  • Schreiben von AusgabedatenWriting output data
  • Abrufen von EingabeargumentenGetting input arguments
  • Schreiben von AusgabeargumentenWriting output arguments
  • FehlerbehandlungError handling
  • STDOUT und STDERR zurück auf den Client schreibenWriting STDOUT and STDERR back to client

SQL Satellite verwendet ein benutzerdefiniertes Datenformat, das für die schnelle Datenübertragung zwischen SQL Server und externen Skriptsprachen optimiert ist.SQL Satellite uses a custom data format that is optimized for fast data transfer between SQL Server and external script languages. Er führt Typumwandlungen durch und definiert die Schemas der Eingabe- und Ausgabedatasets während der Kommunikation zwischen SQL Server und der externen Skriptruntime.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 Satellite kann mithilfe von erweiterten Windows-Ereignissen (xEvents) überwacht werden.The SQL Satellite can be monitored by using windows extended events (xEvents). Weitere Informationen finden Sie unter Erweiterte Ereignisse für R und Erweiterte Ereignisse für Python.For more information, see Extended Events for R and Extended Events for Python.

Kommunikationskanäle zwischen KomponentenCommunication channels between components

Im folgenden Abschnitt werden die Kommunikationsprotokolle zwischen Komponenten und Datenplattformen beschrieben.Communication protocols among components and data platforms are described in this section.

  • TCP/IPTCP/IP

    Standardmäßig wird für die interne Kommunikation zwischen SQL Server und SQL Satellite TCP/IP verwendet.By default, internal communications between SQL Server and the SQL Satellite use TCP/IP.

  • Named PipesNamed Pipes

    Für den interne Datentransport zwischen BxlServer und SQL Server über SQL Satellite wird zur Leistungssteigerung ein proprietäres, komprimiertes Datenformat verwendet.Internal data transport between the BxlServer and SQL Server through SQL Satellite uses a proprietary, compressed data format to enhance performance. Der Datenaustausch zwischen den Language Runtimes und BxlServer erfolgt im BXL-Format mithilfe von Named Pipes.Data is exchanged between language run times and BxlServer in BXL format, using Named Pipes.

  • ODBCODBC

    Für die Kommunikation zwischen externen Data Science-Clients und einer SQL Server-Remoteinstanz wird ODBC verwendet.Communications between external data science clients and a remote SQL Server instance use ODBC. Das Konto, das Skriptaufträge an SQL Server übermittelt, muss über beide Berechtigungen zum Herstellen einer Verbindung mit der Instanz und zum Ausführen externer Skripts verfügen.The account that sends the script jobs to SQL Server must have both permissions to connect to the instance and to run external scripts.

    Außerdem benötigt das Konto abhängig von der Aufgabe möglicherweise die folgenden Berechtigungen zum:Additionally, depending on the task, the account might need these permissions:

    • Lesen der vom Auftrag verwendeten DatenRead data used by the job
    • Schreiben von Daten in Tabellen, z. B. beim Speichern von Ergebnissen in einer TabelleWrite data to tables: for example, when saving results to a table
    • Erstellen von Datenbankobjekten, z. B. beim Speichern eines externen Skripts als Teil einer neuen gespeicherten ProzedurCreate database objects: for example, if saving external script as part of a new stored procedure.

    Wenn SQL Server als Computekontext für Skripts verwendet wird, die von einem Remoteclient ausgeführt werden, und die ausführbare Datei Daten aus einer externen Quelle abrufen muss, wird ODBC für den Rückschreibevorgang verwendet.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 ordnet die Identität des Benutzers, der den Remotebefehl ausgibt, der Identität des Benutzers auf der aktuellen Instanz zu und führt den ODBC-Befehl mit den Anmeldeinformationen dieses Benutzers aus.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. Die Verbindungszeichenfolge, die zum Durchführen dieses ODBC-Aufruf erforderlich ist, wird vom Clientcode abgerufen.The connection string needed to perform this ODBC call is obtained from the client code.

  • RODBC (nur R)RODBC (R only)

    Zusätzliche ODBC-Aufrufe können innerhalb des Skripts mithilfe von RODBC erfolgen.Additional ODBC calls can be made inside the script by using RODBC. RODBC ist ein beliebtes R-Paket, das für den Zugriff auf Daten in relationalen Datenbanken verwendet wird. Die Leistung ist jedoch im Allgemeinen langsamer als die von vergleichbaren Anbietern, die von SQL Server verwendet werden.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. Viele R-Skripts verwenden eingebettete Aufrufe auf RODBC als eine Möglichkeit, „sekundäre“ Datasets für den Gebrauch in Analysen abzurufen.Many R scripts use embedded calls to RODBC as a way of retrieving "secondary" datasets for use in analysis. Beispielsweise kann die gespeicherte Prozedur, die ein Modell trainiert, möglicherweise eine SQL-Abfrage definieren, um die Daten für das Trainieren eines Modells abzurufen, aber einen eingebetteten RODBC-Aufruf zum Abrufen zusätzlicher Faktoren verwenden, um Lookups auszuführen oder um neue Daten aus externen Quellen zu erhalten, z.B. Textdateien oder 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.

    Der folgende Code zeigt einen RODBC-Aufruf, der in einem R-Skript eingebettet ist: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");
    
  • Weitere ProtokolleOther protocols

    Prozesse, die möglicherweise in „Blöcken“ arbeiten oder Daten zurück an einen Remoteclient übertragen müssen, können auch das XDF-Dateiformat verwenden.Processes that might need to work in "chunks" or transfer data back to a remote client can also use the XDF file format. Die tatsächliche Datenübertragung erfolgt über codierte Blobs.Actual data transfer is via encoded blobs.

Weitere InformationenSee Also