Megosztás:


Bővíthetőségi architektúra az SQL Server Machine Learning Servicesben

A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók

Ez a cikk egy külső Python- vagy R-szkript SQL Server Machine Learning Servicesen való futtatásához szükséges bővíthetőségi keretrendszer architektúráját ismerteti. A szkript egy nyelvi futtatókörnyezetben fut az alapvető adatbázismotor kiterjesztéseként.

Háttér

Az bővíthetőségi keretrendszert az SQL Server 2016-ban vezettük be az R-futtatókörnyezet R-szolgáltatásokkal való támogatásához. Az SQL Server 2017 és újabb verziók támogatják a Pythont a Machine Learning Services használatával.

A bővíthetőségi keretrendszer célja, hogy interfészt biztosítson az SQL Server és az olyan adatelemzési nyelvek között, mint az R és a Python. A cél az adattudományi megoldások éles környezetbe való bevezetésekor a súrlódás csökkentése, valamint a fejlesztési folyamat során közzétett adatok védelme. Ha megbízható szkriptnyelvet futtat egy SQL Server által felügyelt biztonságos keretrendszerben, az adatbázis-rendszergazdák fenntarthatják a biztonságot, miközben lehetővé teszik az adatszakértők számára a vállalati adatokhoz való hozzáférést.

Az alábbi ábra vizuálisan ismerteti a bővíthető architektúra lehetőségeit és előnyeit.

Az SQL Server integrációs céljai

Egy külső szkript futtatható egy tárolt eljárás meghívásával, és az eredményeket táblázatos eredményként adja vissza közvetlenül az SQL Servernek. Ez megkönnyíti a gépi tanulást bármely olyan alkalmazásból, amely képes SQL-lekérdezést küldeni és kezelni az eredményeket.

  • A külső szkriptek végrehajtására az SQL Server adatbiztonsága vonatkozik. A külső szkriptet futtató felhasználók csak olyan adatokat érhetnek el, amelyek egyformán elérhetők egy SQL-lekérdezésben. Ha egy lekérdezés nem megfelelő engedély miatt hiúsul meg, az ugyanazon felhasználó által futtatott szkript is ugyanannak az okból hiúsul meg. Az SQL Server biztonsága a tábla, az adatbázis és a példány szintjén van kényszerítve. Az adatbázis-rendszergazdák kezelhetik a felhasználói hozzáférést, a külső szkriptek által használt erőforrásokat és a kiszolgálóhoz hozzáadott külső kódtárakat.

  • A skálázási és optimalizálási lehetőségek kettős alapot tartalmaznak: az adatbázisplatformon keresztüli nyereség (ColumnStore-indexek, erőforrás-szabályozás); és bővítményspecifikus előnyök, például amikor az R- és Python-kódtárakat adatelemzési modellekhez használják. Míg az R egyszálas, a RevoScaleR-függvények többszálasak, és több magon keresztül képesek elosztani a számítási feladatokat.

  • Az üzembe helyezés SQL Server-módszereket használ. Tartalmazhatnak olyan tárolt eljárásokat, amelyek külső szkriptet, beágyazott SQL-t vagy T-SQL-lekérdezést burkolnak, és olyan funkciókat, mint például a PREDICT, hívnak meg, hogy visszatérési eredményeket adjanak az előrejelzési modellekből, amelyek a kiszolgálón vannak tárolva.

  • A specifikus eszközökben és fejlesztőkörnyezetekben már jártas fejlesztők kódot írhatnak ezekben, majd átvihetik a kódot az SQL szerverre.

Architektúra-ábra

Az architektúra úgy lett kialakítva, hogy a külső szkriptek az SQL Servertől eltérő folyamaton fussanak, de olyan összetevőkkel, amelyek belsőleg kezelik az SQL Serveren futó adat- és műveletkérések láncát. Az SQL Server verziójától függően a támogatott nyelvi bővítmények közé tartoznak az R, a Python és a külső nyelvek, például a Java és a .NET.

Összetevőarchitektúra a Windowsban:

Windows-összetevők architektúrája

Komponensarchitektúra Linuxban:

Linux-összetevőarchitektúra

