Imparare a costruire un backend scalabile con l’AI
Un backend “scalabile” è un backend in grado di gestire un aumento del carico senza un notevole calo delle prestazioni.
La costruzione di un backend scalabile comporta diversi processi e considerazioni, come la progettazione del database e la strategia di distribuzione.
In questo articolo scoprirete come costruire un backend scalabile con l’aiuto dell’intelligenza artificiale (AI).
Contents
Cosa rende scalabile un backend?
Diversi fattori implementati durante il ciclo di vita dello sviluppo del software lavorano insieme per rendere scalabile un backend.
Un fattore che contribuisce alla scalabilità di un backend è la velocità delle interrogazioni al database.
Le query lente aumentano il tempo di risposta del server e influiscono sulla sua capacità di elaborare più richieste contemporaneamente.
Le query sono più veloci se si implementa una progettazione adeguata dello schema e si scrivono query efficienti.
L’elaborazione asincrona è un altro fattore che può rendere scalabile un backend. Le attività ad alta intensità di risorse possono bloccare i thread di esecuzione e limitare la capacità del server di elaborare richieste simultanee.
È possibile risolvere questo problema delegando le attività ad alta intensità di risorse, come i calcoli di grandi dimensioni e il caricamento di file, a lavori in background.
Un altro fattore è la strategia di distribuzione. È necessario distribuire il backend utilizzando una strategia di distribuzione scalabile tramite servizi come Back4app.
Ad esempio, i nuovi container si attivano automaticamente quando il traffico aumenta, distribuendo il carico su più istanze senza interventi manuali.
Allo stesso modo, il sistema si ridimensiona quando la domanda diminuisce, liberando le risorse inutilizzate.
In questa esercitazione, costruirete un’applicazione di gestione del canile che implementa tutti i fattori sopra citati per renderla scalabile.
Progettare un backend scalabile con l’intelligenza artificiale
Come accennato in precedenza, dovrete costruire un’applicazione per la gestione di un canile. Ecco i requisiti dell’applicazione:
- La vostra applicazione consentirà ai proprietari di registrare i loro cani nel vostro canile.
- Quando un proprietario registra il proprio cane nel vostro canile, la vostra applicazione memorizzerà i dettagli del cane, come il nome, la razza, l’età, il nome del proprietario e l’immagine. Quindi, genererà un codice univoco per il proprietario.
- Il codice univoco che il proprietario riceve è l’unico modo per recuperare il proprio cane dal vostro canile al termine della visita.
- Durante la visita al canile, dovrete tenere traccia di tutte le attività in cui il cane è stato coinvolto. Questo tutorial includerà solo l’alimentazione, le medicazioni e la toelettatura.
- Al termine della visita, il proprietario fornirà il codice univoco ricevuto al momento del check-in e recupererà i propri cani.
Il primo passo per realizzare i requisiti di cui sopra è la progettazione di un database normalizzato con una ridondanza di dati minima o nulla.
Progetterete e creerete questo schema di database con l’aiuto di Back4app AI Agent, che agirà come generatore di backend AI.
L’agente AI di Back4app
L’agente AI di Back4app è un LLM che si interfaccia con i prodotti Back4app, la piattaforma Backend e la piattaforma Web Deployment.
Permette di interagire con questi prodotti tramite messaggi e aiuta a creare un backend scalabile con l’intelligenza artificiale.
Per accedere all’agente AI, è necessario un account Back4app. Se non ne avete uno, potete registrarvi gratuitamente.
Accedere al proprio account Back4app e fare clic sul collegamento “Agente AI” nella barra di navigazione del cruscotto.
Facendo clic sul link si accede alla pagina dell’agente AI, come mostrato nell’immagine seguente.
In questa pagina si possono inserire varie richieste, come quella di creare una nuova app BaaS sul proprio account Back4app.
Costruire un backend con l’intelligenza artificiale
Per creare una nuova applicazione backend su Back4app, è possibile inserire la richiesta seguente o qualcosa di simile nell’agente AI.
- Create a new backend application called "Kennel Management Backend"
Si dovrebbe ottenere una risposta che indica che l’applicazione è stata creata con successo.
È possibile visualizzare l’applicazione creata nella dashboard di Back4app, come mostrato nell’immagine seguente.
Come mostrato nell’immagine precedente, il database della nuova applicazione backend è vuoto, a eccezione delle classi predefinite _User
e _Role
.
Successivamente, si progetterà e si aggiungerà lo schema del database all’applicazione di backend.
Progettazione del database
Per progettare uno schema di database normalizzato per i requisiti dell’applicazione di cui sopra, inserire il prompt seguente o qualcosa di simile nell’agente AI.
- 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.
Il prompt precedente dovrebbe restituire uno schema di database simile a quello visualizzato di seguito.
Lo schema del database sopra riportato ha quattro tabelle: proprietari, cani, visite e attività. Un proprietario può avere più cani (uno-a-molti), ma ogni cane appartiene a un solo proprietario, collegato attraverso una chiave esterna nella tabella cani
.
Allo stesso modo, un cane può avere più visite (uno-a-molti) nel corso del tempo, ognuna delle quali è specifica per quel cane e viene tracciata nella tabella delle visite
tramite una chiave esterna.
Inoltre, ogni visita può coinvolgere diverse attività (uno-a-molti), come l’alimentazione, la toelettatura o la medicazione, ciascuna legata a una visita specifica attraverso la chiave esterna visit_id
nella tabella delle attività
.
Ora che il database è stato progettato, si chiederà all’intelligenza artificiale di creare il database nel backend, utilizzando un prompt simile a quello riportato di seguito.
- Create the designed database in the backend app "Kennel Management Backend".
Si dovrebbe ottenere una risposta che indica che il database è stato creato con successo. Si può avere la conferma controllando la dashboard dell’applicazione per le tabelle appena create, come mostrato nell’immagine seguente.
Dopo aver creato il backend e aggiunto le tabelle del database dell’applicazione, è necessario implementare la logica dell’applicazione.
Implementazione della logica di backend con l’intelligenza artificiale
In base ai requisiti dell’applicazione, quest’ultima deve consentire ai proprietari di registrare i loro cani nel canile, memorizzare dettagli come il nome del cane, la razza, l’età, il nome del proprietario e l’immagine e generare un codice di recupero unico per il proprietario.
Per implementare questi requisiti, è necessaria una funzione di utilità che generi un codice di recupero univoco e una che carichi l’immagine del cane in background, per garantire che l’attività di caricamento non rallenti il tempo di risposta dell’applicazione.
Implementazione delle funzioni di utilità
È possibile creare una funzione di utilità che generi un codice univoco inviando all’Agente AI il seguente prompt o qualcosa di simile:
- 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.
Si dovrebbe ottenere una risposta che indica che la funzione codice cloud è stata creata, simile a quella dell’immagine seguente.
Successivamente, generare la funzione che carica l’immagine del cane e la associa al record del cane corrispondente, inviando all’Agente AI il prompt seguente o qualcosa di simile:
- 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.
La richiesta di cui sopra assicura che l’immagine del cane venga caricata correttamente e associata alla corretta scheda del cane, gestendo al contempo eventuali errori.
Si dovrebbe ottenere una risposta che indica che la funzione è stata creata con successo.
Le due funzioni di utilità sono state implementate in un file utils.js
per mantenere la modularità del codice. Ora si dispone delle due funzioni di utilità necessarie per implementare la funzione di check-in nella propria applicazione.
Implementazione della funzione di check-in
Per implementare la funzione di check-in nella vostra applicazione, avete bisogno del nome del cane, dell’età, della razza, dell’immagine e del nome utente del proprietario.
Quindi, è necessario generare un codice di recupero per il proprietario, registrare la visita, caricare l’immagine del cane (in background) e restituire il codice al proprietario.
È possibile aggiungere la logica di cui sopra all’applicazione backend, inviando il prompt sottostante o qualcosa di simile all’agente AI:
- 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.
Si dovrebbe ricevere una risposta che indica che la funzione è stata creata con successo.
È possibile rivedere il codice creato dall’agente AI e modificarlo, se necessario, nella App Dashboard → Cloud Code, come mostrato nell’immagine seguente.
Ora è possibile registrare nuovi cani nel canile. Successivamente, verrà implementata la funzione di registrazione delle attività.
Implementazione della funzione Registra attività
In base ai requisiti della domanda, la domanda deve tenere traccia di tutte le attività a cui il cane ha partecipato durante la visita.
Per implementare la funzione di registrazione delle attività, è necessario recuperare il record della visita e creare una nuova attività con le informazioni richieste.
È possibile aggiungere la logica di cui sopra all’applicazione backend, inviando il prompt sottostante o qualcosa di simile all’agente AI:
- 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.
È possibile controllare la dashboard per verificare che questa funzione sia stata implementata correttamente e apportare eventuali modifiche, se necessario.
Implementazione della funzione Checkout
Per implementare la funzione di checkout, è necessario recuperare il record della visita utilizzando il codice retrieval_code
, includere i dati relativi al cane e al proprietario, aggiornare il check_out_time
e restituire una risposta con le informazioni sul cane e sul proprietario, oltre agli orari di check-in e checkout della visita.
È possibile aggiungere la logica di cui sopra all’applicazione backend, inviando il prompt sottostante o qualcosa di simile all’agente AI:
- 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.
È possibile esaminare il codice creato dall’agente AI nella propria App Dashboard → Cloud Code → main.js
.
Con la funzione di cassa completamente implementata, avete completato i requisiti dell’applicazione per una semplice applicazione di gestione del canile.
Conclusione
In questo articolo, si costruisce un’applicazione scalabile per la gestione del canile che supporta i check-in, tiene traccia delle attività dei cani durante le visite e consente ai proprietari di recuperare i loro cani al termine della visita utilizzando l’intelligenza artificiale.
Per migliorare la capacità di scalare della vostra applicazione, avete progettato un database normalizzato per garantire che le query non siano lente.
Avete anche delegato le attività di lunga durata, come il caricamento dell’immagine del cane, a una funzione che viene eseguita in background e avete suddiviso il codice in file per facilitarne la manutenzione.
Una volta completato il backend, è possibile collegarlo a un’interfaccia utente costruita con una libreria di frontend come React, Svelte o Vue e distribuirla utilizzando Docker in piattaforme come Back4app Web Deployment Platform.