パブリッククラウドは、スケーラビリティー(性能)の高さがメリットだが、注意すべき点がある。他のユーザーとシステムを共用するため、特有の制約があることだ。その制約をうまく回避しないと、本来の性能の高さを実現できない。

図1●性能面の問題と現場の工夫
図1●性能面の問題と現場の工夫

 クラウドを利用する現場を取材すると、性能に関して四つの制約(=問題)があることが分かった(図1)。一つ目は、米Salesforce.comの「ガバナー制限」に代表されるPaaS特有の制約である。制約が“パズル”のようになっており、それを解く工夫が求められた。二つ目は、KVS(Key-Value Store)を使うときの制約である。KVSは結合(JOIN)などの機能がなく、RDBと同じように利用すると性能が出ない。現場では、非同期処理や非正規化を使って高速化していた。

 三つ目は、海外のデータセンターを使わざるを得ないことによる制約。海外大手のクラウド事業者はまだ日本にデータセンターを持っておらず、国際通信のネットワーク遅延が大きくなる。キャッシュを使うなどの工夫が必要になる。四つ目は分散処理ミドルウエア「Hadoop」の制約。クラウドではファイルを分割しておくといった対策が必要だった。

 以下では、これらの制約を乗り越えた現場の工夫を順に紹介していく。

複数の制約をうまく回避

 クラウドの制約の影響が特に顕著に表れるのが、他のユーザーとミドルウエアまで共有するタイプのPaaSを使う場合である。Salesforce.comの「Force.com」や米NetSuiteの「SuiteFlex」には、複雑な制約がある。制約を回避して性能を引き出すのは「“パズル”を解くようなもの」(テラスカイ 取締役 製品開発部 部長 竹澤聡志氏)という。

 例えばForce.comでは、「1回の検索で取り出せるレコード数は1000件まで」「スクリプトのステップ数は1万行まで」といった制約がある。1回に取り出すレコード数を減らすために検索処理を分けて実行すると、今度はステップ数の上限値が問題になってくる。多数の制約をうまく回避する方法を考え出す必要がある。

 ERPパッケージベンダーであるガイアの久保孝行氏(開発部 部長)は、自社パッケージのユーザーがオンプレミスで動作させているERPシステムと、NetSuiteのSaaS間でデータ連携するサービスを開発する際、パズルを解くことを迫られた。

 久保氏が利用したのは、NetSuiteのPaaS「SuiteFlex」である。SuiteFlexで動かすプログラムにはいくつかの種類があり、久保氏は主に時間を指定して起動するプログラム「Scheduled Scripts」を使ってデータを送ることにした。ところが、夜間バッチ処理で最大10万件の仕訳データを(SuiteFlexからERPシステムに)送信すると、処理が朝までに終わらず、データ転送を高速化する必要があった。

 利用したScheduled Scriptsには大きく二つの制約があった。一つは、SuiteFlex側からERPシステムにデータを送信する際、通信時間が1回当たり最大45秒であること。大量データを送るには、通信処理を何度も繰り返す必要がある。もう一つはプログラムの実行時間が1回当たり最大10分注1だったこと。10分ごとにプログラムの実行を一旦終了し、再起動して処理を継続する必要があった。この制約によってデータ転送速度が低下していた。

図2●制約を回避してデータ転送を高速化
図2●制約を回避してデータ転送を高速化
ガイアは米NetSuiteのPaaS「SuiteFlex」の通信時間の制約から、夜間バッチ処理で、オンプレミスのERPシステムへのデータ転送が終わらないという問題に直面した。SuiteFlexの外側からWebサービスを呼び出すことで制約を回避した
[画像のクリックで拡大表示]

 そこで久保氏が代替手段として考え出したのが、SuiteFlexの機能を外側から呼び出すために用意されている、WebサービスのAPIを使う方法だった。Webサービスを使う場合、通信時間や実行時間の制限がなかったので、高速にデータを取り出せた。

 ただしWebサービスには別の制約があった。SuiteFlexが持つ一部のテーブルに対する検索処理が、Scheduled Scriptsからしか実行できなかったのである。そこで久保氏は、次のようにして制約を回避した。まずScheduled Scriptsを使ってテーブルを検索してキーだけを取り出し、オンプレミスのERPシステムに送る。キーはデータサイズが小さいため高速に転送できた。そしてそのキーを使って、Webサービスで必要なデータを取り出した(図2)。