Az összetevők közé tartozik a külső futtatókörnyezetek meghívására szolgáló launchpad-szolgáltatás , valamint az értelmezők és kódtárak betöltésére szolgáló kódtárspecifikus logika. A indító betölt egy nyelvi futtatókörnyezetet, valamint minden védett modult. Ha például a kód RevoScaleR-függvényeket tartalmaz, a rendszer betölt egy RevoScaleR-értelmezőt. A BxlServer és az SQL Satellite kezeli a kommunikációt és az adatátvitelt az SQL Serverrel.

Linuxon az SQL egy launchpadd szolgáltatással kommunikál minden felhasználó számára egy külön launchpad-folyamattal.

Dob

Az SQL Server Launchpad egy olyan szolgáltatás, amely külső szkripteket kezel és hajt végre, hasonlóan ahhoz, ahogyan a teljes szöveges indexelési és lekérdezési szolgáltatás külön gazdagépet indít el a teljes szöveges lekérdezések feldolgozásához. A launchpad szolgáltatás csak a Microsoft által publikált, vagy a teljesítmény- és erőforrás-kezelési követelményeknek megfelelőnek minősített megbízható indítóprogramokat indíthatja el.

Megbízható indítók Extension SQL Server-verziók
RLauncher.dll a Windows R nyelvéhez R-bővítmény SQL Server 2016 és újabb verziók
Pythonlauncher.dll a Windows Python-nyelvéhez Python-bővítmény SQL Server 2017 és újabb verziók
RLauncher.so a Linux R nyelvéhez R-bővítmény SQL Server 2019 és újabb verziók
Pythonlauncher.so Python-nyelv Linuxhoz Python-bővítmény SQL Server 2019 és újabb verziók

Az SQL Server Launchpad szolgáltatás a saját felhasználói fiókjában fut. Ha módosítja a launchpadet futtató fiókot, ezt az SQL Server Configuration Managerrel teheti meg, hogy a módosítások a kapcsolódó fájlokba legyenek írva.

Windows rendszerben külön SQL Server Launchpad-szolgáltatás jön létre minden olyan adatbázismotor-példányhoz, amelyhez hozzáadta az SQL Server Machine Learning Servicest. Minden egyes adatbázismotor-példányhoz egy launchpad szolgáltatás tartozik, így ha több külső szkripttámogatással rendelkező példánya van, mindegyikhez egy launchpad szolgáltatás tartozik. Egy adatbázismotor-példány a számára létrehozott launchpad szolgáltatáshoz van kötve. Egy tárolt eljárásban vagy T-SQL-ben a külső szkriptek összes meghívása azt eredményezi, hogy az SQL Server szolgáltatás meghívja az ugyanahhoz a példányhoz létrehozott launchpad szolgáltatást.

Ha egy adott támogatott nyelven szeretné végrehajtani a feladatokat, az indítási sáv lekéri a készletből a biztonságos feldolgozói fiókot, és elindít egy műholdas folyamatot a külső futtatókörnyezet kezeléséhez. Minden műholdas folyamat örökli a launchpad felhasználói fiókját, és ezt a feldolgozó fiókot használja a szkript végrehajtásának időtartamára. Ha a szkript párhuzamos folyamatokat használ, azokat ugyanazzal az egy feldolgozói fiókkal hozza létre.

Linuxon csak egy adatbázismotor-példány támogatott, és a példányhoz egy launchpadd szolgáltatás van kötve. Szkript végrehajtásakor a launchpadd szolgáltatás egy külön indítási folyamatot indít el az alacsony jogosultságú felhasználói fiókkal mssql_satellite. Minden műholdas folyamat örökli a launchpad mssql_satellite felhasználói fiókját, és ezt használja a szkript végrehajtásának időtartamára.

BxlServer és SQL Satellite

A BxlServer a Microsoft által biztosított végrehajtható fájl, amely kezeli az SQL Server és a nyelvi futtatókörnyezet közötti kommunikációt. Létrehozza a Windows-feladatobjektumokat a Windowshoz vagy a Linux névtereit, amelyek külső parancsfájl-munkameneteket tartalmaznak. Emellett biztonságos munkamappát is biztosít minden külső szkriptfeladathoz, és az SQL Satellite használatával kezeli a külső futtatókörnyezet és az SQL Server közötti adatátvitelt. Ha egy feladat futtatása közben futtatja a Folyamatkezelőt , előfordulhat, hogy a BxlServer egy vagy több példánya jelenik meg.

