Flareを使う(性能測定編)

当ブログをご覧のみなさまこんにちは。さくらインターネット研究所の大久保です。
今回はFlareのスループット測定を行いましたので、そちらについてご紹介をしたいと思います。

測定環境

今回の測定では、1台のストレージサーバに対して、負荷生成プログラムを動作させた多数のプロキシサーバからクエリを投げ、ストレージサーバ1台あたりのSet/Getスループットを測定します。

測定環境ですが、当研究所では以下のような構成でKVS評価用に50台のサーバを用意しております。

今回はそのうち42台のサーバを用いて測定を行いました。各役割のサーバの台数は以下の通りです。

役割台数
インデックスサーバ1台
ストレージサーバ1台
プロキシサーバ(負荷生成サーバ)40台

全てのサーバは同じものを設置しており、スペックは以下の通りです。

項目スペック
CPUXeon 2.0GHz (2Core)
Memory4GB
HDDSCSI 37GB
NIC1000Base-T
OSCentOS 5.4

サーバの設定

各サーバ上で起動するFlareの設定は以下の通りです。

  • インデックスサーバの設定
    data-dir = /home/admin/flare
    log-facility = local0
    server-name = 192.168.13.21

    monitor-threshold=3
    monitor-interval=1
    monitor-read-timeout=1000

  • ストレージサーバの設定(プロキシサーバも同じ)
    ※ server-nameは各サーバのIPアドレスに置き換える。

    data-dir = /home/admin/flare
    log-facility = local0
    storage-bucket-size = 16777216
    index-server-name = 192.168.13.21
    server-name = 192.168.13.22
  • インデックスサーバにてストレージサーバの役割設定
    % telnet localhost 12120
    node role 192.168.13.22 12121 master 1 0

負荷生成プログラム

以下のような負荷生成プログラムを40台のプロキシサーバにて10分間走らせ、各プロキシサーバで処理できたクエリ数を合計し、1秒間あたりに処理可能なクエリ数を計算します。

  • 負荷生成プログラム(set)
    #!/usr/bin/env perl

    use Cache::Memcached;

    $start = shift;die unless ($start =~ /^\d+$/);
    $end = shift; die unless ($end =~ /^\d+$/);

    my $a = Cache::Memcached->new({'servers' =>["127.0.0.1:12121"],'select_timeout' =>100.0,'connect_timeout' =>2.0});

    $value = "01234567890123456789012345678901234567890123456789";

    foreach ($start .. $end){
    $key = sprintf("test%08d",$_);
    unless ($a->set($key,$value)){
    warn "set failed $_\n";
    sleep(1);
    redo;
    }
    if ($_ % 1000 == 0){
    print "$_ done.\n";
    }
    }

  • 負荷生成プログラム(get)
    #!/usr/bin/env perl

    use Cache::Memcached;

    $max = shift;die unless ($max =~ /^\d+$/);

    my $a = Cache::Memcached->new({'servers' =>["127.0.0.1:12121"]});

    $value = "01234567890123456789012345678901234567890123456789";

    $count = 0;
    while(1){
    $key = sprintf("test%08d",int(rand($max)));
    unless ($data = $a->get($key)){
    warn "get failed $key\n";
    sleep(1);
    redo;
    }
    if ($data ne $value){
    warn "value inconsistent $key ->$data\n";
    }
    $count++;
    if ($count % 1000 == 0){
    print "$count done.\n";
    }
    }

キー名、値、レコード数は以下の通りとなります。

  • キー名:test00000000〜test03999999
  • 値:01234567890123456789012345678901234567890123456789 (50bytes)
  • レコード数:400万件

測定結果

比較のために、上記と同様の構成でmemcachedを用いた場合の測定も行いました。結果を以下に示します。

ソフトウェアSet[queries/sec]Get[queries/sec]
memcached80,838111,420
Flare31,93373,681

グラフにしたものが下図です。

memcachedは完全にオンメモリで動作しますので単純な比較はできませんが、Flareはmemcachedに比べ、Setは約1/2.5、Getについては約1/1.5の性能を有することがわかります。

まとめ

今回は1台のストレージサーバあたりのスループットをFlareとmemcachedで比較してみました。分散KVSではサーバを追加するだけで性能を簡単に増やすことができますので、クエリが均等に分散する理想状態においては、パーティションを2つに増やせば2倍、3つに増やせば3倍になるはずです。そこで、クエリがどの程度分散するかについて今後検証を行う予定です。

コメントをどうぞ

  

  

  


*

You can use these HTML tags

<a href=""title=""><abbr title=""><acronym title=""><b><blockquote cite=""><cite><code><del datetime=""><em><i><q cite=""><strike><strong><img localsrc=""alt="">