Google App Engine e Cloud Datastore

Neste post vamos aprender sobre dois serviços existentes no Google Cloud Platform, o App Engine e o Cloud Datastore. O App Engine é categorizado como um PaaS (Platform as a Service) que faz com que o deploy de suas aplicações sejam executados de forma simples. Já o Cloud Datastore é um banco NoSQL e NoOps totalmente administrado que pode ser utilizado com o App Engine.

Exemplo de ambiente que vamos construir

Google App Engine

App Engine no Google Cloud Platform

O App Engine é uma das opções de recursos de máquinas para rodar suas aplicações e uma plataforma para construir aplicações web de forma escalável, assim como seus serviços. Com o App Engine você faz o deploy da aplicação com um simples comando e ele toma conta de todos os detalhes que envolvem este deploy. Imagine um bug fix, o App Engine inicia uma nova versão do programa e para as antigas quando você subir uma nova versão. Pico de acesso? O App Engine vai automaticamente criar aplicações para você assim como desligá-las quando você tiver poucos acessos.

Não existem Load Balancers para ser configurados, patches instalados. Aqui o objetivo é focar no seu código e aplicação e a plataforma vai criar do resto (NoOps lembra?). Ela vai cuidar do hardware, rede, load balancer, monitoramento e escalabilidade necessárias para manter seu projeto rodando. Atualmente você pode utilizar modelos em Java, Python, PHP e Go ou criar os seus runtimes.

Visualização das diferenças de IaaS e PaaS

Existem grandes empresas que rodam utilizando o App Engine, como o exemplo mostrado abaixo.

O Snapchat utiliza App Engine

Imaginem a complexidade para tratar a infraestutura e o custo de equipe para um software como utilizando o IaaS. Este é só um exemplo de como o NoOps pode transformar a realidade de empresas e de uma startup.

Atualmente existem duas formas de se trabalhar com o App Engine chamadas de Standard e Flexible. Vamos estudá-las a seguir.

App Engine Standard Environment

Estes containers estarão rodando na infraestrutura do google, fora do Compute Engine. Neste formato existem runtimes pré definidas já disponibilizadas para utilização com Java , Python, PHP e Go. Uma das vantagens de utilizar este modelo é a sua habilidade em escalar rapidamente. O próprio App Engine monitora sua app e o seu tráfego e vai ligar e desligar instâncias conforme a necessidade. O App Engine inicia runtimes em millisegundos, o que torna possível que a aplicação seja “desligada” quando você não tem usuários, entrando no free-tier de custo zero. Existem SDKs para cada uma das linguagens suportadas e é possível rodar este SDK localmente, assim como existem ferramentas de deploy para novas versões de aplicação.

Como este modelo faz com que o App Engine rode em ambientes em sandboxes, existem certas premissas que sua aplicação deve respeitar. Algumas delas são limitações de softwares que você pode instalar, versionamento de idiomas e o fato de não poder escrever no file system. A autenticação com os sandboxes pode ser feita utilizando-se Google Accounts ou contas em seus domínios.

Cada projeto tem um ambiente de App Engine e as aplicações neste ambiente podem ser divididas em serviços, onde cada serviço pode ser atualizado de forma separada e cada serviço pode rodar em um ou mais containers. Podemos versionar serviços e rodar versões diferentes simultaneamente especificando a porcentegem de distribuição de requisições (A/B testing).

Workflow no App Engine Standard

Dentro do App Engine podemos integrar facilmente com outros serviços como o Memcache, Chron ou de busca com o Cloud Data Store.

App Engine Flexible Environment

Como o próprio nome diz, aqui temos a flexibilidade. O Google entrega esta flexibilidade através de containers Docker onde você pode configurar exatamente o que precisa para sua aplicação.

Existem alguns containers já pré-configurados que o Google disponibiliza como Java 8 e Python. Vamos dizer que você queira desenvolver o software usando C# é possível configurar um container que utilize as bibliotecas necessárias. Lembrando que suas aplicações ainda serão publicadas em um modelo NoOps que toma conta de toda a escalabilidade, monitoramento e por ai vai.

O deploy é feito de forma ligeiramente diferente do standart. Os containers Docker rodam no Compute Engine, ou seja, são criadas máquinas virtuais e estas serão cobradas no modelo do CE. Os containers distribuídos pelo Google tem a mesma configuração dos serviços do standart, incluindo também as mesmas SKDs.

Diferenças entre os tipos de ambientes de App Engine

Caso sua aplicação utilize padrões orientados a serviço, é possível rodar os dois modos simultaneamente de acordo com a necessidade de seus serviços.

Google Cloud Endpoints

Um assunto que também vamos falar rapidamente aqui é o GCE. Com este serviço você pode criar APIs seguindo o padrão REST e assim serão documentados exatamente como são os do Google. Através de anotações no código você possibilita algo como o Swagger.

Estes endpoints também simplificam a integração com autenticação OAuth 2 em seus próprios serviços. Atualmente eles podem ser consumidos por serviços que foram desenvolvidos em Java e Python, assim como em aplicações iOS, Android e Web.

Google Cloud Datastore

Cloud Datastore no Google Cloud Platform

NoSQL altamente escalável para suas aplicações, administrado pelo Google e que é ideal para salvar dados de suas aplicações que rodam no App Engine. Ele é schemaless e utiliza o conceito de entidades e propriedades com seus respectivos valores. Você pode salvar estas entidades da forma que desejar, sem se preocupar com o schema do banco de dados. Existe a possiblidade de conectar ferramentas de desenvolvimento para simular este db localmente.

Como todo serviço NoOps, você não precisa se preocupar com configuração pois ele vai escalar automaticamente e salvar os dados em zonas múltiplas. Transações ACID, garantindo o estado dos dados entre os containers e free-tier que para os pequenos que não gera custo e integra nativamente com App Engine. Existem ainda APIs para você integrar em suas aplicações.

Links Úteis

LAB

Este vai ser bem legal! Vamos usar o AppEngine para rodar uma aplicação chamada Bookshelf. Esta aplicação usa o Google Cloud Datastore para armazenar dados e pode ser inserida no modelo standard do App Engine. Vamos clonar um repositório e fazer o deploy da aplicação, como em um caso real. Ele está disponível neste link.

No próximo post vamos conhecer as opções de storage que o Google Cloud platform fornece, além do Datastore. Abraços e até lá!