Architecture d’extensibilité dans SQL Server Machine Learning ServicesExtensibility architecture in SQL Server Machine Learning Services

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

SQL Server est doté d’un framework d’extensibilité pour l’exécution d’un script externe (p.ex., en R ou Python) sur le serveur.SQL Server has an extensibility framework for running an external script, such as R or Python, on the server. Le script s’exécute dans un environnement de runtime de langage en tant qu’extension du moteur de base de données de base.The script executes in a language runtime environment as an extension to the core database engine.

Arrière-planBackground

Le framework d’extensibilité a été introduit dans SQL Server 2016 pour prendre en charge le runtime R.The extensibility framework was introduced in SQL Server 2016 to support the R runtime. SQL Server 2017 et les versions ultérieures prennent en charge Python.SQL Server 2017 and later has support for Python.

Le framework d’extensibilité vise à offrir une interface entre SQL Server et les langages de science des données comme R et Python.The purpose of the extensibility framework is to provide an interface between SQL Server and data science languages such as R and Python. L’objectif est de réduire la friction pendant le déplacement de solutions de science des données en production et quand il s’agit de protéger les données exposées durant le processus de développement.The goal is to reduce friction when moving data science solutions into production, and protecting data exposed during the development process. L’exécution d’un langage de script approuvé au sein d’un framework sécurisé et gérée par SQL Server permet aux administrateurs de base de données d’assurer la sécurité tout en permettant aux scientifiques des données d’accéder aux données de l’entreprise.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.

Le schéma suivant décrit visuellement les possibilités et les avantages de l’architecture extensible.The following diagram visually describes opportunities and benefits of the extensible architecture.

Objectifs de l’intégration avec SQL ServerGoals of integration with SQL Server

Il est possible d’exécuter un script externe en appelant une procédure stockée ; les résultats sont alors directement retournés sous forme tabulaire à 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. Cela facilite la génération ou l’utilisation du Machine Learning à partir de n’importe quelle application capable d’envoyer une requête SQL et de gérer les résultats.This makes it easy to generate or consume machine learning from any application that can send a SQL query and handle the results.

  • L’exécution d’un script externe est soumise aux règles de sécurité des données de SQL Server.External script execution is subject to SQL Server data security. Un utilisateur exécutant un script externe peut uniquement accéder aux données qui sont également disponibles dans une requête SQL.A user running an external script can only access data that is equally available in a SQL query. Si une requête échoue en raison d’autorisations insuffisantes, un script exécuté par le même utilisateur échouera aussi pour la même raison.If a query fails due to insufficient permission, a script run by the same user would also fail for the same reason. La sécurité de SQL Server est appliquée au niveau de la table, de la base de données et de l’instance.SQL Server security is enforced at the table, database, and instance level. Les administrateurs de base de données peuvent gérer l’accès des utilisateurs, les ressources utilisées par les scripts externes et les bibliothèques de code externes ajoutées au serveur.Database administrators can manage user access, resources used by external scripts, and external code libraries added to the server.

  • Les possibilités de mise à l’échelle et d’optimisation reposent sur deux piliers : avantages liés à la plateforme de base de données (index ColumnStore, gouvernance des ressources) et avantages propres à l’extension, par exemple quand les bibliothèques Microsoft pour R et Python sont utilisées pour les modèles de science des données.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. Si R est monothread, les fonctions RevoScaleR sont en revanche multithread et capables de répartir une charge de travail entre plusieurs cœurs.Whereas R is single-threaded, RevoScaleR functions are multi-threaded, capable of distributing a workload over multiple cores.

  • Le déploiement s’appuie sur les méthodologies SQL Server.Deployment uses SQL Server methodologies. Il peut s’agir de procédures stockées encapsulant un script externe, des requêtes SQL ou T-SQL incorporées appelant des fonctions comme PREDICT pour retourner des résultats à partir de modèles de prévision conservés sur le serveur.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.

  • Les développeurs qui maîtrisent des outils et IDE spécifiques peuvent écrire du code dans ces outils, puis porter ce code sur 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.

