🚀 Prova Zilliz Cloud, la versione completamente gestita di Milvus, gratuitamente—sperimenta prestazioni 10 volte più veloci! Prova Ora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Perché scegliere FastAPI rispetto a Flask?

Perché scegliere FastAPI rispetto a Flask?

  • Engineering
December 03, 2021
Yunmei

Per aiutarvi a iniziare rapidamente a utilizzare Milvus, il database vettoriale open-source, abbiamo rilasciato un altro progetto open-source affiliato, Milvus Bootcamp su GitHub. Il Milvus Bootcamp non solo fornisce script e dati per i test di benchmark, ma include anche progetti che utilizzano Milvus per costruire alcuni MVP (minimum viable product), come un sistema di ricerca inversa di immagini, un sistema di analisi video, un chatbot QA o un sistema di raccomandazione. Nel Milvus Bootcamp potrete imparare ad applicare la ricerca per similarità vettoriale in un mondo pieno di dati non strutturati e fare un po' di esperienza pratica.

2.png 2.png

Forniamo servizi sia di front-end che di back-end per i progetti del Milvus Bootcamp. Tuttavia, di recente abbiamo deciso di cambiare il framework web adottato, passando da Flask a FastAPI.

Questo articolo intende spiegare le motivazioni che ci hanno spinto a cambiare il framework web adottato per Milvus Bootcamp, chiarendo perché abbiamo preferito FastAPI a Flask.

Framework web per Python

Un framework web si riferisce a un insieme di pacchetti o moduli. Si tratta di un insieme di architetture software per lo sviluppo web che consentono di scrivere applicazioni o servizi web, evitando di gestire dettagli di basso livello come protocolli, socket o gestione di processi/thread. L'uso di framework web può ridurre significativamente il carico di lavoro dello sviluppo di applicazioni web, in quanto è sufficiente "inserire" il codice nel framework, senza dover prestare ulteriore attenzione alla cache dei dati, all'accesso al database e alla verifica della sicurezza dei dati. Per maggiori informazioni su cosa sia un framework web per Python, vedere Framework web.

Esistono vari tipi di framework web per Python. Quelli più diffusi sono Django, Flask, Tornado e FastAPI.

Flask

3.png 3.png

Flask è un microframework leggero progettato per Python, con un nucleo semplice e facile da usare che consente di sviluppare le proprie applicazioni web. Inoltre, il nucleo di Flask è anche estensibile. Pertanto, Flask supporta l'estensione on-demand di diverse funzioni per soddisfare le vostre esigenze personalizzate durante lo sviluppo di applicazioni web. In altre parole, con una libreria di vari plug-in in Flask, è possibile sviluppare siti web potenti.

Flask ha le seguenti caratteristiche:

  1. Flask è un microframework che non si affida ad altri strumenti specifici o a componenti di librerie di terze parti per fornire funzionalità condivise. Flask non ha un livello di astrazione del database e non richiede la validazione dei moduli. Tuttavia, Flask è altamente estensibile e supporta l'aggiunta di funzionalità applicative in modo simile alle implementazioni all'interno di Flask stesso. Le estensioni rilevanti includono i mapper relazionali a oggetti, la validazione dei moduli, l'elaborazione degli upload, le tecnologie di autenticazione aperte e alcuni strumenti comuni progettati per i framework web.
  2. Flask è un framework per applicazioni web basato su WSGI (Web Server Gateway Interface). WSGI è una semplice interfaccia che collega un server web con un'applicazione web o un framework definito per il linguaggio Python.
  3. Flask include due librerie di funzioni fondamentali, Werkzeug e Jinja2. Werkzeug è un toolkit WSGI che implementa oggetti di richiesta e risposta e funzioni pratiche, che consentono di costruire framework web su di esso. Jinja2 è un popolare motore di template completo per Python. Ha un supporto completo per Unicode e un ambiente di esecuzione sandbox integrato, opzionale ma ampiamente adottato.

FastAPI

4.png 4.png

FastAPI è un moderno framework per applicazioni web in Python che offre lo stesso livello di prestazioni elevate di Go e NodeJS. Il nucleo di FastAPI è basato su Starlette e Pydantic. Starlette è un framework leggero ASGI(Asynchronous Server Gateway Interface) per la creazione di servizi Asyncio ad alte prestazioni. Pydantic è una libreria che definisce la convalida dei dati, la serializzazione e la documentazione basandosi sui suggerimenti di tipo Python.

FastAPI ha le seguenti caratteristiche:

  1. FastAPI è un framework per applicazioni web basato su ASGI, un'interfaccia di protocollo gateway asincrona che collega servizi di protocollo di rete e applicazioni Python. FastAPI è in grado di gestire diversi tipi di protocollo comuni, tra cui HTTP, HTTP2 e WebSocket.
  2. FastAPI si basa su Pydantic, che fornisce la funzione di verifica del tipo di dati dell'interfaccia. Non è necessario verificare ulteriormente i parametri dell'interfaccia o scrivere codice aggiuntivo per verificare se i parametri sono vuoti o se il tipo di dati è corretto. L'utilizzo di FastAPI consente di evitare efficacemente gli errori umani nel codice e di migliorare l'efficienza dello sviluppo.
  3. FastAPI supporta documenti in due formati: OpenAPI (ex Swagger) e Redoc. Pertanto, l'utente non deve perdere tempo a scrivere documenti di interfaccia aggiuntivi. Il documento OpenAPI fornito da FastAPI è mostrato nella schermata seguente.

5.png 5.png

Flask contro FastAPI

La tabella seguente mostra le differenze tra Flask e FastAPI sotto diversi aspetti.

