[Serverlessconf Tokyo 2018] 基調講演2: Azure Functions 2.0の新機能とDurable Functionsによる関数オーケストレーション

407件のシェア(そこそこ話題の記事)

Serverlessconf Tokyo 2018の基調講演その2です。

MS 本社でAzure Functionsを開発している方が来日してのセッションです。
(個人的にはDurable Functionsを作った人っていうのが一番気になるところですが)

セッションタイトルは"Serverless for the Enterprise"ですが、先週GAしたAzure Functions 2.0とDurable Functionsのお話です。

サーバーレスって?

サーバーレスというもののサーバーがないわけではない。
サーバーのことを心配しなくてもいい、ということ。

クラウドコンピューティングを車で例えてみる。

  • IaaS: カーディーラーで車を買うようなもの
  • PaaS: レンタカーで借りるようなもの。実際には使ってなくてもお金がかかる
  • Serverless: タクシー。乗っている時間にだけ払う。

Azure Functions 2.0 GA

最近 2.0がGAされた。

v2ではHttp Trigger時のスループットが70%の改善がされた。

他にもいろいろと新機能をリリースしている

Portable Functions (デモがあった)

Functionをどこでも実行できるようになった。

Windows, Mac, Linuxどれでも動く。
コンテナ上で動かしているから、コンテナさえ使えればIoTデバイス上でも動かすことができる。 当然Kubernetes上で動かすこともできる。

更にローカルで実行するときVisual Studio CodeでF5実行すると、breakpointの設定ができる。

デモの内容はGitHubに上がっているのでぜひ、やってみてほしい。

https://github.com/mhoeger/functions-docker-sample

monitoring

Azure FunctionsではApplication Insightを使って監視することができ、パフォーマンス監視/ログ検索/ダッシュボードの機能もついている。
また、2.0からApplication Mapの機能が追加された。

gif
Introducing Azure Functions 2.0 Easier developmentより

Azure Premium Functions

Azure Functionsの新しい機能。 こちらについては後でブログが出る(まだない)。

Azure Functionsの対応言語

Azure Functionsの対応言語はこの4つ。
(Pythonの対応も2.0 GAから)

画像はMSのちょまどさんが書いたもの。
特にPythonちゃんはServerless Conf Tokyo 2018の2日前ぐらいに完成したもの。

Durable Function 関数オーケストレーション

順番に関数を使っていくとき、今までは間にキューを挟んで行っていた。
でもこれはめんどくさい。

Azure FunctionsだとDurable Functionsを使うことでもっと簡単に実装できる。

しかも、前の関数が終わるのを待っている間は課金が発生しない。

Durable FunctionsではC#もしくはJavaScript(Functions v2のみ)で以下のことを行うことができる。
また、それ単体だけでなく組み合わせて使うこともできる。

関数チェーン

chain
Pattern #1: Function Chaining

前述した関数を順番に実行していくこと。

ファンアウト/ファンイン

fanin-fanout
Pattern #2: Fan-out/fan-in

一つのFuntionから複数のFunctionを並列起動させるファンアウトと、複数のFunctionが終わったら一つの関数に戻るファンインを行う機能。
非常に難しいファンインを簡単なコードで処理することができる。

非同期 HTTP API

async
Pattern #3: Async HTTP APIs

実行時間の長い処理を行う際、API呼び出しでは処理の起動だけを行って別のAPIで処理のステータスを取得する場合がある。
Durable Functionsでは状態追跡を自動的にやってくれるので、自分で状態追跡を実装する必要がない。

監視

monitoring
Pattern #4: Monitoring

ワークフローの柔軟な"繰り返し"を行うための仕組み。
柔軟な繰り返し間隔とタスクの有効期限の管理ができて、特定条件を満たせば途中で終了することもできる。

人による操作

human-interaction
Pattern #5: Human interaction

ワークフローの途中に人による操作を必要とするようなものを簡単につくることができる機能。
一定時間以内に操作がなければ別の処理をする、例えば翌日までに上司の承認が得られない場合に他の誰かから承認を得るためのプロセスに入るとかする、こともできる。

Azure FunctionsはOSS

Azure FunctionsのコードとドキュメントはGitHubで公開されているOSS。
これも企業で使用することをおすすめできる理由の1つ。

なぜなら、何かあったときにissueを開くことができてMSの開発者と直接やりとりすることができる。
また、自分で実装してPull Requestを出すこともできる。

事例

二人の鉄人 (MSのMVP)とMSの牛尾さんから事例の紹介が行われた。

フルスタックの鉄人: Yuka Abuno (@yu_ka1984)

Durable Functionsで学ぶクラウドデザインパターンのブログの人。 ブログ

シグマコンサルティングに所属していて、ECのマネージドサービスを開発している。

2つの課題があった。

  • 障害に対するリトライや復旧、スロットリング制御、などなどを一つのFunctionで書きにくい
  • Systemが大きく慣れるほどコードを見ただけでは全体把握が難しい。

これらをDurable Functionsを使用して解決した。

  • リトライ処理が柔軟
  • 障害処理、補償トランザクションなどにも対応しやすい

"Durable FunctionsはFaaSの更に先を行く新たなサーバレスプラットフォーム……なのかもしれない"

PaaSの鉄人: 三宅和之 (@kazuyukimiyake)

FUJIFILMのIMAGE WORKS (クラウド型ファイル管理・共有サービス)の事例。

日本野球機構(NPB)もIMAGE WORKSを使用していて、ニュースなどで使用されている試合の画像などはそこから拾っている。

試合の度に何千枚もの写真がアップされ、それを手作業で誰の写真などと分類していた。
これは、それをサーバーレスで解決した事例。

バッターは横向いてるしピッチャーも投げるときは前向いてくれないなどの問題から、顔認証のFace APIだけでは30%の識別率だった。
それをExif情報や試合データなどからCNTK(Microsoft Cognitive Toolkit)で学習/推定を加えることで90%の識別率に。

ただワークフローが複雑化してしまうため、それはDurable Functionsで解決した。

"AzureでワークフローならDurable Functionsが一番クール"

牛尾さん

某有名大学に導入したメッセージ配信システム。 こちらもワークフローはDurable Functionsで作成。

まとめ

話には聞いていたAzure Functionsのアップデートのお話でした。

Durable FunctionsやPremium Functionsなど気になることや便利な機能が多いので、目が離せません。