Delen via


Architectuur voor uitbreidbaarheid in SQL Server Language Extensions

Van toepassing op: SQL Server 2019 (15.x) en latere versies

Meer informatie over de uitbreidbaarheidsarchitectuur die wordt gebruikt voor SQL Server Language Extensions, waarmee u externe code kunt uitvoeren in SQL Server. Java, Python en R worden ondersteund in SQL Server 2019 (15.x) en latere versies. De code wordt uitgevoerd in een taalruntimeomgeving als een extensie voor de kerndatabase-engine.

Achtergrond

Het doel van het uitbreidbaarheidsframework is om een interface te bieden tussen SQL Server en externe talen. Databasebeheerders kunnen beveiliging onderhouden door een vertrouwde taal uit te voeren binnen een beveiligd framework dat wordt beheerd door SQL Server, terwijl gegevenswetenschappers toegang hebben tot bedrijfsgegevens.

Elke ondersteunde externe taal kan worden uitgevoerd door een opgeslagen procedure aan te roepen en de resultaten worden rechtstreeks als tabellaire resultaten naar SQL Server geretourneerd. Hierdoor kunt u eenvoudig de externe taal gebruiken vanuit elke toepassing die een SQL-query kan verzenden en de resultaten kan verwerken.

Architectuurdiagrammen

De architectuur is zodanig ontworpen dat externe code wordt uitgevoerd in een afzonderlijk proces van SQL Server, maar met onderdelen die intern de keten van aanvragen voor gegevens en bewerkingen op SQL Server beheren.

Onderdeelarchitectuur in Windows:

Diagram van onderdeelarchitectuur in Windows.

Onderdeelarchitectuur in Linux:

Diagram van onderdeelarchitectuur in Linux.

Onderdelen omvatten een Launchpad-service die wordt gebruikt voor het aanroepen van externe runtimes (bijvoorbeeld Java) en bibliotheekspecifieke logica voor het laden van interpreters en bibliotheken.

Launchpad

Sql Server Launchpad is een service die de levensduur, resources en beveiligingsgrenzen beheert van het externe proces dat verantwoordelijk is voor het uitvoeren van scripts. Dit is vergelijkbaar met de manier waarop de indexering in volledige tekst en queryservice een afzonderlijke host start voor het verwerken van query's in volledige tekst. De Launchpad-service kan alleen vertrouwde startprogramma's starten die zijn gepubliceerd door Microsoft of gecertificeerd door Microsoft als voldoen aan de vereisten voor prestaties en resourcebeheer.

De SQL Server Launchpad-service wordt uitgevoerd onder SQLRUserGroup die AppContainers gebruikt voor uitvoeringsisolatie.

Er wordt een afzonderlijke SQL Server Launchpad-service gemaakt voor elk exemplaar van de database-engine waaraan u SQL Server Machine Language Extensions toevoegt. Er is één Launchpad-service voor elk exemplaar van de database-engine, dus als u meerdere exemplaren met externe scriptondersteuning hebt, hebt u een Launchpad-service voor elk exemplaar. Een database-engine-exemplaar is gebonden aan de Launchpad-service die hiervoor is gemaakt. Alle aanroepen van een extern script in een opgeslagen procedure of T-SQL resulteren in de SQL Server-service die de Launchpad-service aanroept die voor hetzelfde exemplaar is gemaakt.

Als u taken in een specifieke ondersteunde taal wilt uitvoeren, krijgt Launchpad een beveiligd werkaccount van de pool en start u een satellietproces om de externe runtime te beheren. Elk satellietproces neemt het gebruikersaccount van launchpad over en gebruikt dat werkrolaccount tijdens het uitvoeren van scripts. Als het script parallelle processen gebruikt, worden deze gemaakt onder hetzelfde, één werkrolaccount.

Communicatiekanalen tussen onderdelen

Communicatieprotocollen tussen onderdelen en gegevensplatformen worden in deze sectie beschreven.

  • TCP/IP

    Interne communicatie tussen SQL Server en de SQL-satelliet maakt standaard gebruik van TCP/IP.

  • ODBC

    Communicatie tussen externe data science-clients en een extern SQL Server-exemplaar maakt gebruik van ODBC. Het account dat de scripttaken naar SQL Server verzendt, moet beide machtigingen hebben om verbinding te maken met het exemplaar en externe scripts uit te voeren.

    Afhankelijk van de taak heeft het account mogelijk deze machtigingen nodig:

    • Gegevens lezen die door de taak worden gebruikt
    • Gegevens naar tabellen schrijven: bijvoorbeeld bij het opslaan van resultaten in een tabel
    • Databaseobjecten maken: bijvoorbeeld als u extern script opslaat als onderdeel van een nieuwe opgeslagen procedure

    Wanneer SQL Server wordt gebruikt als de rekencontext voor het uitvoeren van scripts vanaf een externe client en het uitvoerbare bestand gegevens moet ophalen uit een externe bron, wordt ODBC gebruikt voor write-back. SQL Server wijst de identiteit van de gebruiker die de externe opdracht uitgeeft toe aan de identiteit van de gebruiker in het huidige exemplaar en voert de ODBC-opdracht uit met behulp van de referenties van die gebruiker. De verbindingsreeks die nodig is om deze ODBC-aanroep uit te voeren, wordt verkregen uit de clientcode.

  • Andere protocollen

    Processen die mogelijk in segmenten moeten werken of gegevens moeten overdragen naar een externe client, kunnen ook de XDF-bestandsindeling gebruiken. De werkelijke gegevensoverdracht verloopt via gecodeerde blobs.