🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI

HomeBlogsなぜFlaskではなくFastAPIを選ぶのか?

なぜFlaskではなくFastAPIを選ぶのか?

  • Engineering
December 03, 2021
Yunmei

オープンソースのベクターデータベースであるMilvusをすぐに使い始められるように、もう一つの関連オープンソースプロジェクトであるMilvus BootcampをGitHubで公開しました。Milvus Bootcampでは、ベンチマークテスト用のスクリプトやデータを提供するだけでなく、Milvusを使って逆画像検索システム、動画解析システム、QAチャットボット、レコメンダーシステムなどのMVP(minimum viable product)を構築するプロジェクトも含まれています。Milvus Bootcampでは、非構造化データだらけの世界でベクトル類似検索の適用方法を学び、実際に体験することができます。

2.png 2.png

Milvus Bootcampのプロジェクトには、フロントエンドとバックエンドの両方のサービスを提供しています。しかし、最近、採用するウェブフレームワークをFlaskからFastAPIに変更することを決定しました。

本記事では、Milvus Bootcampで採用するWebフレームワークをFlaskからFastAPIに変更した理由を明らかにすることで、Milvus Bootcampで採用するWebフレームワークを変更した動機について説明します。

PythonのWebフレームワーク

Webフレームワークとは、パッケージやモジュールの集合体を指します。Webアプリケーションやサービスを書くための、Web開発のためのソフトウェアアーキテクチャの集合であり、プロトコル、ソケット、プロセス/スレッド管理などの低レベルの詳細を処理する手間を省くことができます。ウェブフレームワークを使えば、コードをフレームワークに "プラグイン "するだけで、データキャッシュ、データベースアクセス、データセキュリティの検証などの処理に余計な注意を払う必要がなくなるため、ウェブアプリケーション開発の作業負荷を大幅に軽減することができます。PythonのWebフレームワークとは何かについては、Webフレームワークを参照してください。

PythonのWebフレームワークには様々な種類があります。Django、Flask、Tornado、FastAPIなどが主流です。

Flask

3.png 3.png

FlaskはPython用に設計された軽量なマイクロフレームワークで、シンプルで使いやすいコアを持ち、独自のWebアプリケーションを開発することができます。また、Flaskのコアは拡張可能です。そのため、Flask は、Web アプリケーション開発中の個人的なニーズを満たすために、様々な機能のオンデマンド拡張をサポートしています。つまり、Flaskの様々なプラグインライブラリを使えば、強力なWebサイトを開発することができるのです。

Flaskには以下のような特徴があります:

  1. Flaskはマイクロフレームワークであり、共有機能を提供するために他の特定のツールやサードパーティライブラリのコンポーネントに依存しない。Flaskはデータベースの抽象化レイヤーを持たず、フォームバリデーションも不要です。しかし、Flaskは非常に拡張性が高く、Flask自体の実装と同様の方法でアプリケーションの機能追加をサポートしています。関連する拡張機能には、オブジェクトリレーショナルマッパー、フォームバリデーション、アップロード処理、オープン認証技術、Webフレームワーク用に設計されたいくつかの一般的なツールなどがあります。
  2. FlaskはWSGI(Web Server Gateway Interface)をベースにしたWebアプリケーションフレームワークです。WSGIは、Python言語で定義されたWebアプリケーションやフレームワークとWebサーバを接続するシンプルなインターフェースです。
  3. FlaskにはWerkzeugと Jinja2という2つのコア関数ライブラリがあります。Werkzeugはリクエスト、レスポンスオブジェクトと実用的な関数を実装したWSGIツールキットで、その上にWebフレームワークを構築することができます。Jinja2は、Python用の人気のあるフル機能のテンプレートエンジンです。Unicodeを完全にサポートし、オプションですが広く採用されている統合サンドボックス実行環境を備えています。

FastAPI

4.png 4.png

FastAPIは、Go や NodeJS と同レベルの高いパフォーマンスを持つ、最新の Python Web アプリケーションフレームワークです。FastAPIのコアはStarletteと Pydanticに基づいています。Starletteは、高性能なAsyncioサービスを構築するための軽量なASGI(Asynchronous Server Gateway Interface)フレームワークツールキットです。Pydanticは、Pythonの型ヒントに基づいたデータ検証、シリアライズ、ドキュメント化を定義するライブラリです。

FastAPIには次のような特徴がある:

  1. FastAPIは、ネットワークプロトコルサービスとPythonアプリケーションを接続する非同期ゲートウェイプロトコルインタフェースであるASGIをベースにしたWebアプリケーションフレームワークです。FastAPI は、HTTP、HTTP2、WebSocket など、さまざまな一般的なプロトコルを処理できます。
  2. FastAPI は Pydantic をベースにしており、インターフェースのデータ型をチェックする機能を提供します。インターフェイスのパラメータを追加で検証したり、パラメータが空かどうかやデータ型が正しいかどうかを検証するために余分なコードを書く必要はありません。FastAPI を使用することで、コードのヒューマン エラーを効果的に回避し、開発効率を向上できます。
  3. FastAPIは、OpenAPI(旧Swagger)とRedocの2つのフォーマットでドキュメントをサポートします。そのため、ユーザーとして追加のインターフェース・ドキュメントを書くために余分な時間を費やす必要はありません。FastAPIが提供するOpenAPIドキュメントは以下のスクリーンショットの通りです。

