Udostępnij przez


Architektura rozszerzalności w usługach SQL Server Machine Learning Services

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje

W tym artykule opisano architekturę struktury rozszerzalności do uruchamiania zewnętrznego skryptu języka Python lub R w usługach SQL Server Machine Learning Services. Skrypt jest wykonywany w środowisku uruchomieniowym języka jako rozszerzenie podstawowego silnika bazy danych.

Kontekst

Struktura rozszerzalności została wprowadzona w programie SQL Server 2016 w celu obsługi środowiska uruchomieniowego języka R za pomocą usług języka R. Program SQL Server 2017 i nowsze wersje obsługują język Python z usługami Machine Learning Services.

Celem struktury rozszerzalności jest zapewnienie interfejsu między programem SQL Server i językami nauki o danych, takimi jak R i Python. Celem jest zmniejszenie problemów podczas przenoszenia rozwiązań do nauki o danych do środowiska produkcyjnego i ochrony danych ujawnianych podczas procesu programowania. Wykonując zaufany język skryptów w bezpiecznej strukturze zarządzanej przez program SQL Server, administratorzy baz danych mogą zachować bezpieczeństwo, umożliwiając analitykom danych dostęp do danych przedsiębiorstwa.

Na poniższym diagramie wizualnie opisano możliwości i zalety rozszerzalnej architektury.

Cele integracji z usługami SQL Server

Skrypt zewnętrzny można uruchomić przez wywołanie procedury składowanej, a wyniki są zwracane jako wyniki tabelaryczne bezpośrednio do programu SQL Server. Ułatwia to generowanie lub używanie uczenia maszynowego z dowolnej aplikacji, która może wysyłać zapytanie SQL i obsługiwać wyniki.

  • Wykonywanie skryptu zewnętrznego podlega bezpieczeństwu danych programu SQL Server. Użytkownik uruchamiający skrypt zewnętrzny może uzyskiwać dostęp tylko do danych, które są równie dostępne w zapytaniu SQL. Jeśli zapytanie nie powiedzie się z powodu niewystarczających uprawnień, skrypt uruchamiany przez tego samego użytkownika również zakończy się niepowodzeniem z tego samego powodu. Zabezpieczenia programu SQL Server są wymuszane na poziomie tabeli, bazy danych i instancji. Administratorzy baz danych mogą zarządzać dostępem użytkowników, zasobami używanymi przez skrypty zewnętrzne i bibliotekami kodu zewnętrznego dodanymi do serwera.

  • Możliwości skalowania i optymalizacji mają podwójną podstawę: zyski za pośrednictwem platformy bazy danych (indeksy Magazynu kolumn, nadzór nad zasobami); i korzyści specyficzne dla rozszerzenia, na przykład gdy biblioteki firmy Microsoft dla języków R i Python są używane na potrzeby modeli nauki o danych. Podczas gdy język R jest jednowątkowy, funkcje RevoScaleR są wielowątkowa, co umożliwia dystrybucję obciążenia na wiele rdzeni.

  • Wdrożenie korzysta z metodologii programu SQL Server. Mogą to być procedury składowane opakowujące zewnętrzny skrypt, zapytania SQL lub zapytania T-SQL wywołujące funkcje, takie jak PREDICT, aby zwracać wyniki z modeli prognozowania utrwalone na serwerze.

  • Deweloperzy z ugruntowanymi umiejętnościami w zakresie określonych narzędzi i środowisk IDE mogą pisać kod w tych narzędziach, a następnie przenosić kod do programu SQL Server.

Diagram architektury

Architektura została zaprojektowana tak, aby skrypty zewnętrzne działały w osobnym procesie od programu SQL Server, ale ze składnikami, które wewnętrznie zarządzają łańcuchem żądań dotyczących danych i operacji w programie SQL Server. W zależności od wersji programu SQL Server obsługiwane rozszerzenia językowe obejmują R, Python oraz języki firm trzecich, takie jak Java i .NET.

Architektura składników w systemie Windows:

Architektura składników systemu Windows

Architektura składników w systemie Linux:

Architektura składników systemu Linux

Składniki obejmują usługę launchpad służącą do wywoływania zewnętrznych środowisk uruchomieniowych i logiki specyficznej dla bibliotek na potrzeby ładowania interpreterów i bibliotek. Program uruchamiający ładuje środowisko uruchomieniowe języka oraz zastrzeżone moduły. Jeśli na przykład kod zawiera funkcje RevoScaleR, zostanie załadowany interpreter RevoScaleR. BxlServer i SQL Satellite zarządzają komunikacją i transferem danych za pomocą programu SQL Server.