FastAPIFlask
Interfaccia gatewayASGIWSGI
Struttura asincrona
PrestazioniPiù velocePiù lento
Documenti interattiviOpenAPI, RedocNessuno
Verifica dei dati
Costi di sviluppoPiù bassiPiù alti
Facilità d'usoPiù bassoSuperiore
FlessibilitàMeno flessibilePiù flessibile
ComunitàPiù piccolaPiù attiva

Perché FastAPI?

Prima di decidere quale framework Python per applicazioni web scegliere per i progetti del Milvus Bootcamp, abbiamo fatto una ricerca su diversi framework mainstream, tra cui Django, Flask, FastAPI, Tornado e altri. Poiché i progetti di Milvus Bootcamp servono da riferimento per voi, la nostra priorità è adottare un framework esterno di massima leggerezza e destrezza. In base a questa regola, abbiamo ristretto le nostre scelte a Flask e FastAPI.

Potete vedere il confronto tra i due framework web nella sezione precedente. Di seguito viene spiegata nel dettaglio la motivazione che ci ha spinto a scegliere FastAPI rispetto a Flask per i progetti di Milvus Bootcamp. Le ragioni sono molteplici:

1. Prestazioni

La maggior parte dei progetti di Milvus Bootcamp sono costruiti intorno a sistemi di ricerca inversa di immagini, chatbot QA, motori di ricerca di testi, che hanno tutti elevate esigenze di elaborazione dei dati in tempo reale. Di conseguenza, abbiamo bisogno di un framework con prestazioni eccezionali, che è esattamente il punto forte di FastAPI. Pertanto, dal punto di vista delle prestazioni del sistema, abbiamo deciso di scegliere FastAPI.

2. Efficienza

Quando si utilizza Flask, è necessario scrivere codice per la verifica del tipo di dati in ciascuna interfaccia, in modo che il sistema possa determinare se i dati in ingresso sono vuoti o meno. Tuttavia, supportando la verifica automatica del tipo di dati, FastAPI aiuta a evitare errori umani nella codifica durante lo sviluppo del sistema e può aumentare notevolmente l'efficienza dello sviluppo. Il Bootcamp è un tipo di risorsa di formazione. Ciò significa che il codice e i componenti che utilizziamo devono essere intuitivi e altamente efficienti. A questo proposito, abbiamo scelto FastAPI per migliorare l'efficienza del sistema e l'esperienza dell'utente.

3. Struttura asincrona

FastAPI è intrinsecamente un framework asincrono. Inizialmente, abbiamo rilasciato quattro demo, la ricerca inversa di immagini, l'analisi video, il chatbot QA e la ricerca di somiglianze molecolari. In queste demo, è possibile caricare i set di dati e viene immediatamente visualizzato il messaggio "richiesta ricevuta". Quando i dati vengono caricati nel sistema della demo, viene visualizzato un altro messaggio "caricamento dei dati riuscito". Si tratta di un processo asincrono che richiede un framework che supporti questa funzione. FastAPI è un framework asincrono. Per allineare tutte le risorse di Milvus, abbiamo deciso di adottare un unico set di strumenti di sviluppo e software sia per il Milvus Bootcamp che per le demo di Milvus. Di conseguenza, abbiamo cambiato il framework da Flask a FastAPI.

4. Documenti interattivi automatici

In modo tradizionale, quando si finisce di scrivere il codice per il lato server, è necessario scrivere un documento aggiuntivo per creare un'interfaccia e poi utilizzare strumenti come Postman per il test e il debug delle API. E se si volesse solo iniziare rapidamente la parte di sviluppo del lato server dei progetti in Milvus Bootcamp senza scrivere codice aggiuntivo per creare un'interfaccia? FastAPI è la soluzione. Fornendo un documento OpenAPI, FastAPI vi risparmia la fatica di testare o eseguire il debug delle API e di collaborare con i team di front-end per sviluppare un'interfaccia utente. Con FastAPI, è possibile provare rapidamente l'applicazione creata con un'interfaccia automatica ma intuitiva, senza ulteriori sforzi di codifica.

5. Facilità d'uso

FastAPI è più facile da usare e da sviluppare, consentendo così di prestare maggiore attenzione all'implementazione specifica del progetto stesso. Senza dedicare troppo tempo allo sviluppo di framework web, ci si può concentrare maggiormente sulla comprensione dei progetti di Milvus Bootcamp.

Riconoscimento

Flask e FlastAPI hanno i loro pro e contro. FlastAPI è un framework emergente per applicazioni web, mentre FlastAPI, nella sua essenza, si basa su toolkit e librerie mature, Starlette e Pydantic. FastAPI è un framework asincrono ad alte prestazioni. La sua destrezza, l'estensibilità e il supporto per la verifica automatica del tipo di dati, insieme a molte altre potenti caratteristiche, ci hanno spinto ad adottare FastAPI come framework per i progetti Milvus Bootcamp.

Si noti che è necessario scegliere il framework appropriato in base al proprio scenario applicativo se si vuole costruire un sistema di ricerca per similarità vettoriale in produzione.

L'autore

Yunmei Li, Data Engineer di Zilliz, si è laureata in informatica presso la Huazhong University of Science and Technology. Da quando è entrata a far parte di Zilliz, ha lavorato all'esplorazione di soluzioni per il progetto open source Milvus e ha aiutato gli utenti ad applicare Milvus in scenari reali. La sua attenzione principale è rivolta all'NLP e ai sistemi di raccomandazione e vorrebbe approfondire ulteriormente queste due aree. Le piace passare il tempo da sola e leggere.

Cercate altre risorse?

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Continua a Leggere