かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

スマートスピーカーを遊びたおす会で Durable Functions の発表してきました

時間のかかる処理簡単に作れるよ!しかも進捗確認も簡単にできる!!っていうくらいのノリで発表してきました。

発表資料はこちらになります。

ちょまどさんパートの中身については、ちょまどさんにお任せするとして私のパートでお伝えしたかったことはこれです。

こういう複数の処理が連携して動くワークフローの定義って、私の認識ではワークフローデザイナーみたいなので画面でぽちぽちデザインして、裏側では JSON なり XML なりで管理されて実行エンジンが、それを解釈して動くようなものが多いと思ってます。 Durable Functions はプログラムコード(現在対応している言語は C#, JavaScript(TypeScript も OK)) で書ける点が強いです。

会場で受けた質問について

要約すると以下のような内容の質問を受けました。

最初はいい感じで動いてたけど、そこそこの期間運用してるとうまく動かなくなることがあった。
Durable Functions をオーケストレーター関数のインスタンス ID にはユーザー ID を指定している。

即答できなかったのでちょっと調べてみたら、同じ ID での実行履歴がたくさん溜まってくると、それを読み取るのに時間がかかるので結果として Durable Functions がうまく動かなくなるっぽいように見えました。

docs.microsoft.com

上記ドキュメントから引用

このテーブルのパーティション キーは、オーケストレーションのインスタンス ID から派生します。 
ほとんどの場合、インスタンス ID はランダムであり、Azure Storage での内部パーティションの最適な分散が確保されます。

そうはいってもユーザー単位で単一のオーケストレーター関数っていうのは便利なのでユーザー単位でインスタンス ID が 1 つというのはやりたい。

ということなので、履歴消去の仕組みがありました。

docs.microsoft.com

PurgeInstanceHistoryAsync で自分にとって都合のいいタイミングでいらなそうな履歴は消してしまうと精神衛生上よさそうです。

まとめ

Durable Functions はいいぞ。

デモのソースコード

github.com