Construa um Backend Escalável com IA

Um backend “escalável” é um backend que consegue lidar com um aumento de carga sem uma queda considerável no desempenho.

Construir um backend escalável envolve vários processos e considerações, como o design do banco de dados e a estratégia de implantação.

Neste artigo, você aprenderá como construir um backend escalável com a ajuda da inteligência artificial (IA).

O que Torna um Backend Escalável?

Diversos fatores implementados durante o ciclo de desenvolvimento de software trabalham em conjunto para tornar um backend escalável.

Um dos fatores que contribuem para a escalabilidade de um backend é a velocidade das consultas ao banco de dados.

Consultas lentas aumentam o tempo de resposta do servidor e afetam sua capacidade de processar várias requisições simultaneamente.

Você pode acelerar suas consultas implementando um design de esquema adequado e escrevendo consultas eficientes.

O processamento assíncrono é outro fator que pode tornar um backend escalável.

Tarefas que consomem muitos recursos podem bloquear threads de execução e limitar a capacidade do servidor de processar requisições simultâneas.

Você pode resolver esse problema delegando tarefas que consomem muitos recursos, como grandes cálculos e uploads de arquivos, para “background jobs”.

Outro fator é a sua estratégia de implantação. É necessário implantar o backend utilizando uma estratégia de implantação escalável, por meio de serviços como o Back4app.

Por exemplo, novos containers são automaticamente iniciados conforme o tráfego aumenta, distribuindo a carga entre várias instâncias sem intervenção manual.

Da mesma forma, o sistema reduz sua escala conforme a demanda diminui, liberando recursos não utilizados.

Neste tutorial, você construirá uma aplicação de gerenciamento de canis que implementa todos os fatores mencionados acima para torná-la escalável.

Projetando um Backend Escalável com IA

Como mencionado anteriormente, você irá construir uma aplicação de gerenciamento de canis. Aqui estão os requisitos da aplicação:

  • Sua aplicação permitirá que os proprietários façam o check-in de seus cães no seu canil.
  • Quando um proprietário faz o check-in de seu cão no seu canil, sua aplicação armazenará detalhes sobre o cão, como nome, raça, idade, nome do proprietário e uma imagem. Em seguida, será gerado um código único para o proprietário.
  • O código único que o proprietário recebe será a única maneira de recuperar seu cão do canil ao final da visita.
  • Durante a estadia no seu canil, você acompanhará todas as atividades em que o cão esteve envolvido. Este tutorial incluirá apenas alimentação, medicação e cuidados de higiene.
  • Ao final da visita, o proprietário fornecerá o código único que recebeu no check-in para recuperar seu(s) cão(ães).

O primeiro passo para concretizar os requisitos mencionados acima é projetar um banco de dados normalizado, com pouca ou nenhuma redundância de dados.

Você irá projetar e criar esse esquema de banco de dados com a ajuda do Agente de IA do Back4app, que atuará como um gerador de backend baseado em IA.

O Agente de IA do Back4app

O Agente de IA do Back4app é um LLM que interage com os produtos do Back4app, a Plataforma de Backend e a Plataforma de Implantação Web.

Ele permite que você interaja com esses produtos usando prompts e ajudará a criar um backend escalável com IA.

Para acessar o Agente de IA, você precisa de uma conta no Back4app. Se ainda não tiver uma, você pode se inscrever gratuitamente.

Faça login na sua conta Back4app e clique no link “Agente de IA” na barra de navegação do seu painel.

Back4app app dashboard navbar with the AI Agent link highlighted

Clicking the link will take you to the AI Agent page, as shown in the image below.

Back4app AI agent start page

Nesta página, você pode inserir vários prompts, como um para criar uma nova aplicação BaaS na sua conta Back4app.

Construa um backend com IA

Para criar uma nova aplicação de backend no Back4app, você pode inserir o prompt abaixo ou algo semelhante no Agente de IA.

- Crie uma nova aplicação de backend chamada "Backend de Gestão de Canil".Versão original em inglês (Create a new backend application called "Kennel Management Backend")

Você deve receber uma resposta informando que a aplicação foi criada com sucesso.

AI agent response with redacted sensitive information

Você pode visualizar a aplicação criada no seu painel do Back4app, conforme mostrado na imagem abaixo.

Default Back4app dashboard

Conforme mostrado na imagem acima, o banco de dados da sua nova aplicação de backend está vazio, exceto pelas classes padrão _User e _Role.

Em seguida, você irá projetar e adicionar o esquema de banco de dados à sua aplicação de backend.

Projetando Seu Banco de Dados