A BxlServer tulajdonképpen egy olyan nyelvi futtatókörnyezet társa, amely az SQL Serverrel együttműködve továbbítja az adatokat és kezeli a feladatokat. A BXL a bináris Exchange nyelvre utal, és az adatok sql server és külső folyamatok közötti hatékony áthelyezéséhez használt adatformátumra utal.

Az SQL Satellite egy bővíthetőségi API az adatbázismotorban, amely támogatja a C vagy C++ használatával implementált külső kódokat vagy külső futtatókörnyezeteket.

A BxlServer az SQL Satellitet használja a következő feladatokhoz:

  • Bemeneti adatok olvasása
  • Kimeneti adatok írása
  • Bemeneti argumentumok lekérése
  • Kimeneti argumentumok írása
  • Hibakezelés
  • STDOUT és STDERR visszaírása az ügyfélhez

Az SQL Satellite egyéni adatformátumot használ, amely az SQL Server és a külső szkriptnyelvek közötti gyors adatátvitelre van optimalizálva. Típuskonverziókat hajt végre, és meghatározza a bemeneti és kimeneti adatkészletek sémáit az SQL Server és a külső szkript futtatókörnyezete közötti kommunikáció során.

Az SQL Satellite a Kiterjesztett Windows-események (XEvents) használatával figyelhető. További információ: Bővített események az SQL Server Machine Learning Serviceshez.

Kommunikációs csatornák az összetevők között

Az összetevők és adatplatformok közötti kommunikációs protokollokat ebben a szakaszban ismertetjük.

  • TCP/IP

    Alapértelmezés szerint az SQL Server és az SQL Satellite közötti belső kommunikáció TCP/IP protokollt használ.

  • Névvel rendelkező csövek

    A BxlServer és az SQL Server közötti belső adatátvitel az SQL Satellite használatával védett, tömörített adatformátumot használ a teljesítmény növelése érdekében. Az adatok a nyelvi futtatási idők és a BxlServer között BXL formátumban, nevesített csövek használatával cserélődnek.

  • ODBC

    A külső adatelemzési ügyfelek és egy távoli SQL Server-példány közötti kommunikáció ODBC-t használ. A szkriptfeladatokat az SQL Servernek küldő fióknak mindkét engedéllyel kell rendelkeznie a példányhoz való csatlakozáshoz és a külső szkriptek futtatásához.

    Emellett a tevékenységtől függően a fióknak szüksége lehet az alábbi engedélyekre:

    • A feladat által használt adatok olvasása
    • Adatok írása táblákba: például az eredmények táblázatba való mentésekor
    • Adatbázis-objektumok létrehozása: például ha egy új tárolt eljárás részeként menti a külső szkriptet.

    Ha az SQL Servert használják a távoli ügyfélről végrehajtott szkript számítási környezeteként, és a végrehajthatónak külső forrásból kell adatokat lekérnie, az ODBC-t használja a visszaíráshoz. Az SQL Server leképezi a távoli parancsot kibocsátó felhasználó identitását az aktuális példány felhasználójának identitására, és az ODBC-parancsot a felhasználó hitelesítő adataival futtatja. Az ODBC-hívás végrehajtásához szükséges kapcsolati sztring az ügyfélkódból származik.

  • RODBC (csak R)

    Az RODBC használatával további ODBC-hívásokat is kezdeményezhet a szkripten belül. Az RODBC egy népszerű R-csomag, amely a relációs adatbázisokban lévő adatok elérésére szolgál; teljesítménye azonban általában lassabb, mint az SQL Server által használt hasonló szolgáltatók. Sok R-szkript beágyazott hívásokat használ az RODBC-hez, így "másodlagos" adatkészleteket kér le elemzéshez. A modell betanítására szolgáló tárolt eljárás például meghatározhat egy SQL-lekérdezést a modell betanításához szükséges adatok lekéréséhez, de beágyazott RODBC-hívással további tényezőket kérhet le, kereséseket hajthat végre, vagy új adatokat kérhet le külső forrásokból, például szövegfájlokból vagy Excelből.

    Az alábbi kód egy R-szkriptbe beágyazott RODBC-hívást mutat be:

    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");
    
  • Egyéb protokollok

    Azok a folyamatok is használhatják az XDF-fájlformátumot, amelyeknek "adattömbökben" kell működniük, vagy adatokat kell visszavinni egy távoli ügyfélnek. A tényleges adatátvitel kódolt blobokon keresztül történik.

Lásd még: