Prefect見てみる コンポーネント編
not-rogue.hatenablog.comの続きで、Prefectに関連する概念のメモです。
Hybrid Model
Prefectでは「Hybrid Model」を採用しています。これは、
- 処理コードとデータはユーザー
- オーケストレーション(状態やメタデータの管理)はPrefect
が担当するという方針です。センシティブなデータやコードを預けなくてすみ、また、好きなインフラを使えるメリットがあります。
AirflowのSaasSであるCloud Composer やAstronomerは、
- 処理を行う場所(Worker)
- 処理する場所に配置するやつ(Executor)
- DAGファイルの置き場
- DAG/タスクの状態を制御するやつ(Scheduler)
- メタデータのデータベース
- 管理インターフェイス(Webserver、API)
を全てSaaSとして提供しますが、Prefect Cloudでは、
はPrefect Cloudが提供しますが、
- 処理を行う場所(Environment/Executor)
- 処理する場所に配置するやつ(Agent)
- Flowファイルの置き場(Storage)
に関しては、処理するための仕組みはPrefectが提供しますが、実際のインフラはユーザーが(AWSやGCPなどに)用意します。
例えば、本番用にGKEのクラスタを使うなら、
- Environment/Executor: DaskKubernetesEnvironment/RemoteDaskExecutor
- Storage: Flowコードが入ったコンテナイメージ
- Agent: GKE上でKubernates Agent
開発用にローカルで動かすなら、
- Environment: 指定しない(デフォルトのRemoteEnvironmentになる)
- Storage: ローカル
- Agent: Local
などの設定を行います。環境の例は、Configure Your Environment | Prefect Docsがわかりやすいです。
Storage
PrefectはHybrid Modelを採用しているので、Flowのコードは
- ローカルファイル
- GCS
- S3
- Azure Blob
- Dockerイメージ
のいずれかに配置します。その設定がStorageです。
Agent
flowの状態を監視して、処理するための準備をするのがAgentです。
- Storageからコードの読み込み
- flowコードで指定されている、環境変数の設定
- Environmentの起動
などの処理を行っており、
- ローカル
- Docker
- Kubernates
- AWS Fargate
で動くAgentが用意されています。
Environment
docs.prefect.ioflowを処理する環境を定義するのが、Environmentです。
- LocalEnvironment
- RemoteEnvironment
- RemoteDaskEnvironment
- DaskKubernetesEnvironment(k8s上にDaskクラスターを作成し、そのジョブとして処理)
- KubernetesJobEnvironment
- FargateTaskEnvironment
のEnvironmentが用意されています。
なお、指定しない場合はRemoteEnvironment(+LocalExcutor)になります。
Executor
Environmentに似た概念にExecutorというのもあります。こちらは、Environmentの上で、「function」(タスクに限らない?)の実行方法を指定するやつで、
- Local(ローカルのプロセス)
- Dask
- Sync/LocalDask(これもDaskで処理)
が用意されています。デフォルトはLocalExecutorですが、DaskExecutorが本番だとオススメらしいです。