既存製品の技術を活かし日立製作所が開発した高信頼の分散KVS

クラウド時代の新たなデータストアとして、急速に広まりつつあるのが分散KVSです。ここでは、日立製作所が開発した分散KVSである「uCosminexus Elastic Application Data store」を解説していきます。

RDBMSではカバーできない要件に対応するために開発

サービス利用者の行動履歴や利用状況、あるいは各種センサーから大量に生成されるデータなど、社会全体における情報の量は増加の一途を辿っています。従来、こうしたデータの多くは有効に利用されているとは言い難い状況でしたが、ハードウェアのパフォーマンスが向上し、さらに大量のデータを効率的に処理するソフトウェアが現れたことなどにより、サービス品質の向上や将来予測を目的として、いわゆる「ビッグデータ」を役立てようという動きが加速しています。

ただデータを蓄積・管理するためのミドルウェアとして幅広く使われている従来のRDBMSは、ディスクアクセスで要する時間などからビッグデータの解析に向いていない側面がありました。そこで日立製作所は、データ解析を支援するために分散KVSを開発しています。

開発の背景について、日立製作所 情報・通信システム社 ITプラットフォーム事業本部 第2AP基盤ソフト設計部 主任技師 梅田多一氏は次のように説明します。⁠我々が考えるビッグデータ解析では、大量のリクエストを効率よく処理することが重要だと認識しています。それを扱うための基盤として、まず最初の入り口でデータを受け取るためのミドルウェアとして、uCosminexus Elastic Application Data storeを開発しました。データの蓄積や管理といった領域ではすでにRDBMSがありますが、それでは満たせない要件に対応することが開発した目的の1つです(梅田氏⁠⁠」

この製品は、すべてインメモリでデータを処理する仕組みとなっているほか、複数のノードにデータを分散して配置することが可能、そしてアプリケーション側はノードの位置を意識せずにアクセスできる点など、多くの分散KVSと同様の特徴を備えています。さらにJVMまで含めて自社で開発しており、根幹技術に関わる問題でも、日立製作所ならではの手厚いサポートが受けられることも大きなアドバンテージだと言えるでしょう。

読み出し先のノードを固定しデータの一貫性を確保

それでは、uCosminexus Elastic Application Data storeの具体的な仕組みを見ていきましょう。

まず分散KVSにおいて要となる各ノードへのデータの分散ですが、これはmemcachedやCassandraと同じくConsistent Hashingによって行われており、さらにクライアントライブラリによってノード情報が共有されています。このため、アプリケーション側ではどのノードかを意識することなく、データを読み書きできるというわけです。

当然信頼性を高めるためにレプリケーションの仕組みも備えられており、マスタとして書き込まれたノードのほか、別のノードにもスレーブとして同じデータが書き込まれます。これにより、いずれかのノードに障害が発生しても、別のノードを使って処理を継続することが可能です。

なおこの製品はデータの一貫性を確保するため、データの読み込みは必ずマスタを利用するという仕組みになっています。単純にパフォーマンスだけを考えた場合、同じデータが書き込まれている複数のノードに読み出し処理を分散させることが考えられます。ただ、すべてのノードに同じデータが書き込まれているとは限らないため、一貫性が低下するという問題が生じてしまうという難点があります。

たとえばデータを更新した直後に、データを書き込んだノードとは別のノードに対して読み出し処理が行われた場合、更新される前の古いデータを返してしまう可能性を排除できません。そのため、必ずマスタとなっているノードから読み出しを行うことで、伝搬の遅延などによる一貫性の低下を防いでいます。

図1 製品の仕組み
データ分散・多重化により、部分障害が生じても継続稼動、また外部保管・トレース採取により、障害復旧・状況把握を迅速化

図1 製品の仕組み―データ分散・多重化により、部分障害が生じても継続稼動、また外部保管・トレース採取により、障害復旧・状況把握を迅速化
図中のuCEADs表記はuCosminexus Elastic Application Data storeの略称です。

既存製品の技術を活用したトラブルシューティング支援

さらに外部入出力やログ/トレースファイルを記録するための仕組みも用意されています。特に注目したいのはトレースファイルの存在でしょう。

多数のノードを利用していてパフォーマンス上の問題が生じたとき、それがどのノード、あるいはネットワークに原因があるのかを突き止めるのは容易ではありません。しかしuCosminexus Elastic Application Data storeでは処理内容がトレースとして記録されており、これを分析することによってボトルネックとなっているノードを特定したり、あるいはパフォーマンスを解析したりできるというわけです。

そのほかにも、パフォーマンスの向上などを目的にさまざまな仕掛けが組み込まれていると話すのは、日立製作所情報・通信システム社 ITプラットフォーム事業本部先端情報システム研究開発部技師 杉本裕紀氏です。⁠この製品では、コネクションのプールなど性能を高めるための仕掛けが多数盛り込まれています。ただ、単なるプールだとノードがダウンした場合にアプリケーション側が待たされるということもあるわけです。それに対応するため、内部的にコネクションの接続確認を行うといった仕組みも組み込んでいます。構成情報もチェックしているので、たとえばサーバが増えると自動的にデータを書き込むノードの選定に反映されます。このあたりは日立のアプリケーションサーバ製品で培われた技術が活かされています(杉本氏⁠⁠」

信頼性を重視した設計だからこそのノード管理

分散アーキテクチャでは、いずれかのノードがダウンした際にそれを検知するための仕組みも重要になります。uCosminexus Elastic Application Data storeでは、ハートビートを使って各サーバの生死確認を行っています。いずれかのサーバからハートビートがなくなった場合、生存しているサーバが確認のために接続し、それでも応答がなければノードダウンの可能性があると判断するという流れです。

ただハートビートの送信側ではなく受信側に問題が発生している可能性もあり、簡単にノードのダウンを判断することはできません。そこで、いずれかのノードがダウンした可能性がある場合、本当にそのノードがダウンしているのかを複数のノードで多数決で判断します。この多数決によりダウンした可能性が高いと判断されれば、そのノードがクラスタから切り離されるというわけです。

なおノードがダウンした場合には、そのノードに保存されていたデータにアクセスすることが不可能になり、多重度が減少することになります。分散KVSによっては、ダウンしたノードが保存していたデータを別のノードに再配置する「リバランス」という処理を行うことでその多重度を維持します。しかし現状は、あえてリバランスは行っていないと梅田氏は説明します。

「ノードがダウンしたということは、システムに何らかの異常が発生したことが想定できます。こうした異常時に負荷の高い処理を行うと、別の障害を引き起こす可能性がありますし、また正常なノードのメモリを消費することにもつながります。uCosminexus Elastic Application Data storeでは、もともと信頼性を重視して設計していることもあり、あえてリバランスは行わない仕様にしています(梅田氏⁠⁠」

こうした信頼性を重視した考え方は、ミッションクリティカルなシステム設計や構築において多数の実績がある、日立製作所ならではの部分と言えるのではないでしょうか。

キャッシュやバッファとして利用しRDBMSの弱点をカバー

さて、本製品の実際の利用シーンとしては、一種のキャッシュサーバーとして利用することが考えられます。たとえば会員情報や購買履歴を表示するといった参照系のアプリケーションにおいて、あらかじめRDBMSから必要なデータを取り込んだuCosminexus Elastic Application Data storeをデータベースとして使うといった方法が考えられるでしょう。

図2 リードキャッシュとしての適用例(オンラインショップ)
アプリケーションの用途、データ・データアクセスの特性に応じて組み合わせで適用し、システムを最適化

図2 リードキャッシュとしての適用例(オンラインショップ)―アプリケーションの用途、データ・データアクセスの特性に応じて組み合わせで適用し、システムを最適化

図3 ライトバッファとしての適用例(ビッグデータ活用)
RFIDやスマートメーターなどの多様・大量なデータを扱う通信路となることで、新たなデータ活用を推進

図3 ライトバッファとしての適用例(ビッグデータ活用)―RFIDやスマートメーターなどの多様・大量なデータを扱う通信路となることで、新たなデータ活用を推進

同様に更新系の処理でも、キャッシュとして利用するメリットが得られます。具体的には、書き込み処理をRDBMSに直接行うのではなく、uCosminexus Elastic Application Data storeをバッファとして利用することにより、RDBMSのパフォーマンス不足などによる遅延を防げるわけです。

なお杉本氏によれば、システムによっては遅延の短縮が大きなポイントとなることがあり、その際にSQLの解析時間すら省くことが求められるケースがあるとのこと。こういった極限まで性能を突き詰める必要があるシステム、あるいはスマートメーターなど各種センサーから送られてくるデータをリアルタイムに蓄積、そして解析を行うといった用途でも分散KVSは使われていくのではないかと話します。このように用途が広がっていく分散KVSの世界において、日立製作所のuCosminexus Elastic Application Data storeがどのように存在感を示していくのか、今後の動向に注目したいと思います。

おすすめ記事

記事・ニュース一覧