Diagramme de l'architectureArchitecture diagram

L’architecture est conçue de telle sorte que les scripts externes s’exécutent dans un processus distinct de SQL Server, mais avec des composants qui gèrent en interne la chaîne des demandes de données et d’opérations dans 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. Selon la version de SQL Server, les extensions de langage prises en charge incluent R, Python et des langages tiers comme Java et .NET.Depending on the version of SQL Server, supported language extensions include R, Python, and third-party languages such as Java and .NET.

Architecture des composants dans Windows :Component architecture in Windows:

Architecture des composants WindowsWindows component architecture

Architecture des composants dans Linux :Component architecture in Linux:

Architecture des composants LinuxLinux component architecture

Parmi les composants figurent un service launchpad destiné à appeler des runtimes externes et une logique spécifique de bibliothèque pour charger interpréteurs et autres bibliothèques.Components include a launchpad service used to invoke external runtimes and library-specific logic for loading interpreters and libraries. Le lanceur charge un runtime de langage ainsi que les modules propriétaires éventuels.The launcher loads a language runtime, plus any proprietary modules. Par exemple, si votre code comprend des fonctions RevoScaleR, un interpréteur RevoScaleR est chargé.For example, if your code includes RevoScaleR functions, a RevoScaleR interpreter is loaded. BxlServer et SQL Satellite gèrent la communication et le transfert de données avec SQL Server.BxlServer and SQL Satellite manage communication and data transfer with SQL Server.

Dans Linux, SQL utilise un service launchpad pour communiquer avec un processus launchpad distinct pour chaque utilisateur.In Linux, SQL uses a launchpadd service to communicate with a separate launchpad process for each user.

LaunchpadLaunchpad

SQL Server LaunchpadSQL Server Launchpad est un service qui gère et exécute les scripts externes, à l’image du service de requête et d’indexation de texte intégral qui lance un hôte distinct pour le traitement de requêtes de texte intégral.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. Le service launchpad peut démarrer uniquement les lanceurs approuvés et publiés par Microsoft ou qui ont été certifiés par Microsoft comme répondant aux exigences de performances et de gestion des ressources.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.

Lanceurs approuvésTrusted launchers ExtensionExtension Versions de SQL ServerSQL Server versions
RLauncher. dll pour le langage R pour WindowsRLauncher.dll for the R language for Windows Extension RR extension SQL Server 2016 et versions ultérieuresSQL Server 2016 and later
Pythonlauncher.dll pour Python 3.5 pour WindowsPythonlauncher.dll for Python 3.5 for Windows Extension PythonPython extension SQL Server 2017 et versions ultérieuresSQL Server 2017 and later
RLauncher.so pour le langage R pour LinuxRLauncher.so for the R language for Linux Extension RR extension SQL Server 2019 et versions ultérieuresSQL Server 2019 and later
Pythonlauncher.so for Python 3.5 pour LinuxPythonlauncher.so for Python 3.5 for Linux Extension PythonPython extension SQL Server 2019 et versions ultérieuresSQL Server 2019 and later

Le service SQL Server LaunchpadSQL Server Launchpad s’exécute sous son propre compte d’utilisateur.The SQL Server LaunchpadSQL Server Launchpad service runs under its own user account. Si vous modifiez le compte qui exécute launchpad, veillez à utiliser le Gestionnaire de configuration SQL Server pour faire en sorte que les modifications soient écrites dans les fichiers associés.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.

Dans Windows, un service SQL Server LaunchpadSQL Server Launchpad distinct est créé pour chaque instance de moteur de base de données à laquelle vous avez ajouté SQL Server Machine Learning Services.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. Il existe un service launchpad pour chaque instance de moteur de base de données. Par conséquent, si vous avez plusieurs instances avec prise en charge des scripts externes, vous aurez un service launchpad pour chacune d’elles.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. Une instance de moteur de base de données est liée au service launchpad qui a été créé pour celle-ci.A database engine instance is bound to the launchpad service created for it. Pour tous les appels de script externe d’une procédure stockée ou de T-SQL, le service SQL Server appelle le service launchpad créé pour la même instance.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.

