TOP Feature

k2hdkcとはなんですか?

K2HDKC (K2Hash based Distributed Kvs Cluster) は、Yahoo! JAPANオリジナルのNoSQL(key value store)ライブラリk2hashをベースとしたオープンソースの分散KVS(Key Value Store)です。

背景

Yahoo! JAPANではさまざまな分散KVS製品を使っていますが、K2HDKCは、K2HASHをベースに、高速、高可用性、拡張性、低メンテナンスコストなどを目的として開発されました。
K2HDKCという分散KVSを作ることで、K2HASH の性能とCHMPX のスケーラビリティと冗長性を維持しつつ、運用コストをさげることにも成功しました。
K2HASHCHMPX は、2016年にすでにオープンソース化されている製品です。

K2HASH

大量のキーやデータを扱える、高速かつオリジナルな機能を持ったkvsライブラリ

CHMPX

ネットワークをまたぐプロセス間におけるバイナリ通信を行うための通信ミドルウエア

概要

K2HDKCクラスタは、複数のサーバーノードで構成されています。K2HDKCへアクセスするクライアントプログラムからはK2HDKCライブラリのAPIを利用するだけでアクセスできる構成となっています(図1を参照)。

Figure.1 図1. 概要

サーバーノードの構成

サーバーノードは、K2HASHデータ、CHMPX(サーバーノード)、および K2HDKC プログラムで構成されています。

CHMPX(サーバーノード)

K2HDKC プログラムおよびK2HASHへの操作はCHMPXプロセスを通した通信コマンドで実現されています。

K2HDKC

K2HDKCプログラムが、CHMPX(サーバーノード)からの通信コマンドを処理し、K2HASHファイルを管理し、操作します。

K2HASH

K2HASHファイルにはデータが保存されます。

クライアントプログラムの構成

クライアントは、2つのコンポーネントで構成されます。

CHMPX

CHMPX プロセスは、クラスタのサーバーノードの障害があった場合でも、耐久性のある通信を提供します。

K2HDKCライブラリを利用したクライアントプロセス

CHMPX を通して通信コマンドでK2HDKCクラスタの操作を行います。

可用性

K2HDKCクラスタ内のすべてのノードは同じ役割を持ち、データはK2HDKCクラスタのノード間で均等に分散されます。

hash値 による分散

データの複製

障害発生時

K2HDKCクラスタのノードに障害が発生し、クライアントプログラムがメインサーバーノードに到達できない場合、自動的にレプリカノードから目的のデータにアクセスできます。
レプリカノードの数を調整することにより、高可用性を実現できます。

一貫性

メインサーバーノードの障害復旧後、データ一貫性を保証するために、メインサーバーノードは復旧後に自動的にレプリカノードからデータを復元します。この機能を Automatic Merge と呼びます。
補足:CHMPXのREPLICA値を1以上の設定が可能です。 2の場合、レプリカノードは2ノードになります。
K2HDKCクラスタのノードを増減する場合、各サーバーノードが保持するデータは自動的に再配置されます。この機能をAutomatic Scaling機能と呼びます。

ストレージ

K2HDKCクラスタが使うストレージは、K2HASH で実装されています。
K2HDKCと、K2HASH は密接に関係しています。

K2HASHの3種類のデータ保管方法

K2HDKCクラスタのデータの保管方法は、K2HASH に依存してます。
K2HASHは、データを以下の3種類のいずれかの方法で保管することができ、K2HDKCクラスタでも同様に3つの方法が提供されます。

メモリ

フルマッピングファイル

部分的なマッピングファイル

TOP Feature