blob: 79462c0da0d3a69e527a72ba68a70b41a5172c5f [file] [log] [blame]
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Performance Reference Manual</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/</link><description>Recent content in Performance Reference Manual on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs3-V2: Application-Level Service Discovery Benchmark</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/benchmarking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/benchmarking/</guid><description>
&lt;h2 id="1-benchmark-conclusion">1 Benchmark Conclusion&lt;/h2>
&lt;p>Compared with 2.x version, Dubbo3 version&lt;/p>
&lt;ul>
&lt;li>Significantly improved service discovery resource utilization.
&lt;ul>
&lt;li>Compared with interface-level services, it is found that the resident memory of a single machine is reduced by 50%, and the GC consumption during the address change period is reduced by an order of magnitude (hundred times -&amp;gt; ten times)&lt;/li>
&lt;li>Comparing application-level services, it is found that the resident memory of a single machine is reduced by 75%, and the number of GCs tends to zero&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>The following is the detailed pressure measurement process and data&lt;/p>
&lt;h2 id="2-application-level-service-discovery-address-push-link">2 Application-level service discovery (address push link)&lt;/h2>
&lt;p>This part of the stress test data is given by the ICBC Dubbo team based on internal production data. The stress test process simulates the service discovery architecture of &amp;ldquo;production environment address + zookeeper&amp;rdquo;.&lt;/p>
&lt;h3 id="21-environment">2.1 Environment&lt;/h3>
&lt;p>| | Description |
| &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; |
| &lt;strong>Pressure test data&lt;/strong> | Provider&lt;br/>500 running instances✖️8interface✖️5protocol, that is, each provider registers 40 URLs with the registration center, a total of 20,000 URLs, and the length of each URL is about 1k characters. &lt;br/>&lt;br/>Registration center&lt;br/>2 independent zookeeper registration centers, service providers and consumers adopt parallel configuration. &lt;br/>&lt;br/>Consumer&lt;br/>Configure 1c2g, xmx=768, enable GC, subscribe from 2 registries, and call the service every 5 seconds. Run for 20 hours. |
| &lt;strong>Pressure test environment&lt;/strong> | Java version &amp;ldquo;1.8.0&amp;rdquo;&lt;br/>Java(TM) SE Runtime Environment (build pxa6480sr3fp12-20160919_01(SR3 FP12))&lt;br/>IBM J9 VM (Build 2.8, JRE 1.8 .0 Linux amd64-64 Compressed References 20160915_318796, JIT enabled, AOT enabled) |&lt;/p>
&lt;h3 id="22-data-analysis">2.2 Data Analysis&lt;/h3>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/performance/registry-mem.svg" alt="//imgs/v3/performance/registry-mem.svg">&lt;/p>
&lt;p>&lt;br />Figure 1 Changes in memory usage of the service discovery model&lt;br />&lt;br />&lt;/p>
&lt;ul>
&lt;li>Dubbo3 interface-level service discovery model, the resident memory is reduced by about 50% compared with version 2.x&lt;/li>
&lt;li>Dubbo3 application-level service discovery model, the resident memory is reduced by about 75% compared with version 2.x&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/performance/registry-gc.svg" alt="//imgs/v3/performance/registry-gc.svg">&lt;/p>
&lt;p>&lt;br />Figure 2 Service Discovery Model GC Changes&lt;br />&lt;br />&lt;/p>
&lt;ul>
&lt;li>Dubbo3 interface-level service discovery model, the number of YGC times in version 2.x has dropped significantly, from hundreds of times to more than a dozen times&lt;/li>
&lt;li>Dubbo3 application-level service discovery model, the number of FGC times in version 2.x has dropped significantly, from hundreds of times to zero&lt;/li>
&lt;/ul></description></item><item><title>Docs3-V2: RPC Protocol Triple&amp;Dubbo Benchmark</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/rpc-benchmarking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/rpc-benchmarking/</guid><description>
&lt;ul>
&lt;li>The &lt;em>Dubbo protocol&lt;/em> implementation of Dubbo3 is basically the same as the Dubbo2 version in terms of performance.&lt;/li>
&lt;li>Since the Triple protocol itself is built based on HTTP/2, the RPC call on a single link is not improved compared with TCP-based Dubbo2, but has a certain decline in some call scenarios. But the greater advantage of the _Triple protocol _ lies in the gateway penetration, versatility, and overall throughput improvement brought about by the Stream communication model.&lt;/li>
&lt;li>Triple is expected to have better performance in the gateway proxy scenario. In view of the current stress testing environment, this round of benchmarks has not yet been provided.&lt;/li>
&lt;/ul>
&lt;h2 id="11-environment">1.1 Environment&lt;/h2>
&lt;p>| | Description |
| &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; |
| &lt;strong>Machine&lt;/strong> | 4C8G Linux JDK 1.8 (Provider) 4C8G Linux JDK 1.8 (Consumer) |
| &lt;strong>Pressure test case&lt;/strong> | RPC method types include: no parameters and no return value, normal pojo return value, pojo list return value&lt;br />&lt;br />2.7 version Dubbo protocol (Hessian2 serialization)&lt;br /> Version 3.0 Dubbo protocol (Hessian2 serialization)&lt;br />3.0 version Dubbo protocol (Protobuf serialization)&lt;br />3.0 version Triple protocol (Protobuf serialization)&lt;br />3.0 version Triple protocol (Protobuf sets Hessian2 serialization) |
| &lt;strong>Pressure test method&lt;/strong> | In a single-link scenario, the consumer starts 32 concurrent threads (the current machine configuration qps rt has a more balanced number of concurrency), and collects the pressure test data after continuous pressure&lt;br /> The pressure test data passes https: //github.com/apache/dubbo-benchmark Get |&lt;/p>
&lt;br />
&lt;h2 id="12-data-analysis">1.2 Data Analysis&lt;/h2>
&lt;p>| | &lt;strong>Dubbo + Hessian2&lt;br />2.7&lt;/strong> | &lt;strong>Dubbo + Hessian2&lt;br />3.0&lt;/strong> | &lt;strong>Dubbo + Protobuf&lt;br />3.0&lt;/strong> | &lt;strong>Triple + Protobuf&lt;br /> 3.0&lt;/strong> | &lt;strong>Triple + Protobuf(Hessian)&lt;br />3.0&lt;/strong> |
| &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash; &amp;mdash;&amp;mdash;&amp;mdash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; | &amp;mdash;&amp;mdash;&amp;mdash; &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; |
| &lt;strong>No parameter method&lt;/strong> | 30333 ops/s&lt;br />2.5ms P99 | 30414 ops/s&lt;br />2.4ms P99 | 24123 ops/s&lt;br />3.2ms P99 | 7016 ops/s&amp;lt; br /&amp;gt;8.7ms P99 | 6635 ops/s&lt;br />9.1ms P99 |
| &lt;strong>pojo return value&lt;/strong> | 8984 ops/s&lt;br />6.1 ms P99 | 12279 ops/s&lt;br />5.7 ms P99 | 21479 ops/s&lt;br />3.0 ms P99 | 6255 ops/s&amp;lt; br /&amp;gt;8.9 ms P99 | 6491 ops/s&lt;br />10 ms P99 |
| &lt;strong>pojo list return value&lt;/strong> | 1916 ops/s&lt;br />34 ms P99 | 2037 ops/s&lt;br />34 ms P99 | 12722 ops/s&lt;br />7.7 ms P99 | 6920 ops/s &lt;br />9.6 ms P99 | 2833 ops/s&lt;br />27 ms P99 |&lt;/p>
&lt;h3 id="121-comparison-of-different-versions-of-dubbo-protocol">1.2.1 Comparison of different versions of Dubbo protocol&lt;/h3>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/performance/rpc-dubbo.svg" alt="//imgs/v3/performance/rpc-dubbo.svg">&lt;/p>
&lt;p>&lt;br />Figure 3 Comparison of implementations of the Dubbo protocol in different versions&lt;br />&lt;/p>
&lt;ul>
&lt;li>As far as the default combination of Dubbo RPC + Hessian is concerned, the performance of Dubbo3 and Dubbo2 is basically the same in different calling scenarios&lt;/li>
&lt;/ul>
&lt;h3 id="122-dubbo-protocol-vs-triple-protocol">1.2.2 Dubbo protocol vs Triple protocol&lt;/h3>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/performance/rpc-triple.svg" alt="//imgs/v3/performance/rpc-triple.svg">&lt;/p>
&lt;p>&lt;br />Figure 4 Triple vs Dubbo&lt;br />&lt;/p>
&lt;ul>
&lt;li>Simply looking at the point-to-point calls of Consumer &amp;lt;-&amp;gt; Provider, it can be seen that the Triple protocol itself is not dominant. Also using the Protobuf serialization method, the overall performance of the Dubbo RPC protocol is still better than Triple. &lt;br />&lt;br />&lt;/li>
&lt;li>Triple implementation will continue to be optimized in version 3.0, but it cannot completely change the situation where &amp;ldquo;RPC protocol based on HTTP/2&amp;rdquo; is at a disadvantage compared to &amp;ldquo;RPC protocol based on TCP&amp;rdquo; in some scenarios&lt;/li>
&lt;/ul>
&lt;h3 id="123-supplementary-gateway-scenarios">1.2.3 Supplementary gateway scenarios&lt;/h3>
&lt;p>TBD&lt;br />&lt;br />&lt;/p>
&lt;h3 id="124-simulate-the-throughput-improvement-of-the-stream-communication-scenario">1.2.4 Simulate the throughput improvement of the Stream communication scenario&lt;/h3>
&lt;p>TBD&lt;/p></description></item></channel></rss>