Fácil criação de API para cientistas de dados com R

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Aprenda a criar uma API REST robusta com Docker e R Plumber.

O esquema do conjunto de dados ao vivo público no Google Big Query para o qual criaremos uma API

Este artigo também foi publicado em https://www.r-bloggers.com/.

Esta é a parte três de uma série de vários artigos sobre como criar e implantar uma API de maneira robusta com o R e o Docker, que permite extrair dados dinâmicos do Google Big Query. Para a primeira parte, consulte Grande consulta do Google com R e para a parte dois, consulte Extração de dados ao vivo com Cron e R. Para uma breve introdução ao Docker, consulte a parte dois da série de artigos sobre como criar e implantar um painel, Implantando um painel de controle flexível brilhante com o Docker.

APIs são uma maneira conveniente de acessar dados entre dispositivos, independentemente de uma linguagem de programação. de apresentação State TAPIs de transferência são o tipo mais comum de API da Web. REST é um paradigma de arquitetura de software que define um conjunto de operações uniformes e sem estado. As operações uniformes simplificam a definição de uma interface e a ausência de estado o torna confiável, rápido e fácil de modificar e dimensionar. O protocolo de troca comumente usado é o Protocolo HTT, com suas operações GET, HEAD, POST, PUT, PATCH, DELETE, CONNECT, OPTIONS e TRACE enviadas para um endereço IP ou seu URL associado.

Criaremos uma API REST em R com o pacote Plumber para facilitar o acesso a dados do conjunto de dados públicos de qualidade do ar em tempo real do Big Query a partir do openAQ. Permitimos manter os registros permanentes da qualidade do ar por meio de uma extração agendada de dados via Cron em um contêiner do Docker, pois as entradas mais antigas do conjunto de dados são omitidas quando novos dados são adicionados. A API do encanador R será executada em seu próprio contêiner Docker e esse contêiner será executado em uma rede de contêineres junto com o contêiner Docker de extração de dados. Essa arquitetura tem várias vantagens:

  • Portabilidade de todo o serviço para outras máquinas ou serviços em nuvem
  • Dependências claramente definidas evitam quebra de funcionalidade
  • A extração e pré-agregação dos dados permite tempos de resposta rápidos da API, sem a necessidade de consulta à base de dados
  • Segurança de dados aprimorada, pois as operações da API e o acesso à base de dados estão em contêineres separados
  • A modularidade facilita a depuração do serviço e a integração de peças adicionais
Leia Também  RcppSimdJson 0.0.6: Novos upstream, novos recursos!

R Script de encanador

O Encanador permite decorar o código R com comentários que definem terminais e vários parâmetros de entrada. Você pode expor o código R decorado em um endereço IP definido. Instale o Plumber do CRAN ou GitHub e abra um novo script do Plumber para ver alguns exemplos. Se você possui o RStudio, pode clicar no botão “Executar API” para testar seus pontos de extremidade localmente com o Swagger. Por padrão, a saída do encanador é enviada como JSON, no entanto, você pode usar outros serializadores ou criar novos para instruir o encanador a renderizar a saída em um formato diferente. Para obter mais informações, consulte a documentação do encanador.

O script a seguir instrui o encanador a expor várias funções R para obter dados dos dados de qualidade do ar extraídos que são salvos no volume compartilhado dos dois contêineres do Docker como /shared-data/airquality-india.RDS. A última função no ponto final / plot fornecerá um histograma de teste quando chamado no formato PNG, conforme especificado pelo serializador # * @png. Observe que, em vez das instruções elseif, você pode parametrizar a função para obter um código mais conciso. Você pode clonar todo o repositório do GitHub do projeto aqui.

Dockerfile para a API

Criaremos uma imagem do Docker com receitas em um arquivo do Docker que adiciona camadas de imagens umas sobre as outras. Usaremos a imagem rocker / tidyverse do Dockerhub como imagem base. Isso pressupõe conhecimento básico do Docker, se não Implantando um painel de controle flexível brilhante com o Docker. O CMD da camada final de nómada[“R”, “-e”, “pr

No diretório do Dockerfile, execute o docker build -t openaq_api., Isso criará a imagem do Dockerfile e a marcará como openaq_api. Para testar a API dockerized, execute o contêiner docker por meio deste comando para ligar a porta do host 3838 à porta contêiner exposta na qual a API é executada.

$ docker run -d 
-p 3838:3838
--restart=always
--name openaq_api_container
--rm
openaq_api

Em seguida, verifique se o histograma de teste é retornado da API via curl no console ou via httr com R:

require("httr")
# send API HTTP operation
api_output
   # param list not needed here as /plot endpoint has none
#query = list(param1 =, param2=,...)
)
# show body of output                                                                                                 
content(api_output)

