Fn Projectを作った8つの理由

Hiroshi Hayakawa
9 min readOct 18, 2017

--

この記事は、英語原文の執筆者で、Fn Projectのオーナーである、@chadarimura (Medium/Twitter)さんに許可をいただいて、日本語に翻訳したものです。原文はこちら

Iron.ioにおいてサーバーレステクノロジーの先駆者であった私達のチームは、この領域の市場の拡大と、進歩の様を見てきました。そして、Fn Projectがサーバーレスの導入を加速し、完全なサーバーレスのプログラミングモデルを生み出し、真のマルチクラウド・コンピューティングを作り出すであろうことを確信しています。 このポストで、Fn Projectとはどのようなもので、なぜそれを作ったのかをお伝えします。

Java Oneにて、Fn Projectをオープンソース化しました(クリックして再生)

Fn Projectとは何か

Fn Projectは現在、4つの主要なコンポーネントで構成されています。

  1. Fn Server は、開発者がファンクションを、様々なクラウド環境上で簡単にビルド、デプロイ、スケールできるFunction-as-a-Serviceシステムです。Fn Serverは高速で信頼性がありスケーラブルなコンテナ・ネイティブです。詳細は後述します。
  2. Fn Load Balancer (Fn LB)は、オペレーターがFn Serverのクラスターのデプロイを可能にするもので、クラスターに対しトラフィックをインテリジェントにルーティングします。特に重要な点は、最適なパフォーマンスを得るために、ホット・ファンクションが稼働しているノードに対してトラフィックを流し、特定のファンクションに対するトラフィックが増加した場合には、負荷分散を行う点です。また、クラスター全体の情報を収集し、その情報を使ってスケールアウト/イン(Fn Serverの増減)のタイミングを認知します。
  3. Fn FDK’s — Javaをはじめとして、複数の言語でFDK(Function Development Kit)をリリースしていきます。FDKは全ての言語でファンクションの迅速な作成を目的として、ファンクションの入力に対するデータバインディングモデルを提供し、テストを容易にし、複雑なサーバーレス・アプリケーションを構築するための基盤を提供します。
  4. Fn Flow は、様々な言語で記述されたファンクションに対する、ハイレベルのワークフローを構築、統合します。Fn Flowを使うと、長大なJSONやYAMLのテンプレートで作られた外部モデルを習得しなくても、並列処理、ファンクション同士の連結、エラー処理、ファンイン/ファンアウト¹などを容易に利用できます。なにより、Flowは全てのファンクション呼出しグラフを追跡していますので、ダッシュボードでの可視化、Flow全体にわたるフルスタックのログ、ファンクション呼出しグラフ全体にわたる変数/メモリの再構成を可能にします。
ファンクション群の”フロー”を可視化する、Fn Flowの実験段階のインターフェース

プロジェクトでは他にも多くの計画がありますが、これら4つのコンポーネントが、サーバーレス・アプリケーションのパズルにおける主要なピースになると考えます。

なぜFn Projectを作ったのか