W systemie Linux usługa SQL używa usługi launchpadd do komunikowania się z oddzielnym procesem launchpada dla każdego użytkownika.

Launchpad

Launchpad programu SQL Server to usługa, która zarządza i wykonuje skrypty zewnętrzne, podobnie jak w przypadku uruchamiania oddzielnego hosta do przetwarzania zapytań pełnotekstowych i indeksowania pełnotekstowego. Usługa launchpad może uruchamiać tylko zaufane moduły uruchamiające opublikowane przez firmę Microsoft lub certyfikowane przez firmę Microsoft jako spełniające wymagania dotyczące wydajności i zarządzania zasobami.

Zaufane launchery Extension Wersje programu SQL Server
RLauncher.dll dla języka R dla systemu Windows Rozszerzenie języka R SQL Server 2016 i nowsze
Pythonlauncher.dll dla języka Python dla systemu Windows Rozszerzenie języka Python SQL Server 2017 i nowsze
RLauncher.so dla języka R dla systemu Linux Rozszerzenie języka R SQL Server 2019 i nowsze wersje
Pythonlauncher.so dla języka Python dla systemu Linux Rozszerzenie języka Python SQL Server 2019 i nowsze wersje

Usługa Launchpad programu SQL Server działa na własnym koncie użytkownika. Jeśli zmienisz konto, na którym działa launchpad, pamiętaj, aby to zrobić przy użyciu programu SQL Server Configuration Manager, aby upewnić się, że zmiany są zapisywane w powiązanych plikach.

W systemie Windows jest tworzona oddzielna usługa Launchpad programu SQL Server dla każdej instancji silnika bazodanowego, do której dodano usługi SQL Server machine learning. Dla każdego wystąpienia silnika bazy danych istnieje jedna usługa launchpad, więc jeśli masz wiele wystąpień obsługujących skrypty zewnętrzne, będziesz mieć oddzielną usługę launchpad dla każdego z nich. Wystąpienie silnika bazy danych jest powiązane z utworzoną dla niego usługą uruchamiania. Wszystkie wywołania skryptu zewnętrznego w procedurze składowanej lub języku T-SQL powodują, że usługa SQL Server wywołuje usługę launchpad utworzoną dla tego samego wystąpienia.

Aby wykonywać zadania w określonym obsługiwanym języku, launchpad pobiera zabezpieczone konto pracownika z puli i uruchamia proces satelitarny do zarządzania zewnętrznym środowiskiem uruchomieniowym. Każdy proces satelitarny dziedziczy konto użytkownika programu Launchpad i używa tego konta roboczego na czas wykonywania skryptu. Jeśli skrypt używa procesów równoległych, są one tworzone w ramach tego samego konta roboczego.

W systemie Linux obsługiwane jest tylko jedno wystąpienie silnika bazy danych i jest do niego powiązana jedna usługa launchpad. Po wykonaniu skryptu usługa launchpadd uruchamia oddzielny proces launchpad z kontem użytkownika o niskich uprawnieniach mssql_satellite. Każdy proces satelitarny dziedziczy konto użytkownika mssql_satellite launchpad i używa go przez czas wykonywania skryptu.

BxlServer i SQL Satellite

BxlServer to plik wykonywalny udostępniany przez firmę Microsoft, który zarządza komunikacją między programem SQL Server i środowiskiem uruchomieniowym języka. Tworzy obiekty zadań systemu Windows lub przestrzenie nazw dla systemu Linux, które są używane do przechowywania sesji skryptów zewnętrznych. Aprowizuje również bezpieczne foldery robocze dla każdego zadania skryptu zewnętrznego i używa programu SQL Satellite do zarządzania transferem danych między środowiskiem uruchomieniowym zewnętrznym a programem SQL Server. Jeśli uruchomisz Eksploratora procesów , gdy zadanie jest uruchomione, może zostać wyświetlonych jedno lub wiele wystąpień serwera BxlServer.

W efekcie BxlServer jest towarzyszem środowiska uruchomieniowego języka, które współpracuje z programem SQL Server w celu przesyłania danych i zarządzania zadaniami. BXL to binarny język wymiany i odnosi się do formatu danych używanego do wydajnego przenoszenia danych między programem SQL Server i procesami zewnętrznymi.