5.png 5.png

Flask 対 FastAPI

以下の表は、いくつかの側面における Flask と FastAPI の違いを示しています。

FastAPIフラスコ
インターフェース・ゲートウェイASGIWSGI
非同期フレームワーク
パフォーマンスより速い遅い
インタラクティブdocOpenAPI、Redocなし
データ検証
開発コスト低い高い
使いやすさ低い高い
柔軟性柔軟性が低い柔軟性が高い
コミュニティ小規模より活発

なぜFastAPIなのか?

Milvus BootcampのプロジェクトにどのPython Webアプリケーションフレームワークを選ぶか決める前に、Django、Flask、FastAPI、Tornadoなど、いくつかの主流のフレームワークを調査しました。Milvus Bootcampのプロジェクトは皆さんの参考となるため、軽量で器用な外部フレームワークを採用することを優先しました。このルールに従って、私たちはFlaskとFastAPIに選択肢を絞りました。

この2つのウェブ・フレームワークの比較は、前のセクションでご覧いただけます。以下は、Milvus BootcampのプロジェクトにFlaskではなくFastAPIを選んだ動機の詳細です。いくつかの理由があります:

1.パフォーマンス

Milvus Bootcampのほとんどのプロジェクトは、逆画像検索システム、QAチャットボット、テキスト検索エンジンを中心に構築されており、いずれもリアルタイムデータ処理への要求が高い。したがって、優れたパフォーマンスを持つフレームワークが必要であり、これこそがFastAPIのハイライトです。そこで、システム性能の観点から、FastAPIを採用することにしました。

2.効率性

Flaskを利用する場合、入力データが空かどうかをシステムが判断するために、各インターフェースにデータ型検証のコードを記述する必要があります。しかし、FastAPIが自動データ型検証をサポートすることで、システム開発時のコーディングにおける人的ミスを回避し、開発効率を大幅に向上させることができます。ブートキャンプは、一種のトレーニングリソースとして位置づけられています。つまり、使用するコードやコンポーネントは、直感的で高効率でなければなりません。この観点から、システム効率を向上させ、ユーザーエクスペリエンスを高めるために FastAPI を選択しました。

3.非同期フレームワーク

FastAPIは本質的に非同期フレームワークです。元々、逆画像検索、動画解析、QAチャットボット、分子類似検索の4つのデモをリリースしています。これらのデモでは、データセットをアップロードすると、すぐに「リクエストを受け取りました」というプロンプトが表示される。そして、データがデモ・システムにアップロードされると、「データのアップロードに成功しました」という別のプロンプトが表示される。これは非同期プロセスで、この機能をサポートするフレームワークが必要です。FastAPI自体が非同期フレームワークです。全てのMilvusリソースを整合させるために、Milvus BootcampとMilvusデモの両方に単一の開発ツールとソフトウェアを採用することにしました。その結果、フレームワークをFlaskからFastAPIに変更しました。

4.自動インタラクティブ・ドキュメント

従来の方法では、サーバーサイドのコードを書き終えたら、インターフェイスを作成するために余分なドキュメントを書き、APIのテストやデバッグのためにPostmanのようなツールを使う必要がありました。では、Milvus Bootcampのプロジェクトで、インターフェイスを作成するための追加のコードを書かずに、ウェブサーバサイドの開発部分だけを素早く始めたい場合はどうすればよいでしょうか?FastAPIが解決します。OpenAPIドキュメントを提供することで、FastAPIはAPIのテストやデバッグ、ユーザーインターフェイスを開発するためのフロントエンドチームとの共同作業の手間を省くことができます。FastAPI を使えば、コーディングに余分な労力をかけることなく、自動的でありながら直感的なインターフェイスで、構築されたアプリケーションを素早く試すことができます。

5.使いやすさ

FastAPI は使いやすく、開発しやすいので、プロジェクト自体の具体的な実装にもっと注意を払うことができます。Webフレームワークの開発に多くの時間を費やすことなく、Milvus Bootcampのプロジェクトの理解に集中することができます。

まとめ

FlaskとFlastAPIにはそれぞれ長所と短所があります。新興のWebアプリケーションフレームワークであるFlastAPIは、成熟したツールキットとライブラリであるStarletteとPydanticをコアとして構築されています。FastAPIは高性能な非同期フレームワークです。その器用さ、拡張性、自動データ型検証のサポート、その他多くの強力な機能により、MilvusはFastAPIをMilvus Bootcampプロジェクトのフレームワークとして採用しました。

なお、ベクトル類似検索システムを実運用で構築する場合は、アプリケーションのシナリオに応じて適切なフレームワークを選択する必要があります。

著者について

ZillizデータエンジニアのYunmei Liは、華中科技大学でコンピュータサイエンスの学位を取得。Zillizに入社して以来、オープンソースプロジェクトMilvusのソリューションを模索し、ユーザーがMilvusを実世界のシナリオに適用できるよう支援している。主にNLPとレコメンデーションシステムを研究しており、この2つの分野をさらに深めたいと考えている。一人で過ごす時間と読書が好き。

より多くのリソースをお探しですか?

Try Managed Milvus for Free

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

Get Started

Like the article? Spread the word

続けて読む