TarantoolとMicrosoft Azureの競合製品を比較する

画像



Tarantool-NoSQLDBMS。Mail.Ruグループで開発され、広く使用されています。 使用量は、出版物で結論付けることができます。





最近、Mail.Ru Groupは、Microsoft Azure用にTarantoolがプリインストールされた仮想マシンをリリースしました。





Microsoft AzureでTarantoolが他の同様のオファー(Azure Redis Cache、Bitnami Memcached 、Aerospike、 VoltDB)と比較してどれだけうまく機能するかを確認することにしました。 「良い」という言葉は、「高速」を意味します。つまり、1秒あたりの処理済みリクエスト数(スループット、RPS)を比較します。



Azure Redisキャッシュ



非SSLポートを含む「Basic C4」レベル(13 GB)のAzure Redis Cacheインスタンスが必要です(正直な比較のためにSSLは必要ありません)。 レプリケーションを除外するには、基本レベルを使用する必要があります。 Azure Redis Cacheはサービスとして提供されており、仮想マシンにはアクセスできません。 彼がどのように構成されているかはわかりませんが、影響を与えることはできません。 私たちのサイズのRedis Cacheの推定コストは、1か月あたり9765ルーブルです。



タランツールVM



14 GBのHDDを備えたTarantool VM Standard D11仮想マシンが1台必要です。 この構成では、1か月あたり9067ルーブルかかります。 対応する設定がRedisに対して有効になっているかどうかがわからないため、Tarantoolを2つのモードでテストします。 先書きログを有効にして(データの永続化のため)、無効にします。



/etc/tarantool/instances.enabled/example.luaの記録モードを変更するには、wal_modeの設定を変更します(WALなしでの作業、WALでの書き込み、fsyncは非常に特殊な動作モードであり、テストしません)。



Tarantoolは、たとえばRedisとは異なり、TREEインデックスを持っていますが、equalとequalを比較する必要があるため、HASHインデックスを使用しました。



Memcached



テストでは、 BitnamiからMemnachedプリインストールされた標準のD11仮想マシンイメージを使用しました。



Azure Marketplaceには別のMemcachedがあります-Redis Labsのクラウ​​ドサービスですが、米国でのみ利用可能であり、うまくいきませんでした。



仮想マシンを展開した後、memcached.conf構成ファイルで認証を無効にしました(オプション-S)。



Memcachedは、データの永続性を維持する方法を知りません。



エアロスパイク



Aerospikeについては、Azure Marketplace( 公式 D11)から公式画像を取得しました。



Voltdb



しかし、Azure MarketplaceのVoltDBはそうではありません。 クリーンな仮想マシン (Ubuntu 14.04 LTS)を取得し、ソースから手動でインストールする必要がありました 。 しかし、1秒あたりのリクエスト数を含むライブグラフを含む「すぐに使える」Web管理者は、驚きました。



同期非同期テスト



「同期-非同期」テストを実行しようとします。つまり、インターフェイスは同期になりますが、内部では非同期に接続を処理します。 このタイプのテストでは、複数の同期クライアントの単一の接続を介して作業をシミュレートできます。 Redis Cache、Tarantool VM、およびMemcachedのテストの識別に関する疑念を排除するために、抽象クラスNoSQLConnectionのすべての共通ロジックを取り出し 、そこからTarantoolConnectionRedisConnectionおよびMemcachedConnectionを継承しますソースを参照)。



クラスには2つのキュー(通常の標準::リスト) -OutputQueue (ソケットに送信)とInputQueue (ソケットから受信)、およびSendThreadFunc メソッドReceiveThreadFuncメソッドがあり 、これらは別々のスレッドで起動され、対応する空でないキューがある場合は、送信/ SendメソッドとReceiveメソッドを使用してバッチで情報を受信します(純粋仮想、相続人に実装)。



同期インターフェースは、要求をOutputQueueに入れ、 InputQueueで応答を待つDoSyncQueryメソッドで表されます。 テスト仮想は、十分に強力(標準D3を使用)であり、データベースに地理的に近い(場所「米国西部地域」を使用)である必要があります。



AerospikeおよびVoltDBクライアントライブラリの特別な構造(組み込みのイベントループ)のため、それらのテストは別々に作成されました。



ステップ1最大10個のクライアントフローの範囲では、ボリュームは完全同期モードの動作に近づいています(実際には1つのストリームが1つです)。 グラフは、ほぼ直線的な成長を示しています。 RedisとMemcachedはほぼ同等のパフォーマンスを提供し、Tarantoolはより高速で、Aerospikeは最速ですが、逆にVoltDBは最も低速です。











次のグラフは、Tarantool、Redis、Memcached、線形成長が継続し、AerospikeとVoltDBが異なる値で10刻みで最大100スレッドです。











次に、 100スレッド単位で1000に進みます 。 成長はどこでも遅くなりますが、Memcachedの場合は完全に停止します。











最後に、 1000単位で最大8000スレッドに進みます 。 成長は止まります。 4000クライアントの後、Memcachedは動作を停止します-接続を閉じるため、テストできません。 VoltDBは3,000クライアントでさらに早く死にます。











その結果、高負荷でのTarantoolのリーダーシップが見られます(より小さなAerospikeでは、まだ高速です)。



同期テストはどうですか?



そして、ここではすべてが簡単です。 1つのスレッドで同期非同期テストを実行すると、明らかに同期になります。 しかし、多くの顧客がいる場合は、多くの接続が必要になります...それでは、並行していくつかのテストを実行し、結果をまとめます。



AerospikeとVoltDBは、このモードではテストされていません。











同期テストには特定の「天井」があり、これは同期-非同期接続の天井よりも低いことがわかります。 この上限は、ネットワークのオーバーヘッドが原因です。



価格比較



Tarantool、Memcached、Aerospike、およびVoltDb自体は無料で、それらが実行されている仮想マシンに対してのみ料金を支払う必要があります。 標準D11(14 GBのRAM)を使用しました。これは1か月あたり9067ルーブルです。 Azure Redis Cacheは少し高価です-基本的なC4インスタンス(13 GBのRAM)で1か月あたり9765ルーブルです。 視覚化。







何も明確ではないことに同意しますか? 価格はほぼ同じです...ただし、前に見たように、これらのデータベースのパフォーマンスは異なります。 1か月あたりのコストではなく、10億リクエストごとのコストを表現してみましょう。 最初に、1000クライアントで10億の書き込みリクエストにかかるコストを見てみましょう。







VoltDBはここでは明示的な部外者です。 削除します。







次に、AerospikeとMemcachedを削除して、近くのリーダーを調べます。







そして今、100クライアントで読み取り要求をカウントする場合、コストはどのように変化しますか。







リーダーだけを残します。







結論



テスト中、同期非同期テストのテストプロセスにより、同期モードでTarantoolプロセスの負荷が最大70%、最大100%になりました。 すべてのグラフで、WALモードに関係なく、Tarantool VMは競合他社よりも優れていることが証明されました。 WALの有無は、Tarantoolからの読み取り時にディスクが使用されないため、Tarantoolからの読み取り速度には影響しません(読み取りグラフのオレンジとグレーの曲線は同じです)。 さらに、Tarantool VMは、時間単位(月単位)および要求単位の両方で最も安価なソリューションであることが判明しました。



All Articles