Para projetar um esquema de banco de dados normalizado para os requisitos da sua aplicação mencionados acima, insira o prompt abaixo ou algo semelhante no Agente de IA.

- Projete um esquema de banco de dados normalizado para uma aplicação de gerenciamento de canil.

- A aplicação armazena os detalhes dos cães: nome, raça, idade, um nome de usuário único do proprietário, informações de contato do proprietário e uma imagem;

- Quando o proprietário faz o check-in, é gerado um código único para que ele possa recuperar o cão.

- A aplicação acompanha as atividades durante a estadia (alimentação, medicação, cuidados de higiene).
O proprietário fornece o código único para recuperar o cão ao final da visita.

- Garanta que os relacionamentos entre as entidades, como cães, proprietários, visitas, atividades e o código de recuperação, estejam devidamente estruturados.

Versão original em inglês abaixo:

- Design a normalized database schema for a dog kennel management application. 

- The app stores dog details: name, breed, age, a unique owner username, owner contact details, and an image; 

- When an owner checks in and generates a unique code for the owner to retrieve the dog. 

- It tracks activities during the visit (eating, medication, grooming). 
The owner provides the unique code to retrieve their dog at the end of the visit. 

- Ensure relationships between entities like dogs, owners, visits, activities, and the retrieval code are properly structured.

O prompt acima deve retornar um esquema de banco de dados semelhante ao visualizado abaixo.

Visual representation of a normalized database schema

O esquema de banco de dados acima possui quatro tabelas: proprietários, cães, visitas e atividades. Um proprietário pode ter vários cães (relação um-para-muitos), mas cada cão pertence a apenas um proprietário, vinculado por meio de uma chave estrangeira na tabela de cães.

Da mesma forma, um cão pode ter várias visitas (relação um-para-muitos) ao longo do tempo, sendo cada visita específica para aquele cão e registrada na tabela de visitas por meio de uma chave estrangeira.

Além disso, cada visita pode envolver várias atividades (relação um-para-muitos), como alimentação, cuidados de higiene ou medicação, cada uma vinculada a uma visita específica por meio da chave estrangeira visit_id na tabela de atividades.

Agora que você tem o design do seu banco de dados, você irá solicitar ao Agente de IA para criar o banco de dados no seu backend usando um prompt semelhante ao abaixo.

- Crie o banco de dados projetado na aplicação de backend "Backend de Gestão de Canil". 

Versão original em inglês abaixo:

- Create the designed database in the backend app "Kennel Management Backend".

Você deve receber uma resposta informando que o banco de dados foi criado com sucesso. Você pode confirmar verificando o painel da sua aplicação para as novas tabelas criadas, conforme mostrado na imagem abaixo.

Back4app dashboard highlighting newly created database tables.

Agora que você criou seu backend e adicionou as tabelas de banco de dados da sua aplicação, você irá implementar a lógica da aplicação.

Implementando a Lógica do seu Backend com IA

A partir dos requisitos da aplicação, sua aplicação deve permitir que os proprietários façam o check-in de seus cães no canil, armazenem detalhes como nome, raça, idade, nome do proprietário e imagem do cão, e gerem um código único de recuperação para o proprietário.

Para implementar esses requisitos, você precisa de uma função utilitária que gere um código único de recuperação e outra que faça o upload da imagem do cão em segundo plano, garantindo que a tarefa de upload não diminua o tempo de resposta da sua aplicação.

Implementando Funções Utilitárias

Você pode criar uma função utilitária que gere um código único inserindo o prompt abaixo ou algo semelhante no Agente de IA:

- Crie uma função utilitária de cloud code na aplicação "Backend de Gestão de Canil" que gere um código único de recuperação para os cães registrados no canil.

- Armazene o código em um arquivo utils.js e torne o arquivo acessível para toda a aplicação.

Versão original em inglês abaixo:

- Create a utility cloud code function in the "Kennel Management Backend" app that generates  a unique retrieval code for the dogs checked into the kennel.

-Store the code in a `utils.js` file and make the file accessible to the entire application.

Você deve receber uma resposta informando que a função de cloud code foi criada, semelhante à resposta mostrada na imagem abaixo.

Back4app AI Agent page showing the response to a prompt

Em seguida, gere a função que faz o upload da imagem do cão e a associa ao registro correspondente do cão, inserindo o prompt abaixo ou algo semelhante no Agente de IA:


- Crie uma função utilitária assíncrona de Cloud Code chamada uploadDogImage que aceite três parâmetros: dogName, dogImage e dogId.

- A função deve fazer o upload da dogImage, utilizando dogName como o nome da imagem, e garantir que a imagem seja devidamente associada ao registro correspondente do cão identificado por dogId.