Isso deve mostrar um histograma de teste no formato PNG.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Criando o serviço de vários contêineres

Definimos um serviço que consiste no contêiner da API e no contêiner de extração de dados com um volume compartilhado entre eles via docker-compose. O Docker-compose é uma ferramenta que você pode instalar adicionalmente no mecanismo do Docker, o que facilita a configuração de um serviço de vários contêineres programaticamente por meio de definições em um arquivo YAML. Definimos o volume compartilhado por meio de volumes de parâmetros: e uma rede compartilhada para permitir que os contêineres escutem as portas uns dos outros por meio de redes de parâmetros: (Isso não é necessário neste serviço e apenas é mostrado para clompleteness). Os contêineres são definidos por meio dos serviços de parâmetro :, aqui o parâmetro build: especifica que as imagens do contêiner são reconstruídas a partir dos Dockerfiles no contexto :. O volume compartilhado é montado em um diretório dentro dos contêineres em volumes :. A porta exposta 3838 do contêiner da API está vinculada à porta 3838 do host via portas :.

Se você clonou o repositório do GitHub do projeto, poderá ver a estrutura do arquivo com o arquivo docker-compose.yml no diretório superior. No diretório superior, crie e inicie os contêineres com o comando

$ docker-compose up

Para executar no modo desanexado, adicione -d. Para forçar a recriação de contêineres existentes e / ou forçar as imagens a reconstruir o add –force-recrie –build Para parar todas as redes e contêineres iniciados especificados no arquivo YAML, execute o docker-compose down.

O processo de extração agora deve estar em funcionamento, como visto nos logs do docker, porque adaptamos os logs do trabalho cron agendado. Quando a primeira execução de extração terminou, você pode usar a API Plumber para receber os dados em R:

Para onde ir a partir daqui: Observações finais e notas adicionais

É isso mesmo, criamos um serviço robusto para extrair dados do Google Big Query e tornamos os dados facilmente acessíveis por meio de uma API REST com Docker e R nesta série de três artigos.

Originalmente, montei no docker-compose.yml do contêiner da API o soquete do docker UNIX do daemon do Docker host como um volume - / var / run / docker.sock: /var/run/docker.sock para obter a janela de encaixe registra no host por meio de uma chamada de API. No entanto, removi esta parte, pois essa prática é um grande problema de segurança, principalmente se os contêineres forem usados ​​na produção. Consulte https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/ para obter mais informações.

A partir daqui, você poderá implantar esse serviço de vários contêineres em produção, por exemplo, para serviços em nuvem como AWS, Google Cloud e DigitalOcean. É útil ter uma ferramenta de orquestração de contêiner implantada, como o Docker Swarm ou Kubernetes, para gerenciar seus contêineres do Docker e seus recursos compartilhados.

Em uma configuração de produção, convém usar um servidor proxy reverso, como o Nginx, para redirecionar as solicitações de API para um URL adicional à porta exposta do contêiner do API Docker e criptografá-lo via HTTPS. Além disso, você pode escrever testes de unidade para sua API com o pacote R testthat e também carregar sua API enquanto estiver sob muitas solicitações, por exemplo o pacote R loadtest.

O encanador lida com solicitações de API sequencialmente. Se você tiver muitas chamadas à API, uma opção seria implantar vários contêineres da API e balancear a carga do tráfego recebido via Nginx. Se você deseja executar quatro dos contêineres da API, execute docker-compose up com o parâmetro scale:

$ docker-compose up --scale REST-API=4

Outra opção não é criar sua API com o Plumber, mas com o pacote R RestRserve. Ele lida com solicitações em paralelo e pode ser, em geral, a melhor solução se você precisar de uma API de nível industrial, no entanto, é mais complicado definir os pontos de extremidade. Para obter dicas adicionais sobre como acelerar sua API, consulte https://medium.com/@JB_Pleynet/how-to-do-an-efficient-r-api-81e168562731.


A criação fácil de API para cientistas de dados com R foi publicada originalmente no Analytics Vidhya on Medium, onde as pessoas continuam a conversa destacando e respondendo a essa história.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: o email, Twitter, RSS ou facebook ...



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br