ページの先頭です
2011年8月19日 更新
現代はデータの時代と言われています。業種を問わず、多くの企業で大量のデータ(Big Data)を処理することが、業務の遂行や意思決定にとって重要となっています。
インターネットサービスプロバイダであるIIJでは、自社が提供するネットワークやサービスの状態を正しく把握し、運用や設計を最適な状態に維持するために、様々な計測やロギングを行っています。そうして得られる膨大な量の情報を活用するためには、大量のデータを保持し、高速に検索・集計できるシステムが不可欠です。
ここでは、そのようなBig Dataを扱うためのIIJの取り組みについてご紹介します。
dddは、大量のデータを処理するためにIIJが独自に開発した分散データ処理システムで、広い意味のデータベースの一種です。最近はやりの NoSQL に属するものと考えることもできます。
dddの特徴は以下の通りです。
dddは、大きく分けると、データを格納する分散ストレージと、その格納されたデータを高速に抽出・集計するMapReduce機能の二つにわけることができます。
dddのストレージ部分は、分散キーバリューストアと呼ばれるものをベースにしています。キーバリューストアとは、データをキーとバリューの組合わせで格納する、シンプルなデータベースの一種で、それを複数ノードで分担管理するのが分散キーバリューストアです。
キーに応じて担当ノードを振り分けるために、dddではコンシステントハッシュ法というアルゴリズムを採用しています。コンシステントハッシュ法は、キーから極めて高速に担当ノードを割り出すことができ、かつノードが増減しても影響を受けるキーの範囲が比較的少ないという特長があり、分散キーバリューストアでよく使われています
dddのコンピュータノードには、一般的なPCサーバを用いており、RAIDなどのディスク冗長化装置は使っていません。ハードウェアは壊れることを前提としており、その代わりソフトウェアによるフェイルオーバ機能を備えています。平時にはノード同士がお互いの状態を監視しながらデータを別ノードに自動複製して冗長化し、故障時には別のノードが後を引き継ぐようになっています。
ノード数が増減しても、複製数は必ず一定になるように自動追従します。従って同時に複数のノードが故障しない限り、データが失われることはありません。また、容量が足りなくなってきたら、単にノードを追加するだけで動的に拡張することができるようになっています。
dddのノード群は、故障を見越して容量や処理性能にある程度余裕を持った台数で運用しています。一部のノードが故障してもシステム全体としては動き続けるため、故障したノードをただちに交換する必要はありません。多くの場合、故障ノードは数日から数週間は放置され、何かのついでのときにまとめて修理・交換しています。こうして、運用に関する人的コストを低く押さえています。
MapReduceとは、データを並列処理するためのプログラミングモデルで、Google社によって考案されました。その概念は1980年代後半に登場したスケルトン並列プログラミングに遡ることができます。スケルトン並列プログラミングは、よく使う並列プログラミングのパターンを抽象化し、スケルトン(雛形)として用意しておくという考え方で、その中にある map と reduce というスケルトンを組み合わせたものが MapReduce と言えます。
MapReduceは、一連の処理をmap(抽出・加工)とreduce(集計)の2段階のフェーズに分けて処理するモデルで、それぞれのフェーズの処理は、タスクと呼ばれる細かい単位で分割され、それを多数のノードで分担することで効率よく並列分散処理します。MapReduceは、もともとバッチ処理に向いた仕組みですが、dddではデータ配置や実装を工夫してインタラクティブな処理にも使えるようにしています。
前述の通り、IIJではさまざまな計測やロギングを行っていますが、その中でも特にデータの量が多いのが、バックボーンネットワークのトラフィックを計測するためにルータが出力するフロー統計情報です。フロー統計情報では、パケットのヘッダ情報相当をサンプリングしたものが得られますが、機器台数が多くトラフィックも膨大であるため、データ量も膨大なものとなります。
トラヒック解析時には、データを解析しようとするユーザの注目するポイントに応じて、AS番号、プロトコル番号、ポート番号など多岐にわたるパラメータを自由に組み合わせて指定できる必要があります。そのため、IIJでは、フロー統計情報を事前に集約や集計すること無く、そのままの形ですべてdddに保存しています。
一方で、ユーザのオンデマンドによるデータの抽出や集計が実用に耐える程度の性能が要求されます。ユーザは解析時にパラメータの組合わせを試行錯誤することもありますし、特に早急な対応が必要な攻撃や輻輳の発生時には、解析時間を短縮することが素早い対応につながります。
IIJでは、dddのMapReduce機能を使い、複数のノードで並列にデータを検索したり集計することにより、高速にデータ分析ができるようにしています。こうして、いち早くネットワーク状態を把握し、運用や設計に反映することができるようになりました。
dddは、もともとIIJ社内の専門知識を持った人間がデータを分析するためのシステムでしたが、現在は分散システムの高速なデータ処理能力を生かして、一部のレポート系サービスのバックエンドにも使われています。今後はサービスのバックエンドとしての活用を拡大していくほか、機械学習による異常の検出や障害の予測等の応用を考えていく予定です。
執筆者プロフィール
前橋 孝広(まえばし たかひろ)
IIJ サービス本部 プラットフォームサービス部 アプリケーションプラットフォーム課
1995年IIJ入社。入社後より一貫して、IIJのバックボーンネットワークの運用に関するプログラム開発に携わる。現在は、dddの開発と分散システム全般の調査・研究に従事している。
ページの終わりです