Partilhar via


Arquitetura de extensibilidade em extensões de linguagem do SQL Server

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores

Saiba mais sobre a arquitetura de extensibilidade usada para as Extensões de Linguagem do SQL Server, que permite executar código externo no SQL Server. Java, Python e R são suportados no SQL Server 2019 (15.x) e versões posteriores. O código é executado em um ambiente de tempo de execução de linguagem como uma extensão para o mecanismo de banco de dados principal.

Contexto geral

O objetivo da estrutura de extensibilidade é fornecer uma interface entre o SQL Server e linguagens externas. Os administradores de banco de dados podem manter a segurança executando uma linguagem confiável dentro de uma estrutura segura gerenciada pelo SQL Server, permitindo que cientistas de dados acessem dados corporativos.

Qualquer idioma externo com suporte pode ser executado chamando um procedimento armazenado e os resultados são retornados como resultados tabulares diretamente para o SQL Server. Isso facilita o uso da linguagem externa de qualquer aplicativo que possa enviar uma consulta SQL e manipular os resultados.

Diagramas de arquitetura

A arquitetura foi projetada para que o código externo seja executado em um processo separado do SQL Server, mas com componentes que gerenciam internamente a cadeia de solicitações de dados e operações no SQL Server.

Arquitetura de componentes no Windows:

Diagrama de arquitetura de componentes no Windows.

Arquitetura de componentes no Linux:

Diagrama de arquitetura de componentes em Linux.

Os componentes incluem um serviço Launchpad usado para invocar tempos de execução externos (por exemplo, Java) e lógica específica da biblioteca para carregar interpretadores e bibliotecas.

Barra de Lançamento

A Barra Inicial do SQL Server é um serviço que gerencia o tempo de vida, os recursos e os limites de segurança do processo externo responsável pela execução do script. Isso é semelhante à maneira como o serviço de indexação e consulta de texto completo inicia um host separado para processar consultas de texto completo. O serviço Launchpad só pode iniciar iniciadores confiáveis publicados pela Microsoft ou certificados pela Microsoft como atendendo aos requisitos de desempenho e gerenciamento de recursos.

O serviço Barra Inicial do SQL Server é executado em SQLRUserGroup, que usa AppContainers para isolamento de execução.

Um serviço separado da Barra Inicial do SQL Server é criado para cada instância do mecanismo de banco de dados à qual você adiciona Extensões de Linguagem de Máquina do SQL Server. Há um serviço Launchpad para cada instância do mecanismo de banco de dados, portanto, se você tiver várias instâncias com suporte a scripts externos, terá um serviço Launchpad para cada uma. Uma instância do mecanismo de banco de dados está vinculada ao serviço Launchpad criado para ela. Todas as invocações de um script externo em um procedimento armazenado ou T-SQL, resultam no serviço SQL Server chamando o serviço da Barra Inicial criado para a mesma instância.

Para executar tarefas em um idioma suportado específico, a Barra Inicial obtém uma conta de trabalhador segura do pool e inicia um processo satélite para gerenciar o tempo de execução externo. Cada processo satélite herda a conta de usuário da Barra Inicial e usa essa conta de trabalho durante a execução do script. Se o script usar processos paralelos, eles serão criados na mesma conta de trabalhador único.

Canais de comunicação entre componentes

Os protocolos de comunicação entre componentes e plataformas de dados são descritos nesta seção.

  • TCP/IP

    Por padrão, as comunicações internas entre o SQL Server e o satélite SQL usam TCP/IP.

  • ODBC

    A comunicação entre clientes externos de ciência de dados e uma instância remota do SQL Server usa ODBC. A conta que envia os trabalhos de script para o SQL Server deve ter permissões para se conectar à instância e executar scripts externos.

    Além disso, dependendo da tarefa, a conta pode precisar destas permissões:

    • Ler dados usados pelo trabalho
    • Gravar dados em tabelas: por exemplo, ao salvar resultados em uma tabela
    • Criar objetos de banco de dados: por exemplo, se salvar script externo como parte de um novo procedimento armazenado

    Quando o SQL Server é usado como o contexto de computação para script executado a partir de um cliente remoto e o executável deve recuperar dados de uma fonte externa, o ODBC é usado para write-back. O SQL Server mapeia a identidade do usuário que emite o comando remoto para a identidade do usuário na instância atual e executa o comando ODBC usando as credenciais desse usuário. A cadeia de conexão necessária para executar essa chamada ODBC é obtida do código do cliente.

  • Outros protocolos

    Os processos que podem precisar trabalhar em "partes" ou transferir dados de volta para um cliente remoto também podem usar o formato de arquivo XDF. A transferência de dados real é feita através de blobs codificados.