- Implemente tratamento de erros para gerenciar quaisquer problemas durante o processo de upload e confirme a associação com o registro do cão.

- Adicione o arquivo utils.js e torne-o acessível para toda a aplicação.

Versão original em inglês abaixo:

- Create an asynchronous utility Cloud Code function named `uploadDogImage` that accepts three parameters: `dogName`, `dogImage`, and `dogId`. 

- The function should upload the `dogImage`, using `dogName` as the image name, and ensure that the image is properly associated with the corresponding dog record identified by `dogId`. 

- Implement error handling to manage any issues during the upload process and confirm the association with the dog record.

- Add the `utils.js` file and make it accessible to the entire application.

O prompt acima garante que a imagem do cão seja carregada corretamente e associada ao registro correto do cão, ao mesmo tempo em que lida com possíveis erros.

Você deve receber uma resposta informando que a função foi criada com sucesso.

As duas funções utilitárias foram implementadas no arquivo utils.js para manter a modularidade do código. Agora, você tem as duas funções utilitárias necessárias para implementar o recurso de check-in na sua aplicação.

Implementando o Recurso de Check-in

Para implementar o recurso de check-in na sua aplicação, você precisará do nome, idade, raça, imagem do cão e do nome de usuário do proprietário.

Em seguida, você precisará gerar um código de recuperação para o proprietário, registrar a visita, fazer o upload da imagem do cão (em segundo plano) e retornar o código ao proprietário.

Você pode adicionar a lógica acima à sua aplicação de backend inserindo o prompt abaixo ou algo semelhante no Agente de IA:

- Crie uma função assíncrona de Cloud Code chamada checkIn em um arquivo main.js que aceite cinco parâmetros do corpo da requisição: dogName (String), dogAge (Number), dogBreed (String), ownerUsername (String) e dogImage (File).

- A função deve primeiro validar e sanitizar cada entrada para garantir que estejam de acordo com os tipos e formatos esperados.

- Em seguida, deve procurar por um proprietário na tabela owner usando o ownerUsername e criar um novo registro de proprietário se nenhum for encontrado. 

- Depois, a função deve criar um novo registro na tabela dogs com os dados fornecidos dogName, dogBreed, dogAge e o respectivo ownerId.
Após isso, deve chamar a função utilitária generateRetrievalCode para criar um código de recuperação único.

- A função também deve usar a função utilitária uploadImage para fazer o upload de dogImage, executando esse processo em segundo plano sem aguardar o valor de retorno.

- Por fim, deve criar um registro na tabela visits que inclua detalhes relevantes, como ownerId, dogId e o código de recuperação gerado, e retornar uma mensagem de sucesso junto com o código de recuperação para o usuário.

- Garanta que o tratamento de erros seja implementado para operações de banco de dados e validação de entrada, retornando mensagens de erro apropriadas quando necessário.

Versão original em inglês abaixo:

- Create an asynchronous Cloud Code function named `checkIn` in a `main.js` file that accepts five parameters from a request body: `dogName` (String), `dogAge` (Number), `dogBreed` (String), `ownerUsername`(String), and `dogImage` (File). 

- The function should first validate and sanitize each input to ensure they conform to expected types and formats.

- It should then search for an owner in the `owner` table using `ownerUsername` and create a new owner record if none exists. Next, the function should create a new record in the `dogs` table with  the provided `dogName`, `dogBreed`, `dogAge`, and the corresponding `ownerId`. 

- After that, it should call the `generateRetrievalCode` utility function to create a unique retrieval code. 

- The function must also use the `uploadImage` utility to upload `dogImage`, running this process in the background without awaiting the return value. 

- Finally, it should create a record in the `visits` table that includes relevant details such as the `ownerId`, `dogId`, and the generated retrieval code, and return a success message along with the retrieval code to the user. 

- Ensure error handling is implemented for database operations and input validation, returning appropriate error messages where necessary.

Você deve receber uma resposta indicando que a função foi criada com sucesso.

Você pode revisar o código criado pelo Agente de IA e modificá-lo, se necessário, no seu Painel de Aplicações → Cloud Code, conforme mostrado na imagem abaixo.

Back4app cloud code page highlighting the cloud code button and the files in the cloud folder

Agora, você pode fazer o check-in de novos cães no seu canil. Em seguida, você implementará o recurso de registro de atividades.

Implementando o Recurso de Registro de Atividades

Com base nos requisitos da aplicação, sua aplicação deve acompanhar todas as atividades em que o cão esteve envolvido durante a visita.

Para implementar o recurso de registro de atividades, você precisará buscar o registro da visita e criar uma nova atividade com as informações necessárias.

