Arsitektur ekstensibilitas dalam SQL Server Machine Learning 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 Layanan Pembelajaran Mesin server SQL. Skrip dijalankan dalam lingkungan runtime bahasa sebagai ekstensi ke mesin database inti.

Background

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 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 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.

Tujuan integrasi dengan 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. 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 fungsi panggilan kueri T-SQL 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 di Windows:

Arsitektur komponen Windows

Arsitektur komponen di Linux:

Arsitektur komponen 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 Extensi 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 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.

Di Windows, layanan SQL Server Launchpad terpisah dibuat untuk setiap instans mesin database yang telah Anda tambahkan SQL Server Layanan Pembelajaran Mesin. 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.

BxlServer dan Satelit 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 bahasa Binary Exchange dan mengacu pada format data yang digunakan untuk memindahkan data secara efisien antara proses SQL Server dan 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 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 SQL Server Layanan 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 Satelit SQL 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 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 tersemat 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.

Lihat juga