SQL Satellite to interfejs API rozszerzalności dołączony do aparatu bazy danych, który obsługuje kod zewnętrzny lub zewnętrzne środowiska uruchomieniowe implementowane przy użyciu języka C lub C++.

Serwer BxlServer używa programu SQL Satellite do wykonywania następujących zadań:

  • Odczytywanie danych wejściowych
  • Zapisywanie danych wyjściowych
  • Pobieranie argumentów wejściowych
  • Pisanie argumentów wyjściowych
  • Obsługa błędów
  • Zapisywanie stDOUT i STDERR z powrotem do klienta

Program SQL Satellite używa niestandardowego formatu danych zoptymalizowanego pod kątem szybkiego transferu danych między programem SQL Server i językami skryptów zewnętrznych. Wykonuje konwersje typów i definiuje schematy wejściowych i wyjściowych zestawów danych podczas komunikacji między programem SQL Server a środowiskiem uruchomieniowym skryptu zewnętrznego.

Satelita SQL można monitorować przy użyciu zdarzeń rozszerzonych systemu Windows (XEvents). Aby uzyskać więcej informacji, zobacz Zdarzenia rozszerzone dla usług SQL Server Machine Learning Services.

Kanały komunikacji między składnikami

Protokoły komunikacyjne między składnikami i platformami danych opisano w tej sekcji.

  • TCP/IP

    Domyślnie komunikacja wewnętrzna między programem SQL Server i satelitą SQL używa protokołu TCP/IP.

  • Nazwane potoki

    Wewnętrzny transport danych między serwerem BxlServer i programem SQL Server za pośrednictwem programu SQL Satellite używa zastrzeżonego, skompresowanego formatu danych w celu zwiększenia wydajności. Dane są wymieniane między czasem uruchamiania języka a serwerem BxlServer w formacie BXL przy użyciu nazwanych potoków.

  • ODBC

    Komunikacja między zewnętrznymi klientami nauki danych a zdalnym wystąpieniem SQL Server wykorzystuje ODBC. Konto, które wysyła zadania skryptu do programu SQL Server, musi mieć oba uprawnienia do nawiązywania połączenia z wystąpieniem i uruchamiania skryptów zewnętrznych.

    Ponadto w zależności od zadania konto może potrzebować następujących uprawnień:

    • Odczytywanie danych używanych przez zadanie
    • Zapisywanie danych w tabelach: na przykład podczas zapisywania wyników w tabeli
    • Tworzenie obiektów bazy danych: na przykład w przypadku zapisywania skryptu zewnętrznego w ramach nowej procedury składowanej.

    Gdy program SQL Server jest używany jako kontekst obliczeniowy skryptu wykonywanego z klienta zdalnego, a plik wykonywalny musi pobierać dane ze źródła zewnętrznego, funkcja ODBC jest używana do zapisywania zwrotnego. Program SQL Server mapuje tożsamość użytkownika wystawiającego polecenie zdalne na tożsamość użytkownika w bieżącym wystąpieniu i uruchamia polecenie ODBC przy użyciu poświadczeń tego użytkownika. Parametry połączenia potrzebne do wykonania tego wywołania ODBC są uzyskiwane z kodu klienta.

  • RODBC (tylko R)

    Dodatkowe wywołania ODBC można wykonywać wewnątrz skryptu przy użyciu kontrolera RODBC. RODBC to popularny pakiet języka R używany do uzyskiwania dostępu do danych w relacyjnych bazach danych; jednak jej wydajność jest ogólnie niższa niż porównywalni dostawcy używana przez program SQL Server. Wiele skryptów języka R używa osadzonych wywołań do kontrolera RODBC jako sposobu pobierania "pomocniczych" zestawów danych do użycia w analizie. Na przykład procedura składowana, która trenuje model, może zdefiniować zapytanie SQL w celu pobrania danych na potrzeby trenowania modelu, ale użyj osadzonego wywołania RODBC, aby uzyskać dodatkowe czynniki, wykonać wyszukiwanie lub pobrać nowe dane ze źródeł zewnętrznych, takich jak pliki tekstowe lub program Excel.

    Poniższy kod ilustruje wywołanie RODBC osadzone w skrypcie języka R:

    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");
    
  • Inne protokoły

    Procesy, które mogą wymagać pracy w "fragmentach" lub przesyłają dane z powrotem do klienta zdalnego, mogą również używać formatu pliku XDF. Rzeczywisty transfer danych odbywa się za pośrednictwem zakodowanych obiektów blob.

Zobacz też