第9章. ファンクション・アズ・ア・サービスを使ったマイクロサービス
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
FaaS(Functions-as-a-Service)は、近年人気が高まっている「サーバーレス」ソリューションだ。FaaSソリューションは、インフラ・オーバーヘッドを管理することなく、アプリケーション機能の構築、管理、デプロイ、スケーリングを可能にする。FaaSは、イベント駆動型システムにおいて、単純なソリューションから中程度に複雑なソリューションまでを実装する手段として、大きな価値を提供することができる。
関数とは、特定の条件付きで実行されるコードの一部である。関数は起動し、完了するまで実行され、処理が完了すると終了する。FaaSソリューションは、負荷に応じて関数の実行回数を簡単に増減させることができ、非常に変動しやすい負荷に対して綿密なトラッキングを提供する。
FaaSソリューションを、定期的に失敗する基本的なコンシューマ/プロデューサ実装と考えることは、役に立つかもしれない。関数は、あらかじめ決められた時間が経過すると必ず終了し、それに関連するコネクションやステートはすべて消えてしまう。関数を設計する際には、このことを念頭に置いておこう。
機能ベースのソリューションをマイクロサービスとして設計する
FaaSソリューションは、多くの異なる関数から構成される可能性があり、それらの演算子の総和がビジネス境界づけられたコンテキストに対するソリューションを構成する。機能ベースのソリューションを作成する方法は数多くあり、本章でカバーしきれないほどであるが、プロセスを通してあなたを導くのに役立ついくつかの一般化設計原則がある。
境界づけられたコンテキストへの厳格なメンバーシップを保証する
ソリューションを構成する関数と内部イベントストリームは、関数とデータの所有者が明確に識別されるような、境界づけられたコンテキストに厳密に属していなければならない。マイクロサービスソリューションを大量に実装する場合、関数、サービス、イベントストリームの所有権に関する疑問が組織で生じることはよくあることである。多くのマイクロサービスソリューションは、境界づけられたコンテキストに1:1でマッピングされるが、単一の境界づけられたコンテキストに複数の関数が使用されることがあるため、n:1のマッピングも珍しくない。関数の粒度が高いと境界づけられたコンテキストの行が曖昧になる可能性があるため、どの関数がどの境界づけられたコンテキストに属するかを識別することが重要である。
境界づけられたコンテキストを関数で維持する実用的な方法には、以下のようなものがある:
-
データストアが外部のコンテキストからプライベートに保たれるようにする。
-
他のコンテキストと結合する場合は、標準的なリクエスト/レスポンス・インタフェースまたはイベント駆動型インタフェースを使用する。
-
どの関数がどのコンテキストに属するか(関数と製品の1:1のマッピング)に関する厳密なメタデータを維持する。
-
境界づけられたコンテキストにマッピングされたリポジトリ内で関数コードを維持する。
処理完了後にのみオフセットをコミットする
オフセットのコミットは、関数の開始時または関数の処理完了時の2つのタイミングがある。オフセットのコミットは、あるイベントまたはバッチ・イベントの処理が完了した後に行うのが、FaaSのベスト・プラクティスである。特定のファンクション・ベース・ソリューションのオフセットがどのように処理されるかを理解することは重要である。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access