Você pode adicionar a lógica acima à sua aplicação de backend inserindo o prompt abaixo ou algo semelhante no Agente de IA:

- Crie uma função assíncrona chamada recordActivity que aceite três parâmetros do corpo da requisição: visitId, type e description.

- Ela deve primeiro verificar se uma visita com o visitId especificado existe no banco de dados.

- Se a visita não for encontrada, retorne uma mensagem de erro apropriada.
Se a visita existir, a função deve criar um novo registro de atividade com visitId, type e description, definir a hora para a data atual, e retornar uma mensagem de sucesso após a criação bem-sucedida.

- Garanta que o tratamento de erros seja implementado para as operações de banco de dados e validação de entrada, retornando mensagens de erro apropriadas quando necessário.

Versão original em inglês abaixo:

- Create an asynchronous function called `recordActivity` that accepts three parameters from a request body: `visitId`, `type`, and `description`. 

- It should first check if a visit with the specified `visitId` exists in the database. 

- If the visit is not found, return an appropriate error message. 

- If the visit exists, the function should create a new activity record  with the visitId, type, and description, set the time to the current date, 
and return a success message, after a successful creation.

- Ensure error handling is implemented for database operations and input validation, returning appropriate error messages where necessary.

Você pode verificar o seu painel para garantir que essa função foi implementada corretamente e fazer quaisquer alterações, se necessário.

Implementando o Recurso de Checkout

Para implementar o recurso de checkout, você precisará buscar o registro da visita utilizando o retrieval_code, incluir os detalhes relacionados ao cão e ao proprietário, atualizar o campo check_out_time, e retornar uma resposta com as informações do cão, do proprietário, bem como os horários de check-in e checkout da visita.

Você pode adicionar a lógica acima à sua aplicação de backend inserindo o prompt abaixo ou algo semelhante no Agente de IA:

- Crie uma função assíncrona de Cloud Code chamada checkOut que recupere os detalhes do cão e da visita com base em um retrieval_code extraído do corpo da requisição.

- A função deve buscar o registro da visita correspondente na tabela Visit e incluir os detalhes relacionados ao cão da tabela Dog e ao proprietário da tabela Owner.

- A função deve selecionar atributos específicos do cão, como name, breed, age e imagem.

- Se nenhuma visita for encontrada, retorne uma mensagem indicando que o retrieval_code é inválido.

- Ao encontrar a visita com sucesso, a função deve atualizar o campo check_out_time para a data atual e salvar o registro da visita atualizado.
Finalmente, estruture uma resposta que inclua as informações do cão, juntamente com os detalhes do proprietário, bem como o check_in_time e check_out_time da visita.

- Implemente o tratamento de erros para capturar e registrar quaisquer problemas durante o processo, retornando uma mensagem de erro relevante em caso de falha.

Versão original em inglês abaixo:

- Create an asynchronous cloud code function called `checkOut` that retrieves dog and visit details based on a `retrieval_code` extracted from the request body. 

- The function should fetch the corresponding visit record in the `Visit` table  and include related dog details from the `Dog` table and the `Owner` table. 

- The function should select specific dog attributes such as `name`, `breed`, `age` and image. 

- If no visit is found, return a message indicating that the `retrieval_code` is invalid. 

- Upon successfully finding the visit, the function should update the `check_out_time` to the current date and save the updated visit record. 

- Finally, structure a response that includes the dog's information 
along with its owner details, as well as the visit's `check_in_time` and `check_out_time`. 

- Implement error handling to catch and log any issues during the process, 
returning a relevant error message in case of failure.

Você pode revisar o código criado pelo Agente de IA no seu Painel de Aplicações → Cloud Code → main.js.

Back4app Cloud Code Dashboard showing the contents of the main.js file

Com o recurso de checkout totalmente implementado, você concluiu os requisitos da aplicação para um simples sistema de gerenciamento de canil.

Conclusão

Neste artigo, você construiu uma aplicação escalável de gerenciamento de canis que suporta check-ins, acompanha as atividades dos cães durante as visitas e permite que os proprietários recuperem seus cães ao final da visita, utilizando IA.

Para melhorar a capacidade de escalabilidade da sua aplicação, você projetou um banco de dados normalizado para garantir que suas consultas não sejam lentas.

Você também delegou tarefas de longa duração, como o upload da imagem do cão, para uma função que roda em segundo plano e dividiu o código em arquivos para facilitar a manutenção.

Com o seu backend concluído, você pode conectá-lo a uma interface de usuário (UI) construída com uma biblioteca frontend como React, Svelte ou Vue, e implantá-lo usando Docker em plataformas como a plataforma Back4app.


Leave a reply

Your email address will not be published.