コンテンツに移動
デベロッパー

Cloud Functions で「円周率の日」を祝いましょう

2022年3月28日
Google Cloud Japan Team

※この投稿は米国時間 2022 年 3 月 14 日に、Google Cloud blog に投稿されたものの抄訳です。

3 月 14 日は、数学の定数である π を祝う「円周率の日」です。今年、Google では、新しいサーバーレス プラットフォームを広く知ってもらおうと、Cloud Functions(第 2 世代)を使ったいくつかのテストを行っています。

サーバーレスでの円周率の計算

円周率の計算はサーバーレスで行えるでしょうか。円周率の桁を計算する場合に、前の桁を求めずに計算する Bailey–Borwein–Plouffe の公式(BBP 公式)という、比較的最近のアルゴリズムがあり、これを使えば多くの計算を並行して行い、後で結果を集約することができます。つまり、MapReduce パイプラインを構築して、数値を取得できるのです。Cloud Functions(第 2 世代)では、より大きいインスタンス(16 GB のメモリと 4 vCPU)がサポートされるうえ、関数の最大実行時間も 9 分から 60 分に拡張されているので、さらに限界を押し上げることができます。

Google が構築したアーキテクチャがこちらです。関数の実装には、Node.js を使用しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/distributed_pi_diagram.max-700x700.png

計算は次のように行われます。

  • processRequest 関数が、タスク(オフセット値 Y から X 桁を計算するなど)を作成し、PubSub に送信します。

  • PubSub によって calculateOffset 関数がトリガーされ、桁数を計算し、結果を Firestore に保存します。

  • 別のコントローラ関数 keep-watch が、Firestore をモニタリングし、すべてのタスクが完了すると combineResults をトリガーして、最終出力をテキスト ファイル形式で Cloud Storage に保存します。

所要時間は、6,400 万桁を計算するのに 45 分かかっています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/pi_table.max-1000x1000.png

BBP の公式は、残念ながら、記録更新チャレンジに使われる他のアルゴリズム(例えば私たちの前回の記録 、31.4 兆桁の計算に使われたもの)より計算的に複雑になるため、この公式を用いて新記録を樹立することはできないでしょう。しかしながら、Cloud Functions の最大起動時間が拡張されたことから、今回の実験だけでなく多くの新しいアプリケーションを実行できるようになります。

サーバーレス Pi API

Google では、π の桁を扱うための新しい API も構築しています。以前は Google Kubernetes Engine(GKE)を使用していましたが、Cloud Functions(第 2 世代)にサービスを移行しました。Google ではまた、Persistent Disk ではなく、Cloud Storage からデータを取得するように API プログラムを書き換えました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/pi_api_diagram.max-1000x1000.png

アーキテクチャを変更することで、毎月の総費用を約 9,000 米ドルから 450 米ドルまで削減できました。

  • ストレージ費用: 最も重大なコスト要因はディスクです。以前の構成では、π の桁を保存するのにゾーン SSD 永続ディスクを使用していたのですが、50 TB、50 兆桁の書式なしテキストで毎月 8,500 米ドルもかかっていました。今回、すべてのデータを Cloud Storage に移行しました。また、オブジェクトの形式を圧縮ファイルに変更したことで、50 兆桁での消費量を 50 TB から 21 TB に削減することができました。こうした変更により、ストレージ費用は95% 節約され、月 400 米ドル程度となります。

  • コンピューティング費用: Cloud Functions はコスト削減にも貢献しています。Cloud Functions では、リクエスト処理時のみ課金され、ベースの CPU 費用は発生しません。以前の GKE では、2 つのゾーンに 4 つのインスタンスを割り当てていたため、インスタンス タイプが e2-standard-4 の場合、月額で 391 米ドルがかかっていました。100 万件のリクエストの場合、試算すると、1 か月の費用は 98% 節約され、7 米ドル程度になります。

また、この新しいサービス アーキテクチャは複数のリージョンで実行されるので、これまで以上に高速で堅牢になります。グローバル HTTP(S) ロードバランサが最も近いリージョンを自動的に選択するので、レイテンシが改善されます。API 関数は、内部に小さいキャッシュを含んでいるので、キャッシュ ヒット時には Cloud Storage バケットにアクセスせずにレスポンスを返します。

ライブデモ

新しい API を使ったライブデモでは、π の桁で作成した音楽や、数字列の移り変わりをアニメーションにしたものを視聴することができます。このデモでは、 2021 年の世界記録である 50 兆桁をまるごと取り入れています。また、コマンドラインから直接 API を呼び出すこともできます。

読み込んでいます...

API サービスのソースコードとデモは、GitHub で公開されています。インフラストラクチャの管理には、Terraform を使用しています。スクリプトも公開していますので、ぜひ実例を見ながら学習してみてください。

「円周率の日」を楽しみましょう!



- デベロッパー アドボケイト Emma Haruka Iwao
- デベロッパー アドボケイト Sara Ford

投稿先