次に、一定の間隔(下記の例では 30 分)でサーブレットの URL を呼び出すように、App Engine Cron Service を構成する
cron.yaml ファイルを app.yaml と同じところに作ります。
cron:
- description: Cron job to schedule Dataflow pipeline
url: /dataflow/schedule
schedule: every 30 mins
login: admin
最後に、gcloud を使って App Engine に cron ジョブをデプロイする必要があります。
$ gcloud preview app deploy cron.yaml
Beginning deployment...
Updating config [cron]...done.
以上で完了です。cron ジョブは、Cloud Platform Console で App Engine -> Task Queues -> Cron Jobs を選択すると確認できます。
同様に、Dataflow Monitoring Interface をチェックすれば、Dataflow パイプラインが実行されたことを確認できます。
Cloud Functions(実験的な方法)
Cloud Functions のアルファ テストに参加していただいている場合は、App Engine Cron Service とは別の興味深いアプローチを試すことができます。ただし、本番ジョブでこの方法に頼るのは、まだお勧めできません。
Cloud Functions のもとでは、クラウド環境でイベントが発生したときに実行される Node.js を書くことができます。フルマネージドなので、関数を書いてデプロイすれば、インフラについて心配する必要はありません。この種の関数は、複数のトリガ( Pub/Sub メッセージ、クラウド ストレージの変化、HTTP 呼び出し)に反応できるので、さまざまなシナリオで役に立ちます。
別のアプローチというのは、任意の Cloud Functions トリガ( Pub/Sub、クラウド ストレージ、HTTP )によって Dataflow パイプラインが起動されるように Cloud Functions を書くというものです。そのためには、やるべきことがいくつかあります。
第 1 に、Dataflow パイプラインは通常 Java で Dataflow SDK を使って書かれるので、Node.js が呼び出せる実行可能 JAR を作る必要があります。このサンプルでは、Dataflow に付属している
WordCount.java を使います。このサンプルから JAR を作る方法はたくさんあります。たとえば Eclipse ユーザーなら、ファイルを右クリックして実行可能 JAR をエクスポートできます。
第 2 に、Cloud Functions のために Node.js モジュールを作る必要があります。
module.exports = {
wordcount: function(context, data) {
context.success(“Success”);
}
}
そして、この Node.js モジュールから実行可能 JAR を呼び出すための手段が必要です。これは、Node.js の spawn で作ることができます。spawn を追加したモジュールは次のとおりです。
module.exports = {
wordcount: function(context, data) {
const spawn = require('child_process').spawn;
const child = spawn(
'jre1.8.0_77/bin/java',
['-cp',
'WordCount.jar',
'com.google.cloud.dataflow.WordCount',
'--jobName=FromACloudFunction',
'--project=[YOUR_PROJECT_ID],
'--runner=BlockingDataflowPipelineRunner',
'--stagingLocation=gs://[YOUR_BUCKET]/staging',
'--output=gs://[YOUR_BUCKET]/output'
],
{ cwd: __dirname });
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
context.success("Success: " + data);
});
child.stderr.on('data', function(data) {
console.error('error: ' + data);
context.failure("Error: " + data);
});
child.on('close', function(code) {
console.log('closing code: ' + code);
});
}
}
Node.js の spawn コマンドが JAR の実行のためにローカル Java ランタイム フォルダを使用することに注意してください。Cloud Functions は
Google Compute Engine VM の上で動作しますが、これらの VM には Java がインストールされていないので、Cloud Functions コードのほかに独自の Java ランタイム フォルダを提供しなければなりません。そうした理由から、ローカル Java ランタイム フォルダが使われるのです。
最後に Cloud Functions をデプロイします。Node.js モジュールは必ず index.js という名前にし、依存する Java ファイル( WordCount.jar と jre1.8.0_77 )をすべて同じフォルダに格納してください。
デプロイ中、Cloud Functions がローカル データを格納するためのバケット名を指定する必要があります。また、Cloud Functions が使えるトリガも指定しなければなりません。このサンプルでは単純に HTTP トリガを使うことにします。
$ gcloud alpha functions deploy wordcount --bucket [BUCKET_NAME] --trigger-http
次のようにすれば、デプロイした Cloud Functions をチェックできます。
$ gcloud alpha functions list
最後になりますが、単純な HTTP リクエストを用意します。
$ curl -X POST https://[REGION].[PROJECT_ID].cloudfunctions.net/wordcount --data
'{"message":"contents not matter in this example"}'
この HTTP リクエストが Cloud Functions を起動し、それが Dataflow パイプラインを起動します。Dataflow Monitoring Interface により、Dataflow パイプラインが本当に実行されていることを確認できます。
Pub/Sub トピックから起動される Cloud Functions を作り、そのトピックにメッセージを送る任意のシステムが Dataflow パイプラインを起動できるようにすれば、より高度なメカニズムになります。
前述したとおり、Dataflow には組み込みのスケジューリング メカニズムはありませんが、App Engine Cron Service を使用すれば、わかりやすい形でパイプラインのスケジューリングが可能です。
一方、それでは物足りない場合は Cloud Functions を使用します。そうすれば、App Engine Cron Service よりも多くのトリガで柔軟にパイプラインをスケジューリングできます。
- Posted by Mete Atamel, Developer Advocate
* この投稿は米国時間 4 月 11 日、Developer Advocate である Mete Atamel によって投稿されたもの(投稿はこちら )の抄訳です。
Google Cloud Dataflow は、データのバッチ処理とストリーム処理のための統一的なプログラミング モデルと、Google Cloud Platform 上で並列データ処理パイプラインを実行するマネージド サービスを提供しています。
Dataflow パイプラインを構築すれば、DirectPipelineRunner を使ってローカルにテストすることができます。すべてが良好であれば、Apache Maven か Dataflow Eclipse Plugin で DataflowPipelineRunner もしくは BlockingDataflowPipelineRunner を起動することで、手作業で Dataflow サービス内のジョブとして実行できます。
サブミットしたジョブの進行状況については、Cloud Platform Console から Dataflow Monitoring Interface を実行するか、gcloud から Dataflow Command-line Interface を実行すれば監視することが可能です。
スケジューリングの必要性
上述の方法でパイプラインの手作業による実行は非常にうまくいきますが、実際のデータ処理システムの場合、すべての処理は自動化、あるいはスケジューリングされます。そのため、私たち Google には「 Dataflow パイプラインを定期的に実行したり、何らかのトリガで起動したりするためにはどうすればよいのか」という質問がしばしば寄せられます。
現在のところ、Dataflow にはパイプラインをスケジューリングする組み込みのメカニズムはありませんが、Cloud Platform にはパイプラインをスケジューリングするうえで役に立つ 2 つのオプション、すなわち App Engine Cron Service と Cloud Functions があります。
そこで今回は、App Engine Cron Service および Cloud Functions の概要と、これらを使って Dataflow パイプラインをスケジューリングする方法を説明します。
App Engine Cron Service
App Engine Cron Service を使用すれば、cron ジョブを構成し、一定間隔で実行できます。これらの cron ジョブは、スクリプトやコマンドを実行できないという点で通常の Linux の cron ジョブとは異なります。App Engine アプリケーションの一部として定義された URL を HTTP GET で起動できるだけなのです。
その代わり、cron ジョブがどこでどのように実行されるのかを気にする必要はありません。cron ジョブを確実に、かつ指定した間隔で実行するために必要なことは、App Engine が面倒を見てくれます。
これは、Dataflow のスケジューリングにうってつけのメカニズムです。たとえば、Dataflow パイプラインを起動するサーブレットを App Engine 上で構築し、App Engine Cron Service に定期的にサーブレットを起動させれば、それに合わせて Dataflow パイプラインを実行できます。
ただし、注意しなければならないことがあります。Cron Service は App Engine の standard environment と flexible environment の両方にありますが、Dataflow パイプラインをスケジューリングしたい場合は後者を使用しなければなりません。
standard environment には、実行時間の制限や JRE クラスのブラックリストなど、サンドボックスによる制限があります。Dataflow パイプラインの実行には一般に JAR やその他のリソースを Cloud Platform にアップロードすることが必要であり、それが時間制限に引っかかるおそれがあります。また、Dataflow はブラックリストに含まれている JRE クラスを使っています。
なお、投稿執筆時点で App Engine の flexible environment はベータ バージョンです。
それでは、このソリューションを構成するピースをいくつか見ていきましょう。ここには ScheduledMinimalWordCount というクラスがあり、その run メソッドが Dataflow パイプラインを起動するものとします。
まず、パイプライン コードを呼び出すサーブレットを作成する必要があります。
DataflowSchedulingServlet.java
@WebServlet(name = "dataflowscheduler", value = "/dataflow/schedule")
public class DataflowSchedulingServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
ScheduledMinimalWordCount.run();
}
}
そして、App Engine にデプロイします。
次に、一定の間隔(下記の例では 30 分)でサーブレットの URL を呼び出すように、App Engine Cron Service を構成する cron.yaml ファイルを app.yaml と同じところに作ります。
cron:
- description: Cron job to schedule Dataflow pipeline
url: /dataflow/schedule
schedule: every 30 mins
login: admin
最後に、gcloud を使って App Engine に cron ジョブをデプロイする必要があります。
$ gcloud preview app deploy cron.yaml
Beginning deployment...
Updating config [cron]...done.
以上で完了です。cron ジョブは、Cloud Platform Console で App Engine -> Task Queues -> Cron Jobs を選択すると確認できます。
同様に、Dataflow Monitoring Interface をチェックすれば、Dataflow パイプラインが実行されたことを確認できます。
Cloud Functions(実験的な方法)
Cloud Functions のアルファ テストに参加していただいている場合は、App Engine Cron Service とは別の興味深いアプローチを試すことができます。ただし、本番ジョブでこの方法に頼るのは、まだお勧めできません。
Cloud Functions のもとでは、クラウド環境でイベントが発生したときに実行される Node.js を書くことができます。フルマネージドなので、関数を書いてデプロイすれば、インフラについて心配する必要はありません。この種の関数は、複数のトリガ( Pub/Sub メッセージ、クラウド ストレージの変化、HTTP 呼び出し)に反応できるので、さまざまなシナリオで役に立ちます。
別のアプローチというのは、任意の Cloud Functions トリガ( Pub/Sub、クラウド ストレージ、HTTP )によって Dataflow パイプラインが起動されるように Cloud Functions を書くというものです。そのためには、やるべきことがいくつかあります。
第 1 に、Dataflow パイプラインは通常 Java で Dataflow SDK を使って書かれるので、Node.js が呼び出せる実行可能 JAR を作る必要があります。このサンプルでは、Dataflow に付属している WordCount.java を使います。このサンプルから JAR を作る方法はたくさんあります。たとえば Eclipse ユーザーなら、ファイルを右クリックして実行可能 JAR をエクスポートできます。
第 2 に、Cloud Functions のために Node.js モジュールを作る必要があります。
module.exports = {
wordcount: function(context, data) {
context.success(“Success”);
}
}
そして、この Node.js モジュールから実行可能 JAR を呼び出すための手段が必要です。これは、Node.js の spawn で作ることができます。spawn を追加したモジュールは次のとおりです。
module.exports = {
wordcount: function(context, data) {
const spawn = require('child_process').spawn;
const child = spawn(
'jre1.8.0_77/bin/java',
['-cp',
'WordCount.jar',
'com.google.cloud.dataflow.WordCount',
'--jobName=FromACloudFunction',
'--project=[YOUR_PROJECT_ID],
'--runner=BlockingDataflowPipelineRunner',
'--stagingLocation=gs://[YOUR_BUCKET]/staging',
'--output=gs://[YOUR_BUCKET]/output'
],
{ cwd: __dirname });
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
context.success("Success: " + data);
});
child.stderr.on('data', function(data) {
console.error('error: ' + data);
context.failure("Error: " + data);
});
child.on('close', function(code) {
console.log('closing code: ' + code);
});
}
}
Node.js の spawn コマンドが JAR の実行のためにローカル Java ランタイム フォルダを使用することに注意してください。Cloud Functions は Google Compute Engine VM の上で動作しますが、これらの VM には Java がインストールされていないので、Cloud Functions コードのほかに独自の Java ランタイム フォルダを提供しなければなりません。そうした理由から、ローカル Java ランタイム フォルダが使われるのです。
最後に Cloud Functions をデプロイします。Node.js モジュールは必ず index.js という名前にし、依存する Java ファイル( WordCount.jar と jre1.8.0_77 )をすべて同じフォルダに格納してください。
デプロイ中、Cloud Functions がローカル データを格納するためのバケット名を指定する必要があります。また、Cloud Functions が使えるトリガも指定しなければなりません。このサンプルでは単純に HTTP トリガを使うことにします。
$ gcloud alpha functions deploy wordcount --bucket [BUCKET_NAME] --trigger-http
次のようにすれば、デプロイした Cloud Functions をチェックできます。
$ gcloud alpha functions list
最後になりますが、単純な HTTP リクエストを用意します。
$ curl -X POST https://[REGION].[PROJECT_ID].cloudfunctions.net/wordcount --data
'{"message":"contents not matter in this example"}'
この HTTP リクエストが Cloud Functions を起動し、それが Dataflow パイプラインを起動します。Dataflow Monitoring Interface により、Dataflow パイプラインが本当に実行されていることを確認できます。
Pub/Sub トピックから起動される Cloud Functions を作り、そのトピックにメッセージを送る任意のシステムが Dataflow パイプラインを起動できるようにすれば、より高度なメカニズムになります。
前述したとおり、Dataflow には組み込みのスケジューリング メカニズムはありませんが、App Engine Cron Service を使用すれば、わかりやすい形でパイプラインのスケジューリングが可能です。
一方、それでは物足りない場合は Cloud Functions を使用します。そうすれば、App Engine Cron Service よりも多くのトリガで柔軟にパイプラインをスケジューリングできます。
- Posted by Mete Atamel, Developer Advocate
バックアップとリカバリ サービスは、大規模インフラストラクチャの管理において最もコストがかかる複雑なプロセスの部類に入ります。OpenStack の場合は、永続ブロック ストレージの効率的な割り当てと管理を行うメカニズムを Cinder によって提供しています。
OpenStack のデプロイでは、Cinder ボリュームには仮想マシンの保存中のデータが格納されるほか、OS の起動デバイスが格納される可能性もあります。本番デプロイでは、包括的なビジネス コンティニュイティおよびディザスタ リカバリ戦略の一環として、この永続データを保護することが重要です。
こうした要件を満たすため、Cinder はバックアップ サービスと共にバックアップ ドライバの仕様も提供しています。ストレージ ベンダーはこの仕様に基づいて Cinder 用ドライバを用意することで、自社のストレージを Cinder のバックアップ先としてサポートできます。
そこで私たち Google の出番です。高い耐久性と可用性を備えるクラウド スケールのオブジェクト ストレージが、サポートされるバックアップ先として加われば、企業はバックアップ先を大容量のコモディティ ストレージから、運用効率の高い経済的なアーキテクチャに移行できます。追加の設備投資は不要で、ストレージ デバイスのスケール アウトにかかわる複雑な管理に悩むこともありません。
ファイルまたはブロック ストレージにアクセスするように設計された既存のソフトウェアやシステムを、オブジェクト ストアのネイティブ REST インターフェースに対応させることは、エンジニアリング上の労力がかかるため、これまではオブジェクト ストレージを導入するうえで障害となってきました。
Cinder のバックアップ ドライバ モデルは、OpenStack ユーザーにとってのこうしたエンジニアリングの複雑さを抽象化してくれる可能性があります。適切なバックアップ ドライバがインストールされていれば、バックアップ先のストレージは想定どおりに Cinder と連携して機能します。
Google の OpenStack Cinder バックアップ ドライバは、Mitaka で提供される Cinder の標準バックアップ ドライバ セットの一部として含まれており、最小限のセットアップで動作します。1 GB、5 GB、10 GB の Cinder ボリューム サイズで、Cloud Storage 用ドライバによる Cinder のフルバックアップ機能の検証に成功しています。
また、このドライバは、管理者側でインストールを調整できるようにするため、ユーザーが構成可能な下記のパラメータを提供します。
パラメータ
目的
backup_gcs_credential_file
Google サービス アカウントの JSON ファイル(ステップ 3 で Google Developer Console からダウンロードされる)のフルパス。
backup_gcs_bucket
backup_gcs_driver
Google バックアップ ドライバを選択するために使用されます。
backup_gcs_project_id
バックアップ バケットが作成されるプロジェクト ID。
backup_gcs_object_size
GCS バックアップ オブジェクトのバイト数。
デフォルト : 52428800 バイト
backup_gcs_block_size
増分バックアップのための変更トラッキング サイズ(バイト)。
backup_gcs_object_size は、backup_gcs_block_size の倍数でなければなりません。
デフォルト : 327678 バイト
backup_gcs_user_agent
gcs API の HTTP ユーザーエージェント文字列。
backup_gcs_reader_chunk_size
GCS オブジェクト ダウンロードのチャンク サイズ(バイト)。
デフォルト : 2097152 バイト
backup_gcs_writer_chunk_size
GCS オブジェクト アップロードのチャンク サイズ(バイト)。-1 の値を渡すと、ファイルが単一のチャンクとしてアップロードされます。
デフォルト : 2097152 バイト
backup_gcs_num_retries
転送のリトライ回数。
デフォルト : 3
backup_gcs_bucket_location
GCS バケットの場所。
デフォルト : ‘US’
backup_gcs_storage_class
GCS バケットのストレージ クラス。
デフォルト : ‘NEARLINE’
backup_gcs_retry_error_codes
リトライを開始するための GCS エラー コードのリスト。
デフォルト : [‘429’]
backup_gcs_enable_progress_timer
GCS バックエンド ストレージにボリュームをバックアップするときに、Ceilometer (OpenStack のテレメトリ サービス)に進行状況の通知を定期的に送信するためのタイマを有効または無効にします。デフォルト値は True(有効)です。
デフォルト : True
Nearline は Standard Storage と同等の高い耐久性を備え、可用性は若干低く、レイテンシは若干高くなっています。その読み込み性能は、格納されているデータ 1 TB あたり 4 MB / 秒で、データ量が多いほど高くなります。
たとえば、3 TB のバックアップ データは 12 MB / 秒でリストアできます。低コストながら高いパフォーマンスを提供する Nearline により、Cinder ボリュームを経済的にバックアップでき、必要に応じて高速にリストアできます。
OpenStack をお使いなら、バックアップとリカバリのためにストレージ システムに追加投資したり、セカンダリ データセンターを構築したりする必要はありません。Mitaka で提供される Cinder バックアップ ドライバにより、Cloud Storage はバックアップとリカバリの最適な選択肢となっています。
- Posted by Ben Chong, Product Manager and Mark Lambert, Program Manager, Google Cloud Platform
* この投稿は米国時間 4 月 11 日、Google Cloud Platform の Product Manager である Ben Chong と、同 Program Manager である Mark Lambert によって投稿されたもの(投稿はこちら )の抄訳です。
OpenStack Mitaka がいよいよリリースされ、私たち Google は非常にエキサイトしています。
私たちは Red Hat や Biarca と協力し、Google Cloud Storage に対応した OpenStack Cinder のバックアップ ドライバ を開発しました。Mitaka ではこのドライバが提供されています。
バックアップとリカバリ サービスは、大規模インフラストラクチャの管理において最もコストがかかる複雑なプロセスの部類に入ります。OpenStack の場合は、永続ブロック ストレージの効率的な割り当てと管理を行うメカニズムを Cinder によって提供しています。
OpenStack のデプロイでは、Cinder ボリュームには仮想マシンの保存中のデータが格納されるほか、OS の起動デバイスが格納される可能性もあります。本番デプロイでは、包括的なビジネス コンティニュイティおよびディザスタ リカバリ戦略の一環として、この永続データを保護することが重要です。
こうした要件を満たすため、Cinder はバックアップ サービスと共にバックアップ ドライバの仕様も提供しています。ストレージ ベンダーはこの仕様に基づいて Cinder 用ドライバを用意することで、自社のストレージを Cinder のバックアップ先としてサポートできます。
そこで私たち Google の出番です。高い耐久性と可用性を備えるクラウド スケールのオブジェクト ストレージが、サポートされるバックアップ先として加われば、企業はバックアップ先を大容量のコモディティ ストレージから、運用効率の高い経済的なアーキテクチャに移行できます。追加の設備投資は不要で、ストレージ デバイスのスケール アウトにかかわる複雑な管理に悩むこともありません。
ファイルまたはブロック ストレージにアクセスするように設計された既存のソフトウェアやシステムを、オブジェクト ストアのネイティブ REST インターフェースに対応させることは、エンジニアリング上の労力がかかるため、これまではオブジェクト ストレージを導入するうえで障害となってきました。
Cinder のバックアップ ドライバ モデルは、OpenStack ユーザーにとってのこうしたエンジニアリングの複雑さを抽象化してくれる可能性があります。適切なバックアップ ドライバがインストールされていれば、バックアップ先のストレージは想定どおりに Cinder と連携して機能します。
Google の OpenStack Cinder バックアップ ドライバは、Mitaka で提供される Cinder の標準バックアップ ドライバ セットの一部として含まれており、最小限のセットアップで動作します。1 GB、5 GB、10 GB の Cinder ボリューム サイズで、Cloud Storage 用ドライバによる Cinder のフルバックアップ機能の検証に成功しています。
また、このドライバは、管理者側でインストールを調整できるようにするため、ユーザーが構成可能な下記のパラメータを提供します。
パラメータ
目的
backup_gcs_credential_file
Google サービス アカウントの JSON ファイル(ステップ 3 で Google Developer Console からダウンロードされる)のフルパス。
backup_gcs_bucket
backup_gcs_driver
Google バックアップ ドライバを選択するために使用されます。
backup_gcs_project_id
バックアップ バケットが作成されるプロジェクト ID。
backup_gcs_object_size
GCS バックアップ オブジェクトのバイト数。
デフォルト : 52428800 バイト
backup_gcs_block_size
増分バックアップのための変更トラッキング サイズ(バイト)。
backup_gcs_object_size は、backup_gcs_block_size の倍数でなければなりません。
デフォルト : 327678 バイト
backup_gcs_user_agent
gcs API の HTTP ユーザーエージェント文字列。
backup_gcs_reader_chunk_size
GCS オブジェクト ダウンロードのチャンク サイズ(バイト)。
デフォルト : 2097152 バイト
backup_gcs_writer_chunk_size
GCS オブジェクト アップロードのチャンク サイズ(バイト)。-1 の値を渡すと、ファイルが単一のチャンクとしてアップロードされます。
デフォルト : 2097152 バイト
backup_gcs_num_retries
転送のリトライ回数。
デフォルト : 3
backup_gcs_bucket_location
GCS バケットの場所。
デフォルト : ‘US’
backup_gcs_storage_class
GCS バケットのストレージ クラス。
デフォルト : ‘NEARLINE’
backup_gcs_retry_error_codes
リトライを開始するための GCS エラー コードのリスト。
デフォルト : [‘429’]
backup_gcs_enable_progress_timer
GCS バックエンド ストレージにボリュームをバックアップするときに、Ceilometer (OpenStack のテレメトリ サービス)に進行状況の通知を定期的に送信するためのタイマを有効または無効にします。デフォルト値は True(有効)です。
デフォルト : True
Nearline は Standard Storage と同等の高い耐久性を備え、可用性は若干低く、レイテンシは若干高くなっています。その読み込み性能は、格納されているデータ 1 TB あたり 4 MB / 秒で、データ量が多いほど高くなります。
たとえば、3 TB のバックアップ データは 12 MB / 秒でリストアできます。低コストながら高いパフォーマンスを提供する Nearline により、Cinder ボリュームを経済的にバックアップでき、必要に応じて高速にリストアできます。
OpenStack をお使いなら、バックアップとリカバリのためにストレージ システムに追加投資したり、セカンダリ データセンターを構築したりする必要はありません。Mitaka で提供される Cinder バックアップ ドライバにより、Cloud Storage はバックアップとリカバリの最適な選択肢となっています。
- Posted by Ben Chong, Product Manager and Mark Lambert, Program Manager, Google Cloud Platform
また Google Cloud Platform トラックでは、3 月 23 日(水)にサンフランシスコで開催された GCP NEXT 2016 で発表された最新情報はもちろん、日本ならではの内容も事例を交えながらご紹介いたします。
是非お申し合わせの上、ご参加ください。
<イベント概要>
※サイト内では完全招待制となっておりますが、一般のお客様へのお席もご用意がありますので、ぜひお申し込みください。
Google for Mobile は、Google が主催するモバイル サービス コンテンツ提供事業者の皆様をサポートするためのイベントです。今回のイベントでは、ゲーム デベロッパーの皆様を対象に、先日サンフランシスコで行われた GDC (Game Developers Conference) 内で Google からの発表内容を改めて説明させていただくと共に、Google Cloud Platform、Google AdWords、AdMob、Google Play のそれぞれの製品からゲームビジネスを更に発展させていただくために役立つ実践的ノウハウを共有させていただきます。
また Google Cloud Platform トラックでは、3 月 23 日(水)にサンフランシスコで開催された GCP NEXT 2016 で発表された最新情報はもちろん、日本ならではの内容も事例を交えながらご紹介いたします。
是非お申し合わせの上、ご参加ください。
<イベント概要>
※サイト内では完全招待制となっておりますが、一般のお客様へのお席もご用意がありますので、ぜひお申し込みください。
■ 写真左から
エンジニア 叶力華さん
代表取締役社長 角田千佳さん
■ 利用中の Google Cloud Platform サービス
これからの時代の新しい地域コミュニティを作る手伝いをしたい。それが角田さんが株式会社エニタイムズを立ち上げた理由です。同社が提供する生活密着型の個人間のスキルシェアサービス「
ANYTIMES 」は、同じ地域で暮らす人同士が、空き時間とスキルをシェアすることで日常の“困った”を解消していくサービス。例えば部屋の掃除を任せたり、犬の散歩を代行してもらったり、あるいは何か自分の得意なことで誰かの力になってあげたりといったことができます(現在は iOS 向けアプリと Web アプリでそのマッチングを提供)。
「起業する前から、“まち作り”に携わる仕事がしたいと考えていました。現在の日本では、高齢世帯や共働き世帯の増加により、日常の手助け需要は増加しています。また一方で、正規雇用を一度離職をするとなかなか雇用機会を与えられないという事実があり、それが現在の非労働者・非正規雇用者人口の増加、また個々の能力の非活用にも繋がっています。
これもまた大きな社会問題になっていますよね。そう考えた時、この 2 つの状況を上手に組み合わせることで“問題”を解決できるプラットフォームを作れるのではないかと考えました」(株式会社エニタイムズ代表取締役社長・角田さん)
そうした志のもと、2013 年 5 月に株式会社エニタイムズを起業した角田さん。起業当初は外部のフリーランス エンジニアの力を借りる形でサービスを構築していったのですが、結果として、外注での開発体制で、それ以上のサービス拡大と継続的な改善が難しい状態と成りました。
そこで、昨年夏頃から社内開発に完全切り替え。9 月に入社した叶さんら社内チームで新たにサービスを再開発することに。プロモーションもいったん停止するなど、本格的な仕切り直しが始まりました。
「多くの課題がありましたが、まず解決したかったのがサーバー運用に多くの時間を奪われていたこと。従来利用していた大手クラウドプラットフォームは自由度が高い反面、インフラへの知識と経験が要求されたり、スケーリングが面倒などといった問題がありました。そこでチーム内で協議し、このタイミングでの Google Cloud Platform への移行を決定。結果的にこれが大英断でしたね。賢いオートスケーリングなどのおかげで、エンジニアがアプリ開発に集中できるようになりました」(同社エンジニア・叶さん)
実際、これまではサービスがテレビなどで紹介されるたびにエンジニアがサーバーに張り付き、準備をせねばならなかったそうです。「例えば夜中のビジネス番組に紹介されると、その直後からアクセス数が 10 ~ 20 倍になってしまうんです。それまではサービスが停止してしまわないようハラハラしながら寝ずにサーバーの番をせねばならなかったんですが、Google 移行後は完全にお任せに。安心してぐっすり眠れるようになりました(笑)」(叶さん)
ほか、Google Cloud Platform のメリットとして、導入が簡単なこと、Google ならではのインフラの信頼性、大幅なコスト減(なんと従来の 10 分の 1 程度に!)を挙げる叶さん。特にインフラの安定性や強固なセキュリティは 2 万人以上のユーザーを抱える ANYTIMES にとって心強いものだったそうです。
そして、昨年 10 月中旬から開始されたリニューアル作業はなんと年始にはほとんど終了。1 月には新アプリのリリースが、4 月には Web アプリも刷新されました。Google App Engine を駆使してバックヤードをシンプルに組み上げ、ユーザーとダイレクトに接することになるフロントエンドの開発に時間を割けたことも、目標のクオリティを短期間で達成できた秘訣だと言います。
「とは言え、現在はまだ道半ば。今後も、多くの機能追加を予定しています。その上で、今一番注目しているのが Google BigQuery。これを使ったユーザビリティ解析をやってみたいですね。パフォーマンスの良いユーザーを積極的に薦めていくという機能も実現したいと考えています。また、画像データの内容を分析してくれる Cloud Vision API にも興味があります。不適切な画像を排除するパトロール機能に使えるほか、投稿された写真が料理や美容など、どういったカテゴリーに属すかを判別できるようになることで、より効率的なマッチングができるのではないかと期待しているんですよ」(叶さん)
Google Cloud Platform を活用して、大規模リニューアルを順調に進めているエニタイムズ。5 月からは停止していたプロモーションも再開予定とのことです。
■ Google Cloud Platform のその他の
導入事例はこちら から
IT 技術を駆使した現代のまち作りサポートを目的に 2013 年に起業したスタートアップ、株式会社エニタイムズが、今後の更なる飛躍を見据え、サービス & アプリを Google Cloud Platform でゼロから作り直すという大英断を行いました。それによって同社が抱えていた課題がどのように解決されたのでしょうか。
■ 写真左から
エンジニア 叶力華さん
代表取締役社長 角田千佳さん
■ 利用中の Google Cloud Platform サービス
これからの時代の新しい地域コミュニティを作る手伝いをしたい。それが角田さんが株式会社エニタイムズを立ち上げた理由です。同社が提供する生活密着型の個人間のスキルシェアサービス「
ANYTIMES 」は、同じ地域で暮らす人同士が、空き時間とスキルをシェアすることで日常の“困った”を解消していくサービス。例えば部屋の掃除を任せたり、犬の散歩を代行してもらったり、あるいは何か自分の得意なことで誰かの力になってあげたりといったことができます(現在は iOS 向けアプリと Web アプリでそのマッチングを提供)。
「起業する前から、“まち作り”に携わる仕事がしたいと考えていました。現在の日本では、高齢世帯や共働き世帯の増加により、日常の手助け需要は増加しています。また一方で、正規雇用を一度離職をするとなかなか雇用機会を与えられないという事実があり、それが現在の非労働者・非正規雇用者人口の増加、また個々の能力の非活用にも繋がっています。
これもまた大きな社会問題になっていますよね。そう考えた時、この 2 つの状況を上手に組み合わせることで“問題”を解決できるプラットフォームを作れるのではないかと考えました」(株式会社エニタイムズ代表取締役社長・角田さん)
そうした志のもと、2013 年 5 月に株式会社エニタイムズを起業した角田さん。起業当初は外部のフリーランス エンジニアの力を借りる形でサービスを構築していったのですが、結果として、外注での開発体制で、それ以上のサービス拡大と継続的な改善が難しい状態と成りました。
そこで、昨年夏頃から社内開発に完全切り替え。9 月に入社した叶さんら社内チームで新たにサービスを再開発することに。プロモーションもいったん停止するなど、本格的な仕切り直しが始まりました。
「多くの課題がありましたが、まず解決したかったのがサーバー運用に多くの時間を奪われていたこと。従来利用していた大手クラウドプラットフォームは自由度が高い反面、インフラへの知識と経験が要求されたり、スケーリングが面倒などといった問題がありました。そこでチーム内で協議し、このタイミングでの Google Cloud Platform への移行を決定。結果的にこれが大英断でしたね。賢いオートスケーリングなどのおかげで、エンジニアがアプリ開発に集中できるようになりました」(同社エンジニア・叶さん)
実際、これまではサービスがテレビなどで紹介されるたびにエンジニアがサーバーに張り付き、準備をせねばならなかったそうです。「例えば夜中のビジネス番組に紹介されると、その直後からアクセス数が 10 ~ 20 倍になってしまうんです。それまではサービスが停止してしまわないようハラハラしながら寝ずにサーバーの番をせねばならなかったんですが、Google 移行後は完全にお任せに。安心してぐっすり眠れるようになりました(笑)」(叶さん)
ほか、Google Cloud Platform のメリットとして、導入が簡単なこと、Google ならではのインフラの信頼性、大幅なコスト減(なんと従来の 10 分の 1 程度に!)を挙げる叶さん。特にインフラの安定性や強固なセキュリティは 2 万人以上のユーザーを抱える ANYTIMES にとって心強いものだったそうです。
そして、昨年 10 月中旬から開始されたリニューアル作業はなんと年始にはほとんど終了。1 月には新アプリのリリースが、4 月には Web アプリも刷新されました。Google App Engine を駆使してバックヤードをシンプルに組み上げ、ユーザーとダイレクトに接することになるフロントエンドの開発に時間を割けたことも、目標のクオリティを短期間で達成できた秘訣だと言います。
「とは言え、現在はまだ道半ば。今後も、多くの機能追加を予定しています。その上で、今一番注目しているのが Google BigQuery。これを使ったユーザビリティ解析をやってみたいですね。パフォーマンスの良いユーザーを積極的に薦めていくという機能も実現したいと考えています。また、画像データの内容を分析してくれる Cloud Vision API にも興味があります。不適切な画像を排除するパトロール機能に使えるほか、投稿された写真が料理や美容など、どういったカテゴリーに属すかを判別できるようになることで、より効率的なマッチングができるのではないかと期待しているんですよ」(叶さん)
Google Cloud Platform を活用して、大規模リニューアルを順調に進めているエニタイムズ。5 月からは停止していたプロモーションも再開予定とのことです。
■ Google Cloud Platform のその他の導入事例はこちら から
v1beta3 API では、パフォーマンスの大幅な向上に加えて、新しいプラットフォームがサポート対象に追加されています。今後は、この新プラットフォームも含めて、パフォーンマンスと機能を継続的に高めていくことになります。
v1beta3 API は、従来からお馴染みの
Google Cloud Client Libraries (Node.js、Python、Java、Go、Ruby)だけでなく、JSON や Protocol Buffers 上の gRPC のための低水準ネイティブ クライアント ライブラリでも使えるようになります。こうしたクライアント ライブラリについては、
こちらのドキュメント に詳しい説明があります。
Cloud Datastore の SLA
今回作成した
SLA は GA リリース用なので、v1beta3 API を介した
Cloud Datastore へのアクセスは同 SLA の対象にはなりませんが、この API のパフォーマンスがどの程度のものなのかは SLA から推計できます。SLA が有効になるのは API のGA リリース時です。
なお、
Cloud Datastore に対する App Engine Client ライブラリは、まだ
App Engine SLA の一部となっています。
Google Cloud Client Libraries を使用する場合、アップグレードは GitHub からクライアント ライブラリをアップデートするだけの単純な作業になります。
速くなった
Cloud Datastore のクロスプラットフォーム API を皆さんがどのように使われるのか、私たち Google は楽しみにしています。
Cloud Datastore の詳細は
スタート ガイド を参照してください。
- Posted by Dan McGrath, Product Manager, Google Cloud Platform
* この投稿は米国時間 4 月 4 日、Google Cloud Platform の Product Manager である Dan McGrath によって投稿されたもの(投稿はこちら )の抄訳です。
このたび、私たち Google は NoSQL データベースの Google Cloud Datastore に関して、もう 1 つの重要な発表を行いました。
重要な発表とは、Google App Engine の外にある Google Container Engine や Google Compute Engine などから Datastore にアクセスするためのクロスプラットフォーム API について、それをサポートする基礎の部分のアーキテクチャを再設計したことです。これにより、Datastore のパフォーマンスと信頼性が飛躍的に向上しました。
“もう 1 つの発表”としたのは、先日、Cloud Datastore の料金体系を刷新して単純化 することも発表したからです。今回の発表は、それに続くものです。
現在、Cloud Datastore API の新ベータ(v1beta3)が利用可能です。このベータ バージョンの API を使用するには、以前のバージョンの API を有効化してある場合でも、改めて新 API を有効化する必要があります(Cloud Datastore API を有効化 )。
また、この API の SLA (Service Level Agreement)も作成しました。SLA は API の GA (General Availability)リリースに合わせて有効になる予定です。
v1beta3 のリリースとともに旧ベータ(v1beta2)は非推奨となり、6 か月の猶予期間を挟んで 2016 年 9 月 30 日に提供を終了します。
新ベータの改定内容
今回リリースしたベータ版の API では、パフォーマンスと信頼性を高めるという観点から、サービス パス全体を見直しています。
Cloud Datastore API の v1beta3 は、平均でも最悪のケースでも、従来と比べてレイテンシが低くなっています。プレイヤーの手元に魔法のアイテムが届く場合でも、ウェブサイトで財務レポートを見る場合でも、そのスピードが速ければ誰もがきっと喜ぶでしょう。
v1beta3 API では、パフォーマンスの大幅な向上に加えて、新しいプラットフォームがサポート対象に追加されています。今後は、この新プラットフォームも含めて、パフォーンマンスと機能を継続的に高めていくことになります。
v1beta3 API は、従来からお馴染みの Google Cloud Client Libraries (Node.js、Python、Java、Go、Ruby)だけでなく、JSON や Protocol Buffers 上の gRPC のための低水準ネイティブ クライアント ライブラリでも使えるようになります。こうしたクライアント ライブラリについては、こちらのドキュメント に詳しい説明があります。
Cloud Datastore の SLA
今回作成した SLA は GA リリース用なので、v1beta3 API を介した Cloud Datastore へのアクセスは同 SLA の対象にはなりませんが、この API のパフォーマンスがどの程度のものなのかは SLA から推計できます。SLA が有効になるのは API のGA リリース時です。
なお、Cloud Datastore に対する App Engine Client ライブラリは、まだ App Engine SLA の一部となっています。
Google Cloud Client Libraries を使用する場合、アップグレードは GitHub からクライアント ライブラリをアップデートするだけの単純な作業になります。
速くなった Cloud Datastore のクロスプラットフォーム API を皆さんがどのように使われるのか、私たち Google は楽しみにしています。
Cloud Datastore の詳細はスタート ガイド を参照してください。
- Posted by Dan McGrath, Product Manager, Google Cloud Platform
金融テクノロジーおよびサービスを手がける
FIS は、
FinTech Top 100 ランキング で上位に位置するグローバル企業です。そうした同社が先ごろ、
Google Cloud Platform で構築したシステムのロード テストを行いました。
ロード テストの内容は、米国の株式取引市場で発生するイベントの処理、妥当性検証、およびリンクです。FIS は
Google Cloud Dataflow と
Google Cloud Bigtable を使用して、テスト対象の市場イベント 250 億件を 50 分間で処理し、素晴らしいパフォーマンスを記録しました。
対象のシステムは、3,500 の
Cloud Bigtable サーバー ノードと、
Cloud Dataflow を実行する 300 台の n1-standard-32 VM からなり、
Cloud Bigtable におけるイベントの読み込み件数は最大で 1 秒あたり 3,400 万件を超え、書き込み件数は同 2,200 万件に達しました。
また、持続的な読み込み件数は 1 秒あたり 2,200 万件以上、持続的な書き込み件数は同 1,600 万件となりました。
Cloud Bigtable はロード テストで高い I/O レートも達成しました。読み込み時のデータ転送速度は最大で 34 GB / 秒、書き込み時は同 18 GB / 秒で、30 分間の持続的な読み込みでも 22 GB / 秒、持続的な書き込みでも13 GB / 秒と高い数字を記録しています。
FIS にとってこうしたテスト結果は、米国市場における株式とオプションの 1 日分の取引データを、4 時間以内で分析用に処理できることを示しています。
テスト結果は
こちらのスライド にまとめられています。
FIS の Neil Palmer 氏と Todd Ricker 氏、および
Google Cloud Bigtable のエンジニアリング マネジャーを務める Carter Page が行ったテスト結果のプレゼンテーションの模様を収めた下記の動画では、テストに使用されたシステムの全体的なアーキテクチャの詳しい解説がご覧になれます。
VIDEO
私たち Google は、FIS のような革新的企業と協力しながら、Cloud Bigtable が提供するパフォーマンスやスケーラビリティ、NoOps アプローチによってデータ処理の課題に対応していくことを楽しみにしています。
- Posted by Misha Brukman, Product Manager for Google Cloud Bigtable
* この投稿は米国時間 3 月 31 日、Google Cloud Bigtable 担当 Product Manager である Misha Brukman によって投稿されたもの(投稿はこちら )の抄訳です。
金融テクノロジーおよびサービスを手がける FIS は、FinTech Top 100 ランキング で上位に位置するグローバル企業です。そうした同社が先ごろ、Google Cloud Platform で構築したシステムのロード テストを行いました。
ロード テストの内容は、米国の株式取引市場で発生するイベントの処理、妥当性検証、およびリンクです。FIS は Google Cloud Dataflow と Google Cloud Bigtable を使用して、テスト対象の市場イベント 250 億件を 50 分間で処理し、素晴らしいパフォーマンスを記録しました。
対象のシステムは、3,500 の Cloud Bigtable サーバー ノードと、Cloud Dataflow を実行する 300 台の n1-standard-32 VM からなり、Cloud Bigtable におけるイベントの読み込み件数は最大で 1 秒あたり 3,400 万件を超え、書き込み件数は同 2,200 万件に達しました。
また、持続的な読み込み件数は 1 秒あたり 2,200 万件以上、持続的な書き込み件数は同 1,600 万件となりました。
Cloud Bigtable はロード テストで高い I/O レートも達成しました。読み込み時のデータ転送速度は最大で 34 GB / 秒、書き込み時は同 18 GB / 秒で、30 分間の持続的な読み込みでも 22 GB / 秒、持続的な書き込みでも13 GB / 秒と高い数字を記録しています。
FIS にとってこうしたテスト結果は、米国市場における株式とオプションの 1 日分の取引データを、4 時間以内で分析用に処理できることを示しています。
テスト結果は
こちらのスライド にまとめられています。
FIS の Neil Palmer 氏と Todd Ricker 氏、および
Google Cloud Bigtable のエンジニアリング マネジャーを務める Carter Page が行ったテスト結果のプレゼンテーションの模様を収めた下記の動画では、テストに使用されたシステムの全体的なアーキテクチャの詳しい解説がご覧になれます。
VIDEO
私たち Google は、FIS のような革新的企業と協力しながら、Cloud Bigtable が提供するパフォーマンスやスケーラビリティ、NoOps アプローチによってデータ処理の課題に対応していくことを楽しみにしています。
- Posted by Misha Brukman, Product Manager for Google Cloud Bigtable
データ量の新しい計算方法
7 月 1 日には、料金体系の変更に合わせて格納データ サイズの計算方法も変更されます。新しい方法では Entity のプロパティ値とインデックスから直接ストレージ料金を計算できるので、デベロッパーにとっては透明性が高まります。これは、ストレージ コストを下げることにもつながります。
現状の計算方法は、変更可能な内部実装の詳細に大きく依存しています。これに対して新しい方法では、サブミットされたデータから直接計算できる固定料金体系になります。
Google では、デベロッパーがストレージ コストを推計できるようにするため、新しい計算方法の確定後に詳細を発表する予定です。
時間を有効活用
Cloud Datastore の料金体系が単純化されることにより、インデックスのマイクロマネジメントに費やす時間を減らし、そのぶんを次の開発に充てることができます。
Google Cloud Datastore の詳細 、もしくは
入門ガイド をご覧ください。
- Posted by Dan McGrath, Product Manager, Google Cloud Platform
* この投稿は米国時間 3 月 31 日、Google Cloud Platform の Product Manager である Dan McGrath によって投稿されたもの(投稿はこちら )の抄訳です。
Google Cloud Datastore は、ウェブやモバイル アプリケーションのためのスケーラブルな NoSQL データベースです。このデータベース サービスの料金体系について、私たち Google は先ごろ、より単純化することを発表しました。これにより、ユーザーの多くは大幅なコスト削減が期待できます。
料金体系の単純化に伴い、Cloud Datastore に格納されているデータの計算方法も透明性の高いものになります。こうした新しい料金体系とストレージ計算方法は、2016 年 7 月 1 日から適用される予定です。大多数のお客様にとって、これは実質的な値下げです。
新しい料金体系
Google は、皆さんからのフィードバックに応えて料金体系 を単純化します。新しい料金体系は、Cloud Datastore とのアクセス方法に関係なく、2016 年 7 月 1 日から適用されます。今よりシンプルになるだけでなく、多くのお客様が大幅値下げの対象となるでしょう。
また、インデックスの最適化作業からデベロッパーを解放する強力なインデクシング機能に魅力を感じつつも、現在の料金体系を理由に Cloud Datastore の導入をためらっていたお客様にとっても、今回の変更は大きな障害が取り除かれることを意味します。
エンティティの書き込み、読み出し、および削除にかかる料金は、現状では内部オペレーションの数で決まります。これに対して新しい料金体系のもとでは、より直接的にエンティティの数から決まるようになります。具体的には次のとおりです。
書き込み
現状の料金体系では、インデックスの数とタイプに応じて、1 つのエンティティの書き込みが 1 以上の書き込みオペレーションとして計算されます。
一方、新しい料金体系のもとでは、インデックスがどのようなものであれ、1 つのエンティティの書き込みは 1 と数えられ、100,000 あたり 0.18 ドルとなります。アプリケーションのニーズに合わせてインデックスをいくつ付けても、書き込み料金は高くなりません。
現状では、大多数の Entity 書き込みはエンティティあたり 4 以上の書き込みオペレーションとして計算されます。そのため、新料金はデベロッパーにとって大幅なコスト削減につながります。
読み出し
現状では、クエリによってはエンティティの読み出しの 1 に対して、別途読み出しオペレーションの数が加算される場合があります。
これに対して新しい料金体系では、エンティティの読み出しに対してのみ課金されます。小規模なオペレーション(射影やキーのみのクエリ)については現状でもクエリあたり 1 と計算されているので、変更はありません。
Entity 読み出しオペレーションあたりの料金は据え置きで、100,000 あたり 0.06 ドルです。そのため、ほとんどのデベロッパーにはコスト削減となります。
削除
現状の料金体系では、インデックスの数とタイプにより、削除は 2 以上の書き込みとして計算されます。
一方、新しい料金体系のもとでは、削除されるエンティティごとに削除オペレーションの料金のみがかかり、100,000 あたり 0.02 ドルです。これにより、削除の料金は少なくとも 66 % 値下げとなり、多くの場合、値下げ率はもっと高くなります。
無料クォータ
1 回の書き込みが複数のオペレーションに換算されることはないので、書き込みの無料クォータ(無料利用枠)は現状でも 1 日あたり 20,000 リクエストです。
削除には独立の無料クォータが与えられ、現状で 1 日あたり 20,000 リクエストです。これは、大多数のアプリケーションでは 1 日あたりの無料リクエストが増えることを意味します。
ネットワーク
Standard Network 料金 が適用される予定です。
データ量の新しい計算方法
7 月 1 日には、料金体系の変更に合わせて格納データ サイズの計算方法も変更されます。新しい方法では Entity のプロパティ値とインデックスから直接ストレージ料金を計算できるので、デベロッパーにとっては透明性が高まります。これは、ストレージ コストを下げることにもつながります。
現状の計算方法は、変更可能な内部実装の詳細に大きく依存しています。これに対して新しい方法では、サブミットされたデータから直接計算できる固定料金体系になります。
Google では、デベロッパーがストレージ コストを推計できるようにするため、新しい計算方法の確定後に詳細を発表する予定です。
時間を有効活用
Cloud Datastore の料金体系が単純化されることにより、インデックスのマイクロマネジメントに費やす時間を減らし、そのぶんを次の開発に充てることができます。
Google Cloud Datastore の詳細 、もしくは入門ガイド をご覧ください。
- Posted by Dan McGrath, Product Manager, Google Cloud Platform