Partilhar via


Práticas recomendadas para aplicativos Databricks

Esta página lista as práticas recomendadas importantes para desenvolver e executar aplicativos Databricks. Essas diretrizes se concentram nos requisitos de segurança, desempenho e plataforma.

Melhores práticas gerais

  • Use os recursos nativos do Azure Databricks para processamento de dados. A computação do aplicativo é otimizada para renderização da interface do usuário. Use Databricks SQL para consultas e conjuntos de dados, Lakeflow Jobs para processamento em lote e Model Serving para cargas de trabalho de inferência de IA. Descarregue o processamento pesado de dados para esses serviços para evitar problemas de desempenho. Teste seu aplicativo nas condições de carregamento esperadas para verificar se ele atende aos seus requisitos.

  • Implemente um tratamento de desligamento suave. Seu aplicativo deve ser desligado dentro de 15 segundos após receber um SIGTERM sinal, ou ele termina à força com SIGKILL.

  • Evite operações privilegiadas. Os aplicativos são executados como usuários sem privilégios e não podem executar ações que exijam permissões elevadas, como acesso raiz. Não é possível instalar pacotes no nível do sistema usando gerenciadores de pacotes como apt-get, yumou apk. Em vez disso, use pacotes Python do PyPI ou pacotes Node.js do npm para gerenciar as dependências do aplicativo.

  • Entenda a rede gerenciada pela plataforma. As solicitações são encaminhadas por meio de um proxy reverso, portanto, seu aplicativo não pode depender da origem das solicitações. O Azure Databricks lida com a terminação TLS e requer que os aplicativos ofereçam suporte a texto não criptografado HTTP/2 (H2C). Não implemente o tratamento TLS personalizado.

  • Vincule-se ao host e à porta corretos. O seu aplicativo deve escutar em 0.0.0.0 e usar a porta especificada na variável de ambiente DATABRICKS_APP_PORT. Consulte as variáveis de ambiente para obter detalhes.

  • Minimize o tempo de inicialização do contêiner. Mantenha a lógica de inicialização leve para reduzir a latência de inicialização a frio. Evite bloquear operações como grandes instalações de dependência ou chamadas de API externas durante a inicialização. Carregue recursos pesados apenas quando necessário.

  • Registar em stdout e stderr. O Azure Databricks captura logs dos fluxos de saída padrão e de erro. Utilize-os para todos os registos para garantir que estejam visíveis na interface do utilizador do Azure Databricks. Evite gravar logs em arquivos locais.

  • Lide com erros inesperados de forma adequada. Implemente o tratamento global de exceções para evitar falhas de erros não detetados. Retorne respostas de erro HTTP adequadas sem expor traces de pilha ou dados confidenciais.

  • Fixar versões de dependência. Use números de versão exatos em seu requirements.txt arquivo para garantir ambientes consistentes entre compilações. Evite usar versões não fixadas ou mais recentes de pacotes.

  • Valide e limpe a entrada do usuário. Sempre valide os dados recebidos e limpe-os para evitar ataques de injeção ou entradas malformadas, mesmo em aplicativos internos.

  • Use o cache na memória para operações caras. Armazene em cache dados usados com frequência, como resultados de consultas ou respostas de API, para reduzir a latência e evitar processamento redundante. Use functools.lru_cache, cachetools ou bibliotecas semelhantes, e o cache cuidadosamente em aplicativos multi-usuário.

  • Use padrões de solicitação assíncronos para operações de longa execução. Evite solicitações síncronas que aguardam a conclusão das operações, o que pode atingir o tempo limite. Em vez disso, faça uma solicitação inicial para iniciar a operação e, em seguida, consulte periodicamente o estado do recurso ou o ponto de extremidade para verificar o status de conclusão.

Práticas recomendadas de segurança

  • Siga o princípio do menor privilégio. Conceda apenas as permissões necessárias para cada usuário ou grupo. Use CAN USE em vez de CAN MANAGE , a menos que seja necessário controle total. Consulte Práticas recomendadas para obter permissões.

  • Escolha cuidadosamente os métodos de autenticação. Use entidades de serviço quando o acesso a recursos e dados for o mesmo para todos os usuários do aplicativo. Implemente a autenticação do usuário somente em espaços de trabalho com autores de aplicativos confiáveis e código de aplicativo revisado por pares, quando o aplicativo deve respeitar as permissões do usuário chamador.

  • Utilize entidades de serviço dedicadas para cada aplicação. Não partilhe credenciais da entidade de serviço entre aplicações ou utilizadores. Conceda apenas as permissões mínimas necessárias, como CAN USE ou CAN QUERY. Alterne as credenciais da entidade de serviço quando os criadores de aplicativos deixarem sua organização. Consulte Gerenciar o acesso do aplicativo aos recursos.

  • Isolar ambientes de aplicativos. Use espaços de trabalho diferentes para separar aplicativos de desenvolvimento, preparação e produção. Isso evita o acesso acidental aos dados de produção durante o desenvolvimento e os testes.

  • Aceda aos dados através da computação adequada. Não configure seu aplicativo para acessar ou processar dados diretamente. Use armazéns SQL para consultas, Model Serving para inferência de IA e Lakeflow Jobs para processamento em lote.

  • Gerencie segredos. Nunca exponha valores secretos brutos em variáveis de ambiente. Use valueFrom na configuração do seu aplicativo e gire segredos regularmente, especialmente quando as funções da equipe mudam. Consulte Práticas recomendadas.

  • Minimize escopos e registre ações do usuário. Ao usar a autorização do usuário, solicite apenas os escopos de que seu aplicativo precisa e registre todas as ações do usuário com registros de auditoria estruturados. Consulte Práticas recomendadas para autorização do usuário.

  • Restrinja o acesso à rede de saída. Permita apenas os domínios de que seu aplicativo precisa, como repositórios de pacotes e APIs externas. Use o modo de execução seca e os logs de negação para validar sua configuração. Consulte Práticas recomendadas para configurar políticas de rede.

  • Siga práticas de codificação seguras. Parametrize consultas SQL para evitar ataques de injeção e aplique diretrizes gerais de desenvolvimento seguro, como validação de entrada e tratamento de erros. Consulte API de execução de instruções: executar SQL em armazéns.

  • Monitore as atividades suspeitas. Revise regularmente os logs de auditoria em busca de padrões de acesso incomuns ou ações não autorizadas. Configure alertas para eventos críticos de segurança.