オープンソースFaaSが色々あって、どれを選んだらよいのかわからなかったので比較してみます。
観点
- API Gateway
- そもそも連携可能か?
- API Gatewayの実装に何を使うか?
- Nginx?
- Envoy?
- 動作環境
- Kubernetes?
- 対応言語
- 対応Trigger
- Kubernetes Event?
- Slack?
- Web UI
- 運用
- データベース、キャッシュ、ジョブキューにマネージドサービスを利用できるか?
参考: http://redmonk.com/jgovernor/2017/10/03/another-fn-container-native-serverless-framework/
Apache OpenWhisk
参考: https://thenewstack.io/behind-scenes-apache-openwhisk-serverless-platform/
- API Gateway
- 実装はNginxを利用
- Adobeが開発中
- 動作環境
- Kubernetes (IBM Bluemixがデファクトのよう)
- 対応Trigger
- cli呼び出し
- フィード
- https://console-regional.ng.bluemix.net/docs/openwhisk/openwhisk_catalog.html#openwhisk_catalog_cloudant
- ここでタイプ「フィード」に対応しているもの
- github webhook
- Cloudantデータベースの変更
- 運用
- 以下を自前で運用する必要がある
- Kafka
- CouchDB
- Consul
- 以下を自前で運用する必要がある
Kubeless
- API Gateway
- KubernetesのIngressを利用
- Ingress Controller(Nginx, Istio等)は別に選べるので、特定のミドルウェアにロックインされない
- KubernetesのIngressを利用
- 動作環境
- Kubernetes
-
対応Trigger
- HTTP Endpoint呼び出し
- Kafkaトピック
- スケジュール
- 運用
- KubernetesクラスタさえあればOK
- 標準的なK8Sオブジェクト以外のステートはK8SのCRDに保存するので、他のデータストアなど運用する必要がない
- https://github.com/kubeless/kubeless/tree/master/docs
- KubernetesクラスタさえあればOK
Fission
Platform9というKubenetesのマネージドサービスをやってる会社のOSS
- API Gateway
- Kubernetes Ingressで対応予定(betaまでに)
- 動作環境
- Kubernetes
- 対応言語
- Binary
- Go
- .NET
- NodeJS
- Perl
- PHP7
- Python 3
- Ruby
-
対応Trigger
- HTTPエンドポイント
OpenFaaS
Kubernetes向けのデプロイメントは https://github.com/openfaas/faas-netes
- API Gateway
- Kubernetesの場合Ingressで実装しているので、Ingress Controller(Nginx, Istioなど)は選べる?
- デフォルトはnginx
- Kubernetesの場合Ingressで実装しているので、Ingress Controller(Nginx, Istioなど)は選べる?
- 動作環境
- Kubernetes
- Docker Swarm
- 対応言語
- DockerイメージにできるものならなんでもOK(大体のFaaSはそうかもだけど)
- サンプル集
- https://github.com/openfaas/faas/tree/master/sample-functions/BaseFunctions
- Node.js
- Python
- Golang
- 対応Trigger
- HTTPエンドポイント(同期・非同期)
- https://github.com/openfaas/faas/tree/master/docs#gateway
- 現状ではGatewayのHTTPエンドポイントしかトリガーがないみたい
- workerがGatewayを呼び出すことで、色々なTriggerを実現していく流れらしい(下記)
- Kafka Topic(3rd party)
- NATS Streaming
- AWS SNS/SQS予定あり
- HTTPエンドポイント(同期・非同期)