blob: ab3116f067dfa7d2453d86e4b2d1b9dd8c052649 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pegasus | Benchmark</title>
<link rel="stylesheet" href="/zh/assets/css/app.css">
<link rel="shortcut icon" href="/zh/assets/images/favicon.ico">
<link rel="stylesheet" href="/zh/assets/css/utilities.min.css">
<link rel="stylesheet" href="/zh/assets/css/docsearch.v3.css">
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/all.min.js"></script>
<script src="/assets/js/docsearch.v3.js"></script>
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Benchmark | Pegasus</title>
<meta name="generator" content="Jekyll v4.3.3" />
<meta property="og:title" content="Benchmark" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="测试工具及配置" />
<meta property="og:description" content="测试工具及配置" />
<meta property="og:site_name" content="Pegasus" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2024-04-22T06:39:52+00:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Benchmark" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-04-22T06:39:52+00:00","datePublished":"2024-04-22T06:39:52+00:00","description":"测试工具及配置","headline":"Benchmark","mainEntityOfPage":{"@type":"WebPage","@id":"/overview/benchmark/"},"url":"/overview/benchmark/"}</script>
<!-- End Jekyll SEO tag -->
</head>
<body>
<nav class="navbar is-primary">
<div class="container">
<!--container will be unwrapped when it's in docs-->
<div class="navbar-brand">
<a href="/zh/" class="navbar-item ">
<!-- Pegasus Icon -->
<img src="/assets/images/pegasus.svg">
</a>
<div class="navbar-item">
<a href="/zh/docs" class="button is-primary is-outlined is-inverted">
<span class="icon"><i class="fas fa-book"></i></span>
<span>Docs</span>
</a>
</div>
<div class="navbar-item is-hidden-desktop">
<!--A simple language switch button that only supports zh and en.-->
<!--IF its language is zh, then switches to en.-->
<!--If you don't want a url to be relativized, you can add a space explicitly into the href to
prevents a url from being relativized by polyglot.-->
<a class="button is-primary is-outlined is-inverted" href=" /overview/benchmark/"><strong>En</strong></a>
</div>
<a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu">
<!-- Appears in mobile mode only -->
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div class="navbar-menu" id="navMenu">
<div class="navbar-end">
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable ">
<a href=""
class="navbar-link ">
<span class="icon" style="margin-right: .25em">
<i class="fas fa-users"></i>
</span>
<span>
ASF
</span>
</a>
<div class="navbar-dropdown">
<a href="https://www.apache.org/"
class="navbar-item ">
Foundation
</a>
<a href="https://www.apache.org/licenses/"
class="navbar-item ">
License
</a>
<a href="https://www.apache.org/events/current-event.html"
class="navbar-item ">
Events
</a>
<a href="https://www.apache.org/foundation/sponsorship.html"
class="navbar-item ">
Sponsorship
</a>
<a href="https://www.apache.org/security/"
class="navbar-item ">
Security
</a>
<a href="https://privacy.apache.org/policies/privacy-policy-public.html"
class="navbar-item ">
Privacy
</a>
<a href="https://www.apache.org/foundation/thanks.html"
class="navbar-item ">
Thanks
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable ">
<a href="/zh/community"
class="navbar-link ">
<span class="icon" style="margin-right: .25em">
<i class="fas fa-user-plus"></i>
</span>
<span>
开源社区
</span>
</a>
<div class="navbar-dropdown">
<a href="/zh/community/#contact-us"
class="navbar-item ">
联系我们
</a>
<a href="/zh/community/#contribution"
class="navbar-item ">
参与贡献
</a>
<a href="https://cwiki.apache.org/confluence/display/PEGASUS/Coding+guides"
class="navbar-item ">
编码指引
</a>
<a href="https://github.com/apache/incubator-pegasus/issues?q=is%3Aissue+is%3Aopen+label%3Atype%2Fbug"
class="navbar-item ">
Bug 追踪
</a>
<a href="https://cwiki.apache.org/confluence/display/INCUBATOR/PegasusProposal"
class="navbar-item ">
Apache 提案
</a>
</div>
</div>
<a href="/zh/blogs"
class="navbar-item ">
<span class="icon" style="margin-right: .25em">
<i class="fas fa-rss"></i>
</span>
<span>Blog</span>
</a>
<a href="/zh/docs/downloads"
class="navbar-item ">
<span class="icon" style="margin-right: .25em">
<i class="fas fa-fire"></i>
</span>
<span>版本发布</span>
</a>
</div>
<div class="navbar-item is-hidden-mobile">
<!--A simple language switch button that only supports zh and en.-->
<!--IF its language is zh, then switches to en.-->
<!--If you don't want a url to be relativized, you can add a space explicitly into the href to
prevents a url from being relativized by polyglot.-->
<a class="button is-primary is-outlined is-inverted" href=" /overview/benchmark/"><strong>En</strong></a>
</div>
</div>
</div>
</nav>
<section class="section">
<div class="container">
<div class="columns is-multiline">
<div class="column is-one-fourth">
<aside class="menu">
<p class="menu-label"></p>
<ul class="menu-list">
<li>
<a href="/zh/overview"
class="">
概览
</a>
</li>
<li>
<a href="/zh/overview/background"
class="">
项目背景
</a>
</li>
<li>
<a href="/zh/overview/architecture"
class="">
系统架构
</a>
</li>
<li>
<a href="/zh/overview/data-model"
class="">
数据模型
</a>
</li>
<li>
<a href="/zh/overview/benchmark"
class="">
性能测试
</a>
</li>
<li>
<a href="/zh/docs/build/compile-by-docker"
class="">
安装构建
</a>
</li>
<li>
<a href="/zh/overview/onebox"
class="">
体验 Onebox 集群
</a>
</li>
</ul>
</aside>
</div>
<div class="column is-half">
<div class="content">
<h1 id="性能测试">性能测试</h1>
<h2 id="测试工具及配置">测试工具及配置</h2>
<ul>
<li>使用<a href="https://github.com/xiaomi/pegasus-ycsb">YCSB</a>中的Pegasus Java Client进行测试</li>
<li>设置<code class="language-plaintext highlighter-rouge">requestdistribution=zipfian</code>,可以理解为遵守80/20原则的数据分布,即80%的访问都集中在20%的内容上。参考<a href="https://en.wiktionary.org/wiki/Zipfian_distribution#English">Zipfian distribution</a>.</li>
</ul>
<h3 id="测试结果说明">测试结果说明</h3>
<ul>
<li>Case:分为只读测试<code class="language-plaintext highlighter-rouge">Read</code>、只写测试<code class="language-plaintext highlighter-rouge">Write</code>、读写混合测试<code class="language-plaintext highlighter-rouge">Read &amp; Write</code></li>
<li>threads:写为 <code class="language-plaintext highlighter-rouge">a * b</code> 的形式,其中<code class="language-plaintext highlighter-rouge">a</code>表示client的实例数,即YCSB是运行在几个节点上的。<code class="language-plaintext highlighter-rouge">b</code>表示线程数,即YCSB中的<code class="language-plaintext highlighter-rouge">threadcount</code>配置项的值</li>
<li>RW Ratio:读写操作比,即YCSB配置中的<code class="language-plaintext highlighter-rouge">readproportion</code><code class="language-plaintext highlighter-rouge">updateproportion</code><code class="language-plaintext highlighter-rouge">insertproportion</code>的比值</li>
<li>duration:测试总时长,单位小时</li>
<li>R-QPS:每秒读操作数</li>
<li>R-AVG-Lat, R-P99-Lat, R-P999-Lat:读操作的平均,P99,P999延迟,单位微秒</li>
<li>W-QPS:每秒写操作数</li>
<li>W-AVG-Lat, W-P99-Lat, W-P999-Lat:写操作的平均,P99,P999延迟,单位微秒</li>
</ul>
<h2 id="各版本的性能测试">各版本的性能测试</h2>
<h3 id="240">2.4.0</h3>
<h4 id="测试环境">测试环境</h4>
<h5 id="硬件配置">硬件配置</h5>
<ul>
<li>CPU:Intel® Xeon® Silver 4210 * 2 2.20 GHz / 3.20 GHz</li>
<li>内存:128 GB</li>
<li>磁盘:SSD 480 GB * 8</li>
<li>网卡:带宽 10 Gb</li>
</ul>
<h5 id="集群规模">集群规模</h5>
<ul>
<li>replica server节点数:5</li>
<li>测试表的Partition数:64</li>
</ul>
<h4 id="测试结果">测试结果</h4>
<ul>
<li>单条数据大小:1KB</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 15</td>
<td>0:1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>56,953</td>
<td>787</td>
<td>1,786</td>
</tr>
<tr>
<td>Read</td>
<td>3 * 50</td>
<td>1:0</td>
<td>360,642</td>
<td>413</td>
<td>984</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>1:1</td>
<td>62,572</td>
<td>464</td>
<td>5,274</td>
<td>62,561</td>
<td>985</td>
<td>3,764</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>16,844</td>
<td>372</td>
<td>3,980</td>
<td>50,527</td>
<td>762</td>
<td>1,551</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:30</td>
<td>1,861</td>
<td>381</td>
<td>3,557</td>
<td>55,816</td>
<td>790</td>
<td>1,688</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>3:1</td>
<td>140,484</td>
<td>351</td>
<td>3,277</td>
<td>46,822</td>
<td>856</td>
<td>2,044</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 50</td>
<td>30:1</td>
<td>336,106</td>
<td>419</td>
<td>1,221</td>
<td>11,203</td>
<td>763</td>
<td>1,276</td>
</tr>
</tbody>
</table>
<h3 id="230">2.3.0</h3>
<h4 id="测试环境-1">测试环境</h4>
<p>同2.4.0</p>
<h4 id="测试结果-1">测试结果</h4>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 15</td>
<td>0:1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>42,386</td>
<td>1,060</td>
<td>6,628</td>
</tr>
<tr>
<td>Read</td>
<td>3 * 50</td>
<td>1:0</td>
<td>331,623</td>
<td>585</td>
<td>2,611</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>1:1</td>
<td>38,766</td>
<td>1,067</td>
<td>15,521</td>
<td>38,774</td>
<td>1,246</td>
<td>7,791</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>13,140</td>
<td>819</td>
<td>11,460</td>
<td>39,428</td>
<td>863</td>
<td>4,884</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:30</td>
<td>1,552</td>
<td>937</td>
<td>9,524</td>
<td>46,570</td>
<td>930</td>
<td>5,315</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>3:1</td>
<td>93,746</td>
<td>623</td>
<td>6,389</td>
<td>31,246</td>
<td>996</td>
<td>5,543</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 50</td>
<td>30:1</td>
<td>254,534</td>
<td>560</td>
<td>2,627</td>
<td>8,481</td>
<td>901</td>
<td>3,269</td>
</tr>
</tbody>
</table>
<h3 id="1123">1.12.3</h3>
<h4 id="测试环境-2">测试环境</h4>
<h5 id="硬件配置-1">硬件配置</h5>
<ul>
<li>CPU:Intel® Xeon® CPU E5-2620 v3 @ 2.40 GHz</li>
<li>内存:128 GB</li>
<li>磁盘:SSD 480 GB * 8</li>
<li>网卡:带宽 10 Gb</li>
</ul>
<p>其他测试环境同2.4.0</p>
<h4 id="测试结果-2">测试结果</h4>
<ul>
<li>单条数据大小:320B</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>0:1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>41,068</td>
<td>728</td>
<td>3,439</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>16,011</td>
<td>242</td>
<td>686</td>
<td>48,036</td>
<td>851</td>
<td>4,027</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>279,818</td>
<td>295</td>
<td>873</td>
<td>9,326</td>
<td>720</td>
<td>3,355</td>
</tr>
</tbody>
</table>
<ul>
<li>单条数据大小:1KB</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>0:1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>40,732</td>
<td>1,102</td>
<td>4,216</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>14,355</td>
<td>476</td>
<td>2,855</td>
<td>38,547</td>
<td>1,016</td>
<td>4,135</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 20</td>
<td>3:1</td>
<td>87,480</td>
<td>368</td>
<td>4,170</td>
<td>29,159</td>
<td>940</td>
<td>4,170</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 50</td>
<td>1:0</td>
<td>312,244</td>
<td>479</td>
<td>1,178</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<h3 id="1122">1.12.2</h3>
<h4 id="测试环境-3">测试环境</h4>
<p>测试环境同 1.12.3</p>
<h4 id="测试结果-3">测试结果</h4>
<ul>
<li>单条数据大小:320B</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>0:1</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>40,439</td>
<td>739</td>
<td>2,995</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>16,022</td>
<td>309</td>
<td>759</td>
<td>48,078</td>
<td>830</td>
<td>3,995</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>244,392</td>
<td>346</td>
<td>652</td>
<td>8,137</td>
<td>731</td>
<td>2,995</td>
</tr>
</tbody>
</table>
<h3 id="1116">1.11.6</h3>
<h4 id="测试环境-4">测试环境</h4>
<ul>
<li>测试接口:<code class="language-plaintext highlighter-rouge">multi_get()</code><code class="language-plaintext highlighter-rouge">batch_set()</code></li>
<li>一个hashkey下包含3条sortkey数据</li>
<li>单次<code class="language-plaintext highlighter-rouge">batch_set()</code>调用设置3个hashkey</li>
<li>单条数据大小:3KB</li>
<li>测试表的Partition数:128</li>
<li>rocksdb_block_cache_capacity = 40G</li>
<li>其他测试环境同 1.12.3</li>
</ul>
<h4 id="测试结果-4">测试结果</h4>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>duration</th>
<th>Max cache hit rate</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>R-P999-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
<th>W-P999-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>20:1</td>
<td>1</td>
<td>10%</td>
<td>150K</td>
<td>263</td>
<td>808</td>
<td>12,615</td>
<td>8k</td>
<td>1,474</td>
<td>7,071</td>
<td>26,342</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 7</td>
<td>20:1</td>
<td>2</td>
<td>17%</td>
<td>75K</td>
<td>226</td>
<td>641</td>
<td>5,331</td>
<td>4K</td>
<td>1,017</td>
<td>4,583</td>
<td>14,983</td>
</tr>
</tbody>
</table>
<h3 id="1111">1.11.1</h3>
<h4 id="测试环境-5">测试环境</h4>
<p>测试环境同 1.12.3</p>
<h4 id="测试结果-5">测试结果</h4>
<ul>
<li>单条数据大小:20KB * 2副本</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>duration</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 10</td>
<td>0:1</td>
<td>0.98</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>8,439</td>
<td>3,557</td>
<td>32,223</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>0.66</td>
<td>3,159</td>
<td>4,428</td>
<td>34,495</td>
<td>9,472</td>
<td>3,251</td>
<td>25,071</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>1.25</td>
<td>64,358</td>
<td>1,330</td>
<td>13,975</td>
<td>2,145</td>
<td>1,699</td>
<td>6,467</td>
</tr>
<tr>
<td>Read</td>
<td>6 * 100</td>
<td>1:0</td>
<td>0.91</td>
<td>30,491</td>
<td>3,274</td>
<td>12,167</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<ul>
<li>单条数据大小:20KB * 3副本</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>duration</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 10</td>
<td>0:1</td>
<td>1.40</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>5,919</td>
<td>5,063</td>
<td>40,639</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>1.11</td>
<td>1,876</td>
<td>6,927</td>
<td>44,639</td>
<td>5,632</td>
<td>5,612</td>
<td>76,095</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>1.63</td>
<td>49,341</td>
<td>1,751</td>
<td>21,615</td>
<td>1,644</td>
<td>1,935</td>
<td>11,159</td>
</tr>
<tr>
<td>Read</td>
<td>6 * 100</td>
<td>1:0</td>
<td>0.91</td>
<td>25,456</td>
<td>3,923</td>
<td>15,679</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<ul>
<li>单条数据大小:10KB * 2副本</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>duration</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 10</td>
<td>0:1</td>
<td>0.78</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>14,181</td>
<td>2,110</td>
<td>15,468</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>0.52</td>
<td>4,024</td>
<td>5,209</td>
<td>41247</td>
<td>12,069</td>
<td>1,780</td>
<td>14,495</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>0.76</td>
<td>105,841</td>
<td>816</td>
<td>9613</td>
<td>3,527</td>
<td>1,107</td>
<td>4,155</td>
</tr>
<tr>
<td>Read</td>
<td>6 * 100</td>
<td>1:0</td>
<td>1.04</td>
<td>162,150</td>
<td>1,868</td>
<td>6733</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<ul>
<li>单条数据大小:10KB * 3副本</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>duration</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 10</td>
<td>0:1</td>
<td>1.16</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>9,603</td>
<td>3,115</td>
<td>20,468</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>0.69</td>
<td>3,043</td>
<td>5,657</td>
<td>38,783</td>
<td>9,126</td>
<td>3,140</td>
<td>27,956</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>0.89</td>
<td>90,135</td>
<td>937</td>
<td>13,324</td>
<td>3,002</td>
<td>1,185</td>
<td>4,816</td>
</tr>
<tr>
<td>Read</td>
<td>6 * 100</td>
<td>1:0</td>
<td>1.08</td>
<td>154,869</td>
<td>1,945</td>
<td>7,757</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<h3 id="1110">1.11.0</h3>
<h4 id="测试环境-6">测试环境</h4>
<p>测试环境同 1.12.3</p>
<h4 id="测试结果-6">测试结果</h4>
<ul>
<li>单条数据大小:320B</li>
</ul>
<table>
<thead>
<tr>
<th>Case</th>
<th>threads</th>
<th>Read/Write</th>
<th>duration</th>
<th>R-QPS</th>
<th>R-AVG-Lat</th>
<th>R-P99-Lat</th>
<th>W-QPS</th>
<th>W-AVG-Lat</th>
<th>W-P99-Lat</th>
</tr>
</thead>
<tbody>
<tr>
<td>Write</td>
<td>3 * 10</td>
<td>0:1</td>
<td>1.89</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>44,039</td>
<td>679</td>
<td>3,346</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 15</td>
<td>1:3</td>
<td>1.24</td>
<td>16,690</td>
<td>311</td>
<td>892</td>
<td>50,076</td>
<td>791</td>
<td>4,396</td>
</tr>
<tr>
<td>Read &amp; Write</td>
<td>3 * 30</td>
<td>30:1</td>
<td>1.04</td>
<td>311,633</td>
<td>264</td>
<td>511</td>
<td>10,388</td>
<td>619</td>
<td>2,468</td>
</tr>
<tr>
<td>Read</td>
<td>6 * 100</td>
<td>1:0</td>
<td>0.17</td>
<td>978,884</td>
<td>623</td>
<td>1,671</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Read</td>
<td>12 * 100</td>
<td>1:0</td>
<td>0.28</td>
<td>1,194,394</td>
<td>1,003</td>
<td>2,933</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<h2 id="不同场景下的性能测试">不同场景下的性能测试</h2>
<p>如无特殊说明,测试环境如下:</p>
<ul>
<li>测试环境同 1.12.3</li>
<li>单条数据大小:1KB</li>
<li>客户端:
<ul>
<li>节点数:3</li>
<li>版本号:1.11.10-thrift-0.11.0-inlined-release</li>
</ul>
</li>
<li>服务端:
<ul>
<li>节点数:5</li>
<li>版本号:1.12.3</li>
<li>表分片数:64</li>
<li>配置:<code class="language-plaintext highlighter-rouge">rocksdb_limiter_max_write_megabytes_per_sec = 500</code>, <code class="language-plaintext highlighter-rouge">rocksdb_limiter_enable_auto_tune = false</code></li>
</ul>
</li>
</ul>
<h3 id="集群吞吐能力">集群吞吐能力</h3>
<p>该项测试旨在对比在同一集群在不同client请求吞吐下的延迟变化。</p>
<blockquote>
<p>注意:未开启RocksDB限速</p>
</blockquote>
<p><img src="/assets/images/benchmark/5-node-write.png" alt="5-node-write" /></p>
<p><img src="/assets/images/benchmark/5-node-read.png" alt="5-node-read" /></p>
<p>由上图可知,写最大QPS大约为43K,读最大QPS大约370K,你可以根据吞吐估算对应的延迟。</p>
<h3 id="是否开启rocksdb限速">是否开启RocksDB限速</h3>
<blockquote>
<p>测试场景为:测试<code class="language-plaintext highlighter-rouge">threads</code>配置为:3 * 20,IPS大约为44K</p>
</blockquote>
<p>Pegasus底层采用RocksDB做存储引擎,当数据写入增多,会触发更多的compaction操作,占用更多的磁盘IO,出现更多的毛刺现象。该项测试展示了开启RocksDB的限速后,可以降低compaction负载,从而显著的降低毛刺现象。</p>
<p>下图分别展示了三种场景的IO使用率和写P99延迟情况:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">rocksdb_limiter_max_write_megabytes_per_sec = 0</code></li>
<li><code class="language-plaintext highlighter-rouge">rocksdb_limiter_max_write_megabytes_per_sec = 500</code> and <code class="language-plaintext highlighter-rouge">rocksdb_limiter_enable_auto_tune = false</code></li>
<li>
<p><code class="language-plaintext highlighter-rouge">rocksdb_limiter_max_write_megabytes_per_sec = 500</code> and <code class="language-plaintext highlighter-rouge">rocksdb_limiter_enable_auto_tune = true</code></p>
</li>
<li>
<p>磁盘IO占用:
<img src="/assets/images/benchmark/io-no-limit.png" alt="io-no-limit" />
<img src="/assets/images/benchmark/io-limit-500MB.png" alt="io-limit-500MB" />
<img src="/assets/images/benchmark/io-limit-500MB-auto.png" alt="io-limit-500MB-auto" /></p>
</li>
<li>P99延迟:
<img src="/assets/images/benchmark/no-limit-set.png" alt="no-limit-set" />
<img src="/assets/images/benchmark/500-limit-set.png" alt="500-limit-set" />
<img src="/assets/images/benchmark/500-limit-auto-set.png" alt="500-limit-auto-set" /></li>
</ul>
<p>可以发现,开启RocksDB限速后,磁盘IO使用率得到降低,写延迟的毛刺现象也被大大缓解。</p>
<p><img src="/assets/images/benchmark/limit.png" alt="limit" />
我们从YCSB的测试结果也可以看到:</p>
<ul>
<li>开启限速后,吞吐提升了约5%</li>
<li>开启限速并开启auto-tune后,吞吐提升了约20%</li>
<li>开启限速后,仅对极端情况下的延迟(P999/P9999)有显著改善作用,但对于大部分请求来说,改善并不明显</li>
</ul>
<p>但是<strong>需要注意</strong>的是:</p>
<p>auto-tune功能在单条数据较大的场景下可能会引发<a href="https://github.com/facebook/rocksdb/wiki/Write-Stalls">write stall</a>,请合理评估是否在你的环境中开启auto-tune。</p>
<h3 id="集群规模-1">集群规模</h3>
<p>该项测试旨在观察,不同replica server数量对读写吞吐的影响。</p>
<blockquote>
<p>测试场景为:测试<code class="language-plaintext highlighter-rouge">Case</code>为只读和只写</p>
</blockquote>
<p><img src="/assets/images/benchmark/node-qps-write.png" alt="node-write" /></p>
<p><img src="/assets/images/benchmark/node-qps-read.png" alt="node-read" /></p>
<p>由图中可以看到:</p>
<ul>
<li>扩容对写吞吐的提升要优于读吞吐的提升</li>
<li>扩容带来的吞吐提升并不是线性的</li>
</ul>
<p>你可以根据该项测试估计不同集群规模所能承载的吞吐量</p>
<h3 id="不同的表分片数">不同的表分片数</h3>
<p>该项测试旨在观察,表的不同分片对吞吐的影响。</p>
<blockquote>
<p>测试场景为:
仅读:<code class="language-plaintext highlighter-rouge">threads</code>配置为:3 * 50
仅写:<code class="language-plaintext highlighter-rouge">threads</code>配置为:3 * 40</p>
</blockquote>
<p><img src="/assets/images/benchmark/partition.png" alt="partition" /></p>
<p>由图中可以看到:</p>
<ul>
<li>增加分片可以提高读吞吐</li>
<li>但是降低了写吞吐</li>
</ul>
<p>所以请根据你的业务需求评估表分片数。</p>
<p>除此之外,若分片数过小,可能会导致单分片过大,磁盘分布倾斜等问题。在生产环境中,如无特别需求,建议单分片大小保持在10GB以内。</p>
</div>
</div>
<div class="column is-one-fourth is-hidden-mobile" style="padding-left: 3rem">
<p class="menu-label">
<span class="icon">
<i class="fa fa-bars" aria-hidden="true"></i>
</span>
本页导航
</p>
<ul class="menu-list">
<li><a href="#性能测试">性能测试</a>
<ul>
<li><a href="#测试工具及配置">测试工具及配置</a>
<ul>
<li><a href="#测试结果说明">测试结果说明</a></li>
</ul>
</li>
<li><a href="#各版本的性能测试">各版本的性能测试</a>
<ul>
<li><a href="#240">2.4.0</a>
<ul>
<li><a href="#测试环境">测试环境</a>
<ul>
<li><a href="#硬件配置">硬件配置</a></li>
<li><a href="#集群规模">集群规模</a></li>
</ul>
</li>
<li><a href="#测试结果">测试结果</a></li>
</ul>
</li>
<li><a href="#230">2.3.0</a>
<ul>
<li><a href="#测试环境-1">测试环境</a></li>
<li><a href="#测试结果-1">测试结果</a></li>
</ul>
</li>
<li><a href="#1123">1.12.3</a>
<ul>
<li><a href="#测试环境-2">测试环境</a>
<ul>
<li><a href="#硬件配置-1">硬件配置</a></li>
</ul>
</li>
<li><a href="#测试结果-2">测试结果</a></li>
</ul>
</li>
<li><a href="#1122">1.12.2</a>
<ul>
<li><a href="#测试环境-3">测试环境</a></li>
<li><a href="#测试结果-3">测试结果</a></li>
</ul>
</li>
<li><a href="#1116">1.11.6</a>
<ul>
<li><a href="#测试环境-4">测试环境</a></li>
<li><a href="#测试结果-4">测试结果</a></li>
</ul>
</li>
<li><a href="#1111">1.11.1</a>
<ul>
<li><a href="#测试环境-5">测试环境</a></li>
<li><a href="#测试结果-5">测试结果</a></li>
</ul>
</li>
<li><a href="#1110">1.11.0</a>
<ul>
<li><a href="#测试环境-6">测试环境</a></li>
<li><a href="#测试结果-6">测试结果</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#不同场景下的性能测试">不同场景下的性能测试</a>
<ul>
<li><a href="#集群吞吐能力">集群吞吐能力</a></li>
<li><a href="#是否开启rocksdb限速">是否开启RocksDB限速</a></li>
<li><a href="#集群规模-1">集群规模</a></li>
<li><a href="#不同的表分片数">不同的表分片数</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="content is-small has-text-centered">
<div style="margin-bottom: 20px;">
<a href="http://incubator.apache.org">
<img src="/assets/images/egg-logo.png"
width="15%"
alt="Apache Incubator"/>
</a>
</div>
Copyright &copy; 2023 <a href="http://www.apache.org">The Apache Software Foundation</a>.
Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version
2.0</a>.
<br><br>
Apache Pegasus is an effort undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the Apache Incubator. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure, communications, and decision making process
have stabilized in a manner consistent with other successful ASF projects. While incubation status is
not necessarily a reflection of the completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.
<br><br>
Apache Pegasus, Pegasus, Apache, the Apache feather logo, and the Apache Pegasus project logo are either
registered trademarks or trademarks of The Apache Software Foundation in the United States and other
countries.
</div>
</div>
</footer>
<script src="/assets/js/app.js" type="text/javascript"></script>
</body>
</html>