ワークスアプリケーションズでは、グローバルでの技術者採用にも積極的に取り組んでいる。「アジアを中心に優秀な技術者の採用が進んでいます」と語るのは、ワークスアプリケーションズ 広報の太田更紗氏だ。この成果もあり、現在では海外での開発体制がかなり充実した。
そんなワークスアプリケーションズでは、2014年10月、新製品として次世代ERPシステム「HUE」を発表した。「HUEは技術の革新です」と太田氏。次世代ERPシステムとして開発しているHUEは、同社の実績あるERPパッケージ「COMPANY」を拡張したものではない。まったく新しいコンセプトで、1から作り直したものなのだ。
このHUEでは、ERPアプリケーションでは当たり前だったリレーショナル・データベースと決別し、NoSQLのCassandraを採用した。同社では、すでに5年ほど前からCassandraを社内システムで運用していたという。
ここで、ワークスアプリケーションズが新製品のHUEでなぜCassandraを採用したのか。その理由と、Cassandraをベースにしたアプリケーション開発の過程について、同社でHUEテクノロジー開発リーダーを務める堤 勇人氏に話を訊いてみよう。
とにかく速さを求めてCassandraを選んだ
Q:HUEでCassandraを採用した背景を教えてください。どのような課題があったのでしょうか。
堤:最大の理由は速度です。HUEでは、100ミリ秒でレスポンスする目標が掲げられました。これを実現するのは、CEOの牧野の強い思いでもあります。
掲げられた速度目標は、ユーザーのアクションに対し常に100ミリ秒以下で画面を返すものです。100ミリ秒というのは、人が「一瞬」と感じる速度の境界です。これを実現しようとすると、画面描画時間などもあり、データベースへのアクセスは20ミリ秒くらいしか許容できません。
当初はリレーショナル・データベースを含めこの要件の実現を検討しましたが、ERPの処理でリレーショナル・データベースを使うと、ソートやJoinが発生するので50ミリ秒くらいはかかります。これでもERPとしてはずいぶん高速です。ところがデータベース処理で50ミリ秒使うと、ユーザーへのレスポンスを100ミリ秒以下にはなかなかできません。
であれば、時間のかかるソート処理などもあらかじめしておく。そう考えるとNoSQLデータベースでもいいのではと思い至りました。一方で、ERPではバッチ処理的なものも数多くあり、これも当然ながら速くしたい。データベースの処理で速度と言った場合、スループットとレスポンスがありますが、その両方が必要となる訳です。
もちろんリレーショナル・データベースも、お金をかければレスポンスやバッチ処理は高速化できます。でもそれだとユーザーメリットにはなりません。さらに、HUEはクラウドで提供するので、ユーザーが増えても可能な限り線形でスケールする仕組みが必要でした。こういった要件から、Cassandraを採用しました。
Q:リレーショナル・データベースとのハイブリッドではなくCassandraだけで作ることになったのはなぜですか?
堤:理由はやはり速度です。NoSQLを使うとした際に、改めてERPの処理について考えてみました。その結果、全ての処理にトランザクションをかける必要はないのではとの結論となったのです。
そこでNoSQLを全面的に採用し、トランザクションでデータ整合性を確保しなければならない部分は、別途作り込むことにしたのです。COMPANYは、機能を網羅していることが売りのERPです。対して新たなHUEは、COMPANYで速度が出ない機能は出荷しないくらいのコンセプトで、とにかく速度を重視すると牧野も言っています。
Cassandraを選んだもう1つの理由に、スモールスタートできることがあります。NoSQLデータベースには、性能を確保するには良いサーバーが5ノードくらい必要、という製品もあります。Cassandraは1ノードでも利用でき、3ノードもあれば十分に性能が出ます。
それと分散処理構成でも、単一障害点(Single Point of Failure)がないアーキテクチャも評価しました。マスターノードがなく、その上で可用性に重点を置いているのも採用ポイントでした。
当然、他のNoSQLデータベースも検討しました。その際に比べたのは実績です。また、オープンソースであり、特定のベンダーにロックインされないのも評価ポイントでした。すでに社内システムでCassandraを利用しており、技術的な蓄積があったことも安心材料でした。
CassandraがJavaで書かれていることも重要でした。我々はアプリケーションもJavaで書いているので、社内にはJavaの得意なエンジニアがたくさんいます。いざとなればCassandraのソースコードを読み、パッチを送ることも出来ます。