では、なぜ新たなサーバーレスのフレームワークを作ったのでしょうか。Iron.ioでの私達のビジョンは、ただのシンプルなFaaSプラットフォームではありませんでした。私たちは、あらゆるスキルレベルの開発者、あらゆる規模の組織(ひとりだけの小規模なチームから巨大なグローバル企業まで)に歓迎され受け入れられる、プラットフォーム、リッチなエコシステム、そしてエクスペリエンスを構築することを目指しました。このビジョンはIron.ioというスタートアップでは難しいことでしたが、現在は、オラクルでこのビジョンを実現するための設備と人員を得ています。以下で、Fn Projectの主要な差別化要素をご紹介します。

  1. オープンソース: 私達は、オープンソースこそがソフトウェアを届け、採用される方法だと信じています。Fn Projectは、その全てがApache 2.0 ライセンスに基づくオープンソースであり、オープンで透明性の高いガバナンスモデルを持ちます。
  2. マルチ・クラウド: あなたが複数のクラウドを採用しているかどうかに関係なく、利用するテクノロジースタックが特定のクラウドにロックインされるべきではありません。Fn Projectで私達が作り上げたあらゆるものは、あなたが保有するハードウェアで動かすことも含めて、複数のクラウド・プロパイダに常に対応します。サーバーレスとは、開発者がサーバーレスだと感じられるべきものですが、同時に、企業には利用可能なたくさんのサーバーがあります。
  3. 開発者エクスペリエンス: 経済性やオペレーションの効率性がビジネスや運用チームにとって非常に魅力的である一方で、サーバーレスは、開発者に力を与え、アジリティをもたらすアーキテクチャのままです。それゆえ、エクスペリエンスが重要であり、プロダクトのあらゆる面にエクスペリエンスを織り込む必要があります。fn initからfn deployに至るまで、Fn Projectが自然で、エレガントかつ、楽しいものにするしくみを考えています。
  4. コンテナ・ネイティブ: コンテナはソフトウェアをパッケージする方法を根本的に変えています。Fn Projectにおける私達のゴールは、コンテナの複雑さを抽象化してコンテナレス・エクスペリエンス(コンテナが無いかのようなエクスペリエンス)を作るだけでなく、パッケージングのフォーマットとしてコンテナを採用している人たちに対し、コンテナの力を提供することです。これがfn deployで全てのプロセスを抽象化しながら、ネイティブなDockerコンテナをファンクションとしてサポートする理由です。この考え方に付随して、BYOD(Bring your own Dockerifle)も可能です。
  5. プログラミング・モデル: サーバーレスは、費用や運用における利点、誇大広告もあって、採用のラッシュが起き、その結果、運用ツールやイベント・ドリブン・アーキテクチャ、クラウドにおけるトリガーといったたくさんの素晴らしいユースケースにつながりました。しかし、プログラミング言語のネイティブ機能、真のIDEとの統合、テスト、ワークフローなどを利用して複雑なサーバーレス・アプリケーションを作るには、それを妨げる技術的なギャップが今だにあります。私たちはこの問題を解決するために、Java FDKとFn Flowを最初の青写真としてリリースすることから始めました。
  6. オーケストレーターにとらわれない: Kubernetesは素晴らしいもので、Fnのデプロイにおいても、Kubernetesが全ての低レベルのインフラストラクチャを制御してくれることで利点を得ることができますが、Kubernetesが唯一の選択肢でなければ、FnのエンドユーザーにKubernetesを習得して扱えるようになって欲しいわけでもありません。サーバーレスとコンテナ・オーケストレーションを明確に区別することは重要であり、それによって、刻々と変化し続けるクラウドの状況下においてプロジェクトは適用し変化することができます。
  7. ビジョンと深み: Fn、Flow、FDKが基盤ですが、もっと多くのものを計画していますし、サーバーレスの位置づけとその方向性についての強いビジョンを、長年かけて確立しました。真のマルチクラウドのサーバーレスを実現するには、様々なサービスのスタックがあり、これらへの取り組みはまだこれからです。私たちは、ロードマップ上かなり近いうちに、コミュニティ、パートナーと共に取り組みを開始しようとしています。是非一緒に取り組みに参加してください。参加方法は後述します。
  8. サステナビリティ: この星を守るというのではなく(サーバーレスの計算効率は、多分その面でも影響があるでしょうが)、多くのプロジェクトは立ち上がってもすぐ消えてしまうという話です。何かをリリースして数日間ハッカーニュースのトップにいることは簡単ですが、技術やユーザービリティの素晴らしさを維持しながら、プロジェクトのモメンタム、コミュニティ、ビジョンを継続するのは極めて難しいことです。私達のチームは成功したスタートアップを創立し、作り上げたので、この道程の難しさを知っていますし、今ではOracleにおいてこのビジョンの完成を見ようとしていることに興奮しています。私達は、偉大で永続的なプロジェクトを作り上げるためのマラソンを走る準備はできています。

次に来るものは

幾つもの計画がありますので、ロードマップと長期的なビジョンについては別の記事で書き残したいと思いますが、この数カ月のうちに皆さんが期待してよいものについて、ここに記したいと思います。

  1. コミュニティとパートナー: コミュニティとパートナーはFn Projectにとって非常に重要になるでしょう。私達はこのミッションに参加し手助けしてくれる、リーダー、メンバー、パートナー、サポーターを探しています。どうぞ下にあるリンクから参加してください。
  2. サービス: Oracle Cloud Infrastructureを皮切りに、ゆくゆくは世界中の様々な地域のたくさんのクラウド・プロバイダーで、Fn Projectがサービスとしてローンチされるのを期待してください。
  3. 言語サポート: Fnランタイムは現在でもほとんどの言語をサポートしており、BYOD(bring your own Dockerfile、自分のDockerfileを持ち込む)でファンクションとして動かすことさえ可能です。一方で、プログラミング言語のより深い機能を提供する、Fn及びFn FlowのFDKを開発しています。現在、Java、Go、Python、そしてRubyのものがあり、毎週追加を行っています。

そして、これらはまだ始まりでしかありません。

参加してください

ぜひご参加ください。どんなフィードバックも歓迎です!

一緒に未来を作り上げましょう。

Chad

--

--

Hiroshi Hayakawa

Sales Engineer/Tech Evangelist@Oracle Japan — Java SE/EE, Oracle PaaS — ここに述べた発言は所属組織を代表するものではありません|Statements expressed here don’t represent those of my org.