Arsitektur ekstensibilitas di SQL Server Pembelajaran Mesin Services

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

Artikel ini menjelaskan arsitektur kerangka kerja ekstensibilitas untuk menjalankan skrip Python atau R eksternal di SQL Server Pembelajaran Mesin Services. Skrip dijalankan dalam lingkungan runtime bahasa sebagai ekstensi ke mesin database inti.

Latar belakang

Kerangka kerja ekstensibilitas diperkenalkan di SQL Server 2016 untuk mendukung runtime R dengan R Services. SQL Server 2017 dan yang lebih baru memiliki dukungan untuk Python dengan Layanan Pembelajaran Mesin.

Tujuan dari kerangka kerja ekstensibilitas adalah untuk menyediakan antarmuka antara SQL Server dan bahasa sains data seperti R dan Python. Tujuannya adalah untuk mengurangi gesekan saat memindahkan solusi ilmu data ke dalam produksi, dan melindungi data yang terekspos selama proses pengembangan. Dengan menjalankan bahasa pembuatan skrip tepercaya dalam kerangka kerja aman yang dikelola oleh SQL Server, administrator database dapat mempertahankan keamanan sekaligus memungkinkan ilmuwan data mengakses data perusahaan.

Diagram berikut secara visual menjelaskan peluang dan manfaat arsitektur yang dapat diperluas.

Goals of integration with SQL Server

Skrip eksternal dapat dijalankan dengan memanggil prosedur tersimpan, dan hasilnya dikembalikan sebagai hasil tabular langsung ke SQL Server. Ini memudahkan untuk menghasilkan atau menggunakan pembelajaran mesin dari aplikasi apa pun yang dapat mengirim kueri SQL dan menangani hasilnya.

  • Eksekusi skrip eksternal tunduk pada keamanan data SQL Server. Pengguna yang menjalankan skrip eksternal hanya dapat mengakses data yang sama-sama tersedia dalam kueri SQL. Jika kueri gagal karena izin yang tidak mencukupi, skrip yang dijalankan oleh pengguna yang sama juga akan gagal karena alasan yang sama. Keamanan SQL Server diberlakukan pada tingkat tabel, database, dan instans. Administrator database dapat mengelola akses pengguna, sumber daya yang digunakan oleh skrip eksternal, dan pustaka kode eksternal yang ditambahkan ke server.

  • Peluang skala dan pengoptimalan memiliki basis ganda: perolehan melalui platform database (indeks ColumnStore, tata kelola sumber daya); dan keuntungan khusus ekstensi, misalnya ketika pustaka Microsoft untuk R dan Python digunakan untuk model ilmu data. Sedangkan R berulir tunggal, fungsi RevoScaleR multi-utas, mampu mendistribusikan beban kerja melalui beberapa inti.

  • Penyebaran menggunakan metodologi SQL Server. Ini dapat berupa prosedur tersimpan yang membungkus skrip eksternal, kueri SQL yang disematkan, atau T-SQL memanggil fungsi seperti PREDICT untuk mengembalikan hasil dari model prakiraan yang bertahan di server.

  • Pengembang dengan keterampilan yang mapan dalam alat dan IDE tertentu dapat menulis kode di alat tersebut dan kemudian memindahkan kode ke SQL Server.

Diagram arsitektur

Arsitektur dirancang singgah sehingga skrip eksternal berjalan dalam proses terpisah dari SQL Server, tetapi dengan komponen yang secara internal mengelola rantai permintaan data dan operasi di SQL Server. Bergantung pada versi SQL Server, ekstensi bahasa yang didukung termasuk R, Python, dan bahasa pihak ketiga seperti Java dan .NET.

Arsitektur komponen di Windows:

Windows component architecture

Arsitektur komponen di Linux:

Linux component architecture

Komponen termasuk layanan launchpad yang digunakan untuk memanggil runtime eksternal dan logika khusus pustaka untuk memuat interpreter dan pustaka. Peluncur memuat runtime bahasa, ditambah modul kepemilikan apa pun. Misalnya, jika kode Anda menyertakan fungsi RevoScaleR, penerjemah RevoScaleR dimuat. BxlServer dan Satelit SQL mengelola komunikasi dan transfer data dengan SQL Server.

Di Linux, SQL menggunakan layanan launchpadd untuk berkomunikasi dengan proses launchpad terpisah untuk setiap pengguna.

Launchpad

Launchpad SQL Server adalah layanan yang mengelola dan menjalankan skrip eksternal, mirip dengan cara pengindeksan teks lengkap dan layanan kueri meluncurkan host terpisah untuk memproses kueri teks lengkap. Layanan launchpad hanya dapat memulai peluncur tepercaya yang diterbitkan oleh Microsoft, atau yang telah disertifikasi oleh Microsoft sebagai persyaratan rapat untuk manajemen performa dan sumber daya.

Peluncur tepercaya Ekstensi Versi SQL Server
RLauncher.dll untuk bahasa R untuk Windows Ekstensi R SQL Server 2016 dan yang lebih baru
Pythonlauncher.dll untuk bahasa Python untuk Windows Ekstensi Python SQL Server 2017 dan yang lebih baru
RLauncher.so untuk bahasa R untuk Linux Ekstensi R SQL Server 2019 dan yang lebih baru
Pythonlauncher.so untuk bahasa Python untuk Linux Ekstensi Python SQL Server 2019 dan yang lebih baru

Layanan Launchpad SQL Server berjalan di bawah akun penggunanya sendiri. Jika Anda mengubah akun yang menjalankan launchpad, pastikan untuk melakukannya menggunakan Pengelola Konfigurasi SQL Server, untuk memastikan bahwa perubahan ditulis ke file terkait.

Di Windows, layanan Launchpad SQL Server terpisah dibuat untuk setiap instans mesin database yang telah Anda tambahkan SQL Server Pembelajaran Mesin Services. Ada satu layanan launchpad untuk setiap instans mesin database, jadi jika Anda memiliki beberapa instans dengan dukungan skrip eksternal, Anda akan memiliki layanan launchpad untuk masing-masing instans. Instans mesin database terikat ke layanan launchpad yang dibuat untuknya. Semua pemanggilan skrip eksternal dalam prosedur tersimpan atau T-SQL menghasilkan layanan SQL Server yang memanggil layanan launchpad yang dibuat untuk instans yang sama.

Untuk menjalankan tugas dalam bahasa tertentu yang didukung, launchpad mendapatkan akun pekerja yang aman dari kumpulan, dan memulai proses satelit untuk mengelola runtime eksternal. Setiap proses satelit mewarisi akun pengguna launchpad dan menggunakan akun pekerja tersebut selama durasi eksekusi skrip. Jika skrip menggunakan proses paralel, skrip dibuat di bawah akun pekerja tunggal yang sama.

Di Linux, hanya satu instans mesin database yang didukung dan ada satu layanan launchpadd yang terikat ke instans. Saat skrip dijalankan, layanan launchpadd memulai proses launchpad terpisah dengan akun pengguna dengan hak istimewa rendah mssql_satellite. Setiap proses satelit mewarisi akun pengguna mssql_satellite launchpad dan menggunakannya selama durasi eksekusi skrip.

Satelit BxlServer dan SQL

BxlServer adalah executable yang disediakan oleh Microsoft yang mengelola komunikasi antara SQL Server dan runtime bahasa. Ini membuat objek pekerjaan Windows untuk Windows, atau namespace layanan untuk Linux, yang digunakan untuk berisi sesi skrip eksternal. Ini juga menyediakan folder kerja yang aman untuk setiap pekerjaan skrip eksternal dan menggunakan Satelit SQL untuk mengelola transfer data antara runtime eksternal dan SQL Server. Jika Anda menjalankan Process Explorer saat pekerjaan sedang berjalan, Anda mungkin melihat satu atau beberapa instans BxlServer.

Akibatnya, BxlServer adalah pendamping lingkungan runtime bahasa yang bekerja dengan SQL Server untuk mentransfer data dan mengelola tugas. BXL adalah singkatan dari bahasa Binary Exchange dan mengacu pada format data yang digunakan untuk memindahkan data secara efisien antara SQL Server dan proses eksternal.