Pour exécuter des tâches dans un langage spécifique pris en charge, le service launchpad obtient un compte de travail sécurisé auprès du pool, puis démarre un processus satellite pour gérer le runtime externe.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. Chaque processus satellite hérite du compte d’utilisateur du service launchpad et utilise ce compte de travail pendant la durée d’exécution du script.Each satellite process inherits the user account of the launchpad and uses that worker account for the duration of script execution. Si le script utilise des processus parallèles, ceux-ci sont créés sous le même compte de travail.If script uses parallel processes, they are created under the same, single worker account.

Dans Linux, une seule instance de moteur de base de données est prise en charge et un seul service launchpad est lié à l’instance.In Linux, only one database engine instance is supported and there is one launchpadd service bound to the instance. Quand un script est exécuté, le service launchpad lance un processus launchpad distinct avec le compte d’utilisateur à faibles privilèges mssql_satellite.When a script is executed, the launchpadd service starts a separate launchpad process with the low-privileged user account mssql_satellite. Chaque processus satellite hérite du compte d’utilisateur mssql_satellite du service launchpad et l’utilise pendant la durée d’exécution du script.Each satellite process inherits the mssql_satellite user account of launchpad and uses that for the duration of script execution.

BxlServer et SQL SatelliteBxlServer and SQL Satellite

BxlServer est un exécutable fourni par Microsoft qui gère la communication entre SQL Server et le runtime de langage.BxlServer is an executable provided by Microsoft that manages communication between SQL Server and the language runtime. Il crée les objets de traitement Windows pour Windows, ou les espaces de noms pour Linux, qui servent à accueillir les sessions de script externe.It creates the Windows job objects for Windows, or the namespaces for Linux, that are used to contain external script sessions. De même, il provisionne des dossiers de travail sécurisés pour chaque travail de script externe et utilise SQL Satellite pour gérer le transfert de données entre le runtime externe et 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. Si vous exécutez l’Explorateur de processus pendant l’exécution d’un travail, vous pouvez noter la présence d’une ou plusieurs instances de BxlServer.If you run Process Explorer while a job is running, you might see one or multiple instances of BxlServer.

En effet, BxlServer est un complément d’environnement de runtime de langage qui fonctionne avec SQL Server pour transférer les données et gérer les tâches.In effect, BxlServer is a companion to a language runtime environment that works with SQL Server to transfer data and manage tasks. BXL, qui est l’abréviation de « Binary Exchange Language », désigne le format de données utilisé pour déplacer efficacement les données entre SQL Server et les processus externes.BXL stands for Binary Exchange language and refers to the data format used to move data efficiently between SQL Server and external processes. BxlServer est aussi une composante importante de produits associés comme Microsoft R Client et Microsoft R Server.BxlServer is also an important part of related products such as Microsoft R Client and Microsoft R Server.

SQL Satellite est une API d’extensibilité intégrée dans le moteur de base de données qui prend en charge le code ou les runtimes externes implémentés en C ou 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 utilise SQL Satellite pour les tâches suivantes :BxlServer uses SQL Satellite for these tasks:

  • Lecture des données d’entréeReading input data
  • Écriture des données de sortieWriting output data
  • Obtention des arguments d’entréeGetting input arguments
  • Écriture des arguments de sortieWriting output arguments
  • Gestion des erreursError handling
  • Réécriture de STDOUT et de STDERR sur le clientWriting STDOUT and STDERR back to client

SQL Satellite utilise un format de données personnalisé qui est optimisé pour accélérer les transferts de données entre SQL Server et les langages de script externe.SQL Satellite uses a custom data format that is optimized for fast data transfer between SQL Server and external script languages. Il assure les conversions de type et définit les schémas des jeux de données d’entrée et de sortie pendant les communications entre SQL Server et le runtime de script externe.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 peut être supervisé en utilisant des événements étendus Windows (xEvents).The SQL Satellite can be monitored by using windows extended events (xEvents). Pour plus d’informations, consultez Événements étendus pour R et Événements étendus pour Python.For more information, see Extended Events for R and Extended Events for Python.

