サービスとしての機能の紹介-OpenFaaS

翻訳をコメントします。 OpenFaaSは、8月に正式に導入されたサーバーレスフレームワークですが、約1年前に登場し、 Kubernetesタグを使用してGitHubプロジェクトの最上位に急速に定着しました。 以下に公開されているテキストは、Docker分野での熱意でコミュニティでよく知られている作者Alex Ellisによるプロジェクトの公式発表の技術部分の翻訳です( Docker Captainのステータスを持っています)。


機能としてのサービスまたはOpenFaaS-コンテナ上にサーバーレス機能を作成するためのフレームワーク。 Docker SwarmでAlexaスキルまたはAWS Lambda関数を実行できるかどうかを理解したい昨年の10月に、概念実証としてプロジェクトを開始しました。 最初の成功により、その年の12月にGitHubでGolang コードの最初のバージョンを公開することになりました。

この投稿では、サーバーレスコンピューティングの簡単な紹介と、過去500件のコミットでFaaSに登場した3つの主な機能について説明します。



最初のコミット以来、FaaSは人気を博しました:GitHubで4,000以上の星を獲得しました(現在7,000以上- 約Transl 。 私にとって重要なイベントは、4月にオースティンのDockerconで開催されたMoby Cool Hacksのメインセッションに参加することでした。 これらのパフォーマンスが直面する課題は、Dockerが作成された目的の境界を広げるようなものでした



サーバーレスとは​​何ですか?


アーキテクチャは進化しています


サーバーレスは悪い名前です。 イベント駆動型システムの新しいアーキテクチャパターンについて話している。 サーバーレス機能は、多くの場合、他のサービス間のブリッジとして、またはイベント駆動型アーキテクチャで使用されます。 以前はサービスバスと呼んでいました。


サーバーレスは進化

サーバーレス機能


サーバーレス関数とは、小さく、独立した、再利用可能なコードです。


IaaSプロバイダーのサーバーレス製品とオープンソースソフトウェアプロジェクトを区別することも重要です。

一方では、Lambda、Google Cloud Functions、Azure機能などのIaaSプロバイダーからのサーバーレス実装があり、他方では、Docker SwarmやKubernetesなどのオーケストレーションプラットフォームでのハードワークを可能にするOpenFaaSなどのフレームワークがあります。


クラウドネイティブ:お気に入りのクラスターを使用します。

IaaSベンダーのサーバーレス製品は完全に管理されているため、高レベルの使いやすさと支払いを数秒/分で提供します。 逆に言えば、リリースとサポートのサイクルに非常に執着しています。 多様性と選択肢を提供するオープンソースFaaSが存在します。

OpenFaaSの特徴は何ですか?


OpenFaaSは、クラウドネイティブ世界の業界標準であるテクノロジーに基づいて構築されています。


OpenFaaSスタック

OpenFaaSプロジェクトの特徴は、ウォッチドッグコンポーネントとDockerコンテナーを使用して、各プロセスがサーバーレス機能になることです。 これは3つのことを意味します。


サーバーレスに切り替えても、コードを別のプログラミング言語に書き換える必要があることを意味するものではありません。 あなたのビジネスとチームが必要とするものを利用してください。

例:


catまたはsha512sumは、stdin / stdoutを介して相互作用するため、変更を必要としない関数である場合があります。 Windowsの機能はDocker CEでもサポートされています。

これは、FaaSと、サポートされている各言語の特別なランタイムに依存する他のオープンソースサーバーレスフレームワークの主な違いです。

DockerCon (2017年4月から8月- およそTransl。以降に登場した3つの最も重要な機能を見てみましょう:関数、Kubernetesサポート、非同期処理のCLIとテンプレート。

1.新しいCLI


簡単な展開


コンソールインターフェイス(CLI)がFaaSプロジェクトに追加され、展開機能が簡素化され、スクリプトサポートが追加されました。 これまでのところ、これらの目的のために、Gatewayまたはcurl APIのユーザーインターフェイス(UI)を使用できました。 表示されたCLIを使用すると、YAMLファイルで関数を定義し、それらを同じGateway APIにデプロイできます。

Finnian Andersonは、 Practical Dev / dev.toで FaaS CLIの素晴らしい紹介を書きました。

ユーティリティスクリプトと醸造


CLIをインストールするための特別なスクリプトがあり、John McCabeはbrewのレシピを支援しました。

 $ brew install faas-cli 

または:

 $ curl -sL https://cli.get-faas.com/ | sudo sh 

パターン


CLIでテンプレートを使用すると、お好みのプログラミング言語でハンドラーを作成するだけで十分です。その後、CLIはテンプレートを使用して、FaaSのすべての魔法を備えたDockerコンテナーにこのハンドラーを構築します。

PythonとNode.js用の2つのテンプレートが用意されていますが、独自のテンプレートを簡単に作成できます。

CLIは3つのアクションをサポートします。


1つのノードのクラスターがある場合、イメージを展開する前にプッシュする必要はありません。

YAML形式のサンプルCLI設定ファイル( sample.yml )は次のとおりです。

 provider: name: faas gateway: http://localhost:8080 functions: url_ping: lang: python handler: ./sample/url_ping image: alexellis2/faas-urlping 

Pythonの関数の最小(空)ハンドラーは次のとおりです。

 def handle(req): print(req) 

HTTP ./sample/url_ping/handler.py URL( ./sample/url_ping/handler.py )のステータスコードを確認する例:

 import requests def print_url(url): try: r = requests.get(url,timeout = 1) print(url +" => " + str(r.status_code)) except: print("Timed out trying to reach URL.") def handle(req): print_url(req) 

追加のPIPモジュールが必要な場合は、 requirements.txtファイルをハンドラー( handler.py )に追加しrequirements.txt

 $ faas-cli -action build -f ./sample.yml 

このようなコマンドの後、 alexellis2/faas-urlpingというDockerイメージalexellis2/faas-urlping 。これは、 -action pushを使用してDocker Hubにロードし、 -action deployます。

FaaSのCLIは、 このリポジトリで利用できます

2. Kubernetesのサポート


Dockerのキャプテンとして、主にDocker Swarmとそれに関する記事を研究していますが、Kubernetesには常に興味があります。 LinuxとMacでKubernetesをセットアップする方法を学び始めて、これについてすでに3つのガイドを書いており、コミュニティで好評を博しました。

Kubernetesのエンジニアリングサポート


Docker Swarmの概念をKubernetesに移植する方法を十分に理解したので、プロトタイプを準備し、数日ですべてのコードを移植しました。 FaaSメインコードベースに追加の依存関係を追加する代わりに、Kubernetesと対話する新しいマイクロサービスデーモンを作成することを選択しました。

FaaSプロキシは、Deploy / List / Delete / Invoke and Scaleなどの操作のために、標準のRESTfulインターフェイスを介して新しいデーモンを呼び出します。

このアプローチは、ユーザーインターフェイス、CLI、および自動スケーリングが、変更を加えることなくそのまま使用できることを意味します。 結果のマイクロサービスは、 FaaS-netesと呼ばれる新しいGitHubリポジトリでサポートされ、Docker Hubで利用できます。 クラスターでのセットアップには約60秒かかります。

Kubernetesサポートデモ


このビデオでは、 FaaSが空のクラスターに展開された後、ユーザーインターフェイス、Prometheus、および自動スケーリングの操作方法を示しています。

しかし、待ってください... Kubernetesで動作する他のフレームワークはありますか?


Kubernetesのサーバーレスフレームワークには、おそらく2つのカテゴリがあります。サポートされるプログラミング言語ごとに非常に特定のランタイムに依存するものと、FaaSのように任意のコンテナーを機能にできるものです。

FaaSには、Docker SwarmおよびKubernetesのネイティブAPIのバインディングがあります。つまり、既に使用したオブジェクトを使用してDeployments and Servicesを管理します 。 これは、新しいアプリケーションの作成に関して、デコードが必要な魔法とコードが少ないことを意味します。

フレームワークを選択するときは、プロジェクトに新しい機能や修正を追加するかどうかを検討してください。 たとえば、OpenWhiskはScalaで記述されており、他のほとんどはGolangで記述されています。


3.非同期処理


サーバーレス機能の機能の1つは、小さくて高速で、同期して通常数秒で実行されることです。 しかし、非同期に機能させたい理由はいくつかあります。


非同期処理のプロトタイプは、分散キューから始まりました。 実装はNATSストリーミングを使用しますが、Kafkaまたはキューのように見えるその他の抽象化で動作するように拡張できます。


FaaSの非同期モードのTwitterアナウンスからの図

バックエンドとしてNATSストリーミングを使用した非同期呼び出しは、プロジェクトコードベースに含まれています。 それを使用するための指示はここにあります

変更は大歓迎です。


...そして、問題、コードの機能、プロジェクトリリース、スクリプト、テスト、パフォーマンス測定、ドキュメント、サンプルの更新、さらにはプロジェクトについてのブログを支援したい場合でも、問題はありません。

誰にとっても常に何かがあり、これらすべてがプロジェクトの前進に役立ちます。

フィードバック、アイデア、提案を@alexellisukに送信するか、GitHubリポジトリのいずれかを使用して送信してください。

どこから始めたらいいか分からない?

TensorFlowによる機械学習、ASCIIアート、簡単な統合など、 ディスカッションやコミュニティ機能に触発されます

翻訳者からのPS


1か月前、この資料の著者は、Minikubeを使用してKubernetes 1.8でOpenFaaSを開始するための手順も公開しました。

Kubernetesのサーバーレストピックに興味がある場合は、(少なくとも) KubelessプロジェクトとFissionプロジェクトにも注意を払う必要があります。上記の記事の著者は、より完全なリストを提供しています。 おそらくブログでそれらについて書きますが、今のところ-過去の資料を読んでください:

Source: https://habr.com/ru/post/J344656/


All Articles