Sdílet prostřednictvím


Architektura rozšiřitelnosti v rozšířeních jazyka SQL Serveru

Platí pro: SQL Server 2019 (15.x) a novější verze

Přečtěte si o architektuře rozšiřitelnosti, která se používá pro rozšíření SQL Server Language Extensions, která umožňuje spouštět externí kód na SQL Serveru. Jazyk Java, Python a R jsou podporované v SQL Serveru 2019 (15.x) a novějších verzích. Kód se spustí v prostředí language runtime jako rozšíření základního databázového stroje.

Background

Účelem rozhraní rozšiřitelnosti je poskytnout rozhraní mezi SQL Serverem a externími jazyky. Správci databází můžou udržovat zabezpečení spuštěním důvěryhodného jazyka v rámci zabezpečené architektury spravované SQL Serverem a zároveň umožnit datovým vědcům přístup k podnikovým datům.

Jakýkoli podporovaný externí jazyk je možné spustit voláním uložené procedury a výsledky se vrátí jako tabulkové výsledky přímo na SQL Server. To usnadňuje použití externího jazyka z libovolné aplikace, která může odesílat dotaz SQL a zpracovávat výsledky.

Diagramy architektury

Architektura je navržená tak, aby externí kód běžel v samostatném procesu od SQL Serveru, ale s komponentami, které interně spravují řetěz požadavků na data a operace na SQL Serveru.

Architektura komponent ve Windows:

Diagram architektury komponent ve Windows

Architektura komponent v Linuxu:

Diagram architektury komponent v Linuxu

Součástí součástí je služba Launchpad používaná k vyvolání externích modulů runtime (například Java) a logiky specifické pro knihovnu pro načítání interpretů a knihoven.

Hlavní panel

Launchpad SQL Serveru je služba, která spravuje životnost, prostředky a hranice zabezpečení externího procesu, který je zodpovědný za provádění skriptu. Podobá se tomu, jak fulltextové indexování a dotazovací služba spouští samostatného hostitele pro zpracování fulltextových dotazů. Služba Launchpad může spouštět jenom důvěryhodné spouštěče, které publikoval Microsoft nebo je certifikuje jako splnění požadavků na výkon a správu prostředků.

Služba Launchpad SQL Serveru běží v rámci sqlRUserGroup , která používá AppContainers pro izolaci spuštění.

Pro každou instanci databázového stroje, do které přidáte rozšíření jazyka SQL Server, se vytvoří samostatná služba LAUNCHPAD SYSTÉMU SQL Server. Pro každou instanci databázového stroje existuje jedna služba Launchpad, takže pokud máte více instancí s podporou externích skriptů, máte pro každou z nich službu Launchpad. Instance databázového stroje je svázaná se službou Launchpad vytvořenou pro ni. Všechna vyvolání externího skriptu v uložené proceduře nebo T-SQL způsobí, že služba SQL Serveru volá službu Launchpad vytvořenou pro stejnou instanci.

Pokud chcete spouštět úlohy v konkrétním podporovaném jazyce, launchpad získá zabezpečený pracovní účet z fondu a spustí satelitní proces pro správu externího modulu runtime. Každý satelitní proces dědí uživatelský účet launchpadu a používá tento pracovní účet během provádění skriptu. Pokud skript používá paralelní procesy, vytvoří se ve stejném pracovním účtu.

Komunikační kanály mezi komponentami

Komunikační protokoly mezi komponentami a datovými platformami jsou popsány v této části.

  • TCP/IP

    Ve výchozím nastavení používají interní komunikace mezi SQL Serverem a satelitním SQL protokolEM TCP/IP.

  • ODBC

    Komunikace mezi externími klienty datových věd a vzdálenou instancí SQL Serveru používá rozhraní ODBC. Účet, který odesílá úlohy skriptu sql Serveru, musí mít obě oprávnění pro připojení k instanci a ke spuštění externích skriptů.

    V závislosti na úkolu může účet navíc potřebovat tato oprávnění:

    • Čtení dat používaných úlohou
    • Zápis dat do tabulek: například při ukládání výsledků do tabulky
    • Vytvoření databázových objektů: například při ukládání externího skriptu jako součásti nové uložené procedury

    Pokud se SQL Server používá jako výpočetní kontext pro skript spuštěný ze vzdáleného klienta a spustitelný soubor musí načíst data z externího zdroje, odbc se používá pro zpětný zápis. SQL Server mapuje identitu uživatele vydávajícího vzdálený příkaz na identitu uživatele v aktuální instanci a spustí příkaz ODBC pomocí přihlašovacích údajů daného uživatele. Připojovací řetězec potřebný k provedení tohoto volání ODBC se získá z klientského kódu.

  • Další protokoly

    Procesy, které můžou potřebovat pracovat v blocích dat nebo přenášet data zpět do vzdáleného klienta, můžou také použít formát souboru XDF. Skutečný přenos dat je prostřednictvím zakódovaných objektů blob.