Canaux de communication entre les composantsCommunication channels between components

Les protocoles de communication entre les composants et les plateformes de données sont décrits dans cette section.Communication protocols among components and data platforms are described in this section.

  • TCP/IPTCP/IP

    Par défaut, les communications internes entre SQL Server et SQL Satellite utilisent TCP/IP.By default, internal communications between SQL Server and the SQL Satellite use TCP/IP.

  • Canaux nommésNamed Pipes

    Le transport de données interne entre BxlServer et SQL Server via SQL Satellite utilise un format de données propriétaire et compressé pour améliorer les performances.Internal data transport between the BxlServer and SQL Server through SQL Satellite uses a proprietary, compressed data format to enhance performance. Les données sont échangées entre les runtimes de langage et BxlServer au format BXL, en utilisant les canaux nommés.Data is exchanged between language run times and BxlServer in BXL format, using Named Pipes.

  • ODBCODBC

    Les communications entre les clients de science des données externes et une instance de SQL Server distante utilisent ODBC.Communications between external data science clients and a remote SQL Server instance use ODBC. Le compte qui envoie les travaux de script à SQL Server doit avoir l’autorisation de se connecter à l’instance et l’autorisation d’exécuter des scripts externes.The account that sends the script jobs to SQL Server must have both permissions to connect to the instance and to run external scripts.

    De plus, en fonction de la tâche, le compte peut avoir besoin des autorisations suivantes :Additionally, depending on the task, the account might need these permissions:

    • Lire les données utilisées par le travailRead data used by the job
    • Écrire les données dans des tables : par exemple, durant l’enregistrement des résultats dans une tableWrite data to tables: for example, when saving results to a table
    • Créer des objets de base de données : par exemple, si vous enregistrez un script externe dans le cadre d’une nouvelle procédure stockéeCreate database objects: for example, if saving external script as part of a new stored procedure.

    Quand SQL Server sert de contexte de calcul pour un script exécuté à partir d’un client distant et que l’exécutable doit récupérer des données à partir d’une source externe, ODBC est utilisé pour l’écriture différée.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 mappe l’identité de l’utilisateur qui émet la commande distante à l’identité de l’utilisateur sur l’instance actuelle, puis exécute la commande ODBC à l’aide des informations d’identification de cet utilisateur.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. La chaîne de connexion nécessaire pour effectuer cet appel ODBC est obtenue à partir du code client.The connection string needed to perform this ODBC call is obtained from the client code.

  • RODBC (R uniquement)RODBC (R only)

    Des appels ODBC supplémentaires peuvent être effectués à l’intérieur du script à l’aide du package RODBC.Additional ODBC calls can be made inside the script by using RODBC. RODBC est un package R couramment utilisé pour accéder aux données de bases de données relationnelles. Cependant, il est généralement moins rapide que les fournisseurs comparables utilisés par 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. De nombreux scripts R utilisent des appels au RODBC incorporés comme moyen de récupérer les jeux de données « secondaires » à utiliser dans les analyses.Many R scripts use embedded calls to RODBC as a way of retrieving "secondary" datasets for use in analysis. Par exemple, la procédure stockée qui forme un modèle peut définir une requête SQL pour obtenir les données d’apprentissage d’un modèle, mais utiliser un appel RODBC incorporé pour obtenir d’autres facteurs, effectuer des recherches ou obtenir de nouvelles données de sources externes telles que des fichiers texte ou 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.

    Le code suivant illustre un appel RODBC incorporé dans un script 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");
    
  • Autres protocolesOther protocols

    Les processus qui peuvent avoir besoin de travailler dans des « blocs » ou de transférer des données en retour à un client distant peuvent aussi utiliser le format de fichier XDF.Processes that might need to work in "chunks" or transfer data back to a remote client can also use the XDF file format. Le transfert de données réel se fait via des objets blob encodés.Actual data transfer is via encoded blobs.

Voir aussiSee Also