Arsitektur ekstensibilitas di SQL Server Pembelajaran Mesin Services
Berlaku untuk:
SQL Server 2016 (13.x) dan yang lebih baru
Artikel ini menjelaskan arsitektur kerangka kerja ekstensibilitas untuk menjalankan skrip Python atau R eksternal di server SQL Pembelajaran Mesin Services. Skrip dijalankan dalam lingkungan runtime bahasa sebagai ekstensi ke mesin database inti.
Latar belakang
Kerangka kerja ekstensibilitas diperkenalkan pada SQL Server 2016 untuk mendukung runtime R dengan R Services. SQL Server 2017 dan yang lebih baru memiliki dukungan untuk Python dengan Pembelajaran Mesin Services.
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 skrip tepercaya dalam kerangka kerja aman yang dikelola oleh SQL Server, administrator database dapat menjaga keamanan sambil memungkinkan ilmuwan data mengakses data perusahaan.
Diagram berikut secara visual menjelaskan peluang dan manfaat arsitektur yang dapat diperluas.

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. SQL Server keamanan 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: keuntungan 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 berutas tunggal, fungsi RevoScaleR multi-utas, mampu mendistribusikan beban kerja melalui beberapa inti.
Penyebaran menggunakan metodologi SQL Server. Ini dapat disimpan prosedur yang membungkus skrip eksternal, SQL tersemat, 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 ID Tertentu dapat menulis kode di alat tersebut dan kemudian memindahkan kode ke SQL Server.
Diagram arsitektur
Arsitektur ini dirancang singgah sehingga skrip eksternal berjalan dalam proses terpisah dari SQL Server, tetapi dengan komponen yang secara internal mengelola rantai permintaan untuk data dan operasi pada SQL Server. Bergantung pada versi SQL Server, ekstensi bahasa yang didukung termasuk R, Python, dan bahasa pihak ketiga seperti Java dan .NET.
Arsitektur komponen dalam Windows:

Arsitektur komponen di Linux:

Komponen termasuk layanan launchpad yang digunakan untuk memanggil runtime eksternal dan logika khusus pustaka untuk memuat penerjemah dan pustaka. Peluncur memuat runtime bahasa, ditambah modul kepemilikan apa pun. Misalnya, jika kode Anda menyertakan fungsi RevoScaleR, penerjemah RevoScaleR dimuat. BxlServer dan SQL Satellite 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 untuk manajemen performa dan sumber daya.
| Peluncur tepercaya | Ekstensi | Versi SQL Server |
|---|---|---|
| RLauncher.dll 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 SQL Server Launchpad 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.
Dalam Windows, layanan SQL Server Launchpad 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 dengan layanan launchpad yang dibuat untuknya. Semua pemanggilan skrip eksternal dalam prosedur tersimpan atau T-SQL menghasilkan layanan SQL Server 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. Ketika 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.
Efeknya, BxlServer adalah pendamping untuk lingkungan runtime bahasa yang bekerja dengan SQL Server untuk mentransfer data dan mengelola tugas. BXL adalah singkatan dari biner Exchange bahasa dan mengacu pada format data yang digunakan untuk memindahkan data secara efisien antara proses SQL Server dan eksternal.
SQL Satellite 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
SQL Satellite menggunakan format data kustom yang dioptimalkan untuk transfer data cepat antara bahasa SQL Server dan skrip eksternal. Ini melakukan konversi jenis dan mendefinisikan skema himpunan data input dan output selama komunikasi antara SQL Server dan runtime skrip eksternal.
Satelit SQL dapat dipantau dengan menggunakan Windows extended events (xEvents). Untuk informasi selengkapnya, lihat Acara yang Diperluas untuk Layanan SQL Server Pembelajaran Mesin.
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 SQL Satellite menggunakan format data berpegangan dan terkompresi untuk meningkatkan performa. Data dipertukarkan antara durasi 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 executable 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 tersemat 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 bekerja dalam "gugus" atau mentransfer data kembali ke klien jarak jauh juga dapat menggunakan format file XDF. Transfer data aktual adalah melalui blob yang dikodekan.