Satelit SQL adalah API ekstensibilitas, termasuk dalam mesin database, yang mendukung kode eksternal atau runtime eksternal yang diterapkan menggunakan C atau C++.

BxlServer menggunakan Satelit SQL untuk tugas-tugas ini:

  • Membaca data input
  • Menulis data output
  • Mendapatkan argumen input
  • Menulis argumen output
  • Penanganan kesalahan
  • Menulis STDOUT dan STDERR kembali ke klien

Satelit SQL menggunakan format data kustom yang dioptimalkan untuk transfer data cepat antara SQL Server dan bahasa skrip eksternal. Ini melakukan konversi jenis dan menentukan skema himpunan data input dan output selama komunikasi antara SQL Server dan runtime skrip eksternal.

Satelit SQL dapat dipantau dengan menggunakan peristiwa yang diperluas Windows (xEvents). Untuk informasi selengkapnya, lihat Acara yang Diperluas untuk Layanan Pembelajaran Mesin SQL Server.

Saluran komunikasi antar komponen

Protokol komunikasi di antara komponen dan platform data dijelaskan di bagian ini.

  • TCP/IP

    Secara default, komunikasi internal antara SQL Server dan Satelit SQL menggunakan TCP/IP.

  • Pipa Bernama

    Transportasi data internal antara BxlServer dan SQL Server melalui Satelit SQL menggunakan format data berpemandangan eksklusif untuk meningkatkan performa. Data dipertukarkan antara waktu eksekusi bahasa dan BxlServer dalam format BXL, menggunakan Named Pipes.

  • ODBC

    Komunikasi antara klien ilmu data eksternal dan instans SQL Server jarak jauh menggunakan ODBC. Akun yang mengirim pekerjaan skrip ke SQL Server harus memiliki izin untuk menyambungkan ke instans dan menjalankan skrip eksternal.

    Selain itu, tergantung pada tugas, akun mungkin memerlukan izin ini:

    • Membaca data yang digunakan oleh pekerjaan
    • Menulis data ke tabel: misalnya, saat menyimpan hasil ke tabel
    • Buat objek database: misalnya, jika menyimpan skrip eksternal sebagai bagian dari prosedur tersimpan baru.

    Ketika SQL Server digunakan sebagai konteks komputasi untuk skrip yang dijalankan dari klien jarak jauh, dan yang dapat dieksekusi harus mengambil data dari sumber eksternal, ODBC digunakan untuk tulis balik. SQL Server memetakan identitas pengguna yang mengeluarkan perintah jarak jauh ke identitas pengguna pada instans saat ini, dan menjalankan perintah ODBC menggunakan kredensial pengguna tersebut. string koneksi yang diperlukan untuk melakukan panggilan ODBC ini diperoleh dari kode klien.

  • RODBC (khusus R)

    Panggilan ODBC tambahan dapat dilakukan di dalam skrip dengan menggunakan RODBC. RODBC adalah paket R populer yang digunakan untuk mengakses data dalam database relasional; namun, performanya umumnya lebih lambat daripada penyedia sebanding yang digunakan oleh SQL Server. Banyak skrip R menggunakan panggilan yang disematkan ke RODBC sebagai cara mengambil himpunan data "sekunder" untuk digunakan dalam analisis. Misalnya, prosedur tersimpan yang melatih model mungkin menentukan kueri SQL untuk mendapatkan data untuk melatih model, tetapi menggunakan panggilan RODBC yang disematkan untuk mendapatkan faktor tambahan, melakukan pencarian, atau untuk mendapatkan data baru dari sumber eksternal seperti file teks atau Excel.

    Kode berikut mengilustrasikan panggilan RODBC yang disematkan dalam skrip 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");
    
  • Protokol lain

    Proses yang mungkin perlu berfungsi dalam "gugus" atau mentransfer data kembali ke klien jarak jauh juga dapat menggunakan format file XDF. Transfer data aktual melalui blob yang dikodekan.

Lihat Juga