| <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> |
| <h2 id="1-benchmark-conclusion">1 Benchmark Conclusion</h2> |
| <p>Compared with 2.x version, Dubbo3 version</p> |
| <ul> |
| <li>Significantly improved service discovery resource utilization. |
| <ul> |
| <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 -&gt; ten times)</li> |
| <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</li> |
| </ul> |
| </li> |
| </ul> |
| <p>The following is the detailed pressure measurement process and data</p> |
| <h2 id="2-application-level-service-discovery-address-push-link">2 Application-level service discovery (address push link)</h2> |
| <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 &ldquo;production environment address + zookeeper&rdquo;.</p> |
| <h3 id="21-environment">2.1 Environment</h3> |
| <p>| | Description | |
| | &mdash;&mdash;&mdash;&mdash; | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; | |
| | <strong>Pressure test data</strong> | Provider<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. <br/><br/>Registration center<br/>2 independent zookeeper registration centers, service providers and consumers adopt parallel configuration. <br/><br/>Consumer<br/>Configure 1c2g, xmx=768, enable GC, subscribe from 2 registries, and call the service every 5 seconds. Run for 20 hours. | |
| | <strong>Pressure test environment</strong> | Java version &ldquo;1.8.0&rdquo;<br/>Java(TM) SE Runtime Environment (build pxa6480sr3fp12-20160919_01(SR3 FP12))<br/>IBM J9 VM (Build 2.8, JRE 1.8 .0 Linux amd64-64 Compressed References 20160915_318796, JIT enabled, AOT enabled) |</p> |
| <h3 id="22-data-analysis">2.2 Data Analysis</h3> |
| <p><img src="https://dubbo.apache.org/imgs/v3/performance/registry-mem.svg" alt="//imgs/v3/performance/registry-mem.svg"></p> |
| <p><br />Figure 1 Changes in memory usage of the service discovery model<br /><br /></p> |
| <ul> |
| <li>Dubbo3 interface-level service discovery model, the resident memory is reduced by about 50% compared with version 2.x</li> |
| <li>Dubbo3 application-level service discovery model, the resident memory is reduced by about 75% compared with version 2.x</li> |
| </ul> |
| <p><img src="https://dubbo.apache.org/imgs/v3/performance/registry-gc.svg" alt="//imgs/v3/performance/registry-gc.svg"></p> |
| <p><br />Figure 2 Service Discovery Model GC Changes<br /><br /></p> |
| <ul> |
| <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</li> |
| <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</li> |
| </ul></description></item><item><title>Docs3-V2: RPC Protocol Triple&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> |
| <ul> |
| <li>The <em>Dubbo protocol</em> implementation of Dubbo3 is basically the same as the Dubbo2 version in terms of performance.</li> |
| <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.</li> |
| <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.</li> |
| </ul> |
| <h2 id="11-environment">1.1 Environment</h2> |
| <p>| | Description | |
| | &mdash;&mdash;&mdash;&mdash; | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; | |
| | <strong>Machine</strong> | 4C8G Linux JDK 1.8 (Provider) 4C8G Linux JDK 1.8 (Consumer) | |
| | <strong>Pressure test case</strong> | RPC method types include: no parameters and no return value, normal pojo return value, pojo list return value<br /><br />2.7 version Dubbo protocol (Hessian2 serialization)<br /> Version 3.0 Dubbo protocol (Hessian2 serialization)<br />3.0 version Dubbo protocol (Protobuf serialization)<br />3.0 version Triple protocol (Protobuf serialization)<br />3.0 version Triple protocol (Protobuf sets Hessian2 serialization) | |
| | <strong>Pressure test method</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<br /> The pressure test data passes https: //github.com/apache/dubbo-benchmark Get |</p> |
| <br /> |
| <h2 id="12-data-analysis">1.2 Data Analysis</h2> |
| <p>| | <strong>Dubbo + Hessian2<br />2.7</strong> | <strong>Dubbo + Hessian2<br />3.0</strong> | <strong>Dubbo + Protobuf<br />3.0</strong> | <strong>Triple + Protobuf<br /> 3.0</strong> | <strong>Triple + Protobuf(Hessian)<br />3.0</strong> | |
| | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash; | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash; | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash; | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash; &mdash;&mdash;&mdash; | &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; | &mdash;&mdash;&mdash; &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash; | |
| | <strong>No parameter method</strong> | 30333 ops/s<br />2.5ms P99 | 30414 ops/s<br />2.4ms P99 | 24123 ops/s<br />3.2ms P99 | 7016 ops/s&lt; br /&gt;8.7ms P99 | 6635 ops/s<br />9.1ms P99 | |
| | <strong>pojo return value</strong> | 8984 ops/s<br />6.1 ms P99 | 12279 ops/s<br />5.7 ms P99 | 21479 ops/s<br />3.0 ms P99 | 6255 ops/s&lt; br /&gt;8.9 ms P99 | 6491 ops/s<br />10 ms P99 | |
| | <strong>pojo list return value</strong> | 1916 ops/s<br />34 ms P99 | 2037 ops/s<br />34 ms P99 | 12722 ops/s<br />7.7 ms P99 | 6920 ops/s <br />9.6 ms P99 | 2833 ops/s<br />27 ms P99 |</p> |
| <h3 id="121-comparison-of-different-versions-of-dubbo-protocol">1.2.1 Comparison of different versions of Dubbo protocol</h3> |
| <p><img src="https://dubbo.apache.org/imgs/v3/performance/rpc-dubbo.svg" alt="//imgs/v3/performance/rpc-dubbo.svg"></p> |
| <p><br />Figure 3 Comparison of implementations of the Dubbo protocol in different versions<br /></p> |
| <ul> |
| <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</li> |
| </ul> |
| <h3 id="122-dubbo-protocol-vs-triple-protocol">1.2.2 Dubbo protocol vs Triple protocol</h3> |
| <p><img src="https://dubbo.apache.org/imgs/v3/performance/rpc-triple.svg" alt="//imgs/v3/performance/rpc-triple.svg"></p> |
| <p><br />Figure 4 Triple vs Dubbo<br /></p> |
| <ul> |
| <li>Simply looking at the point-to-point calls of Consumer &lt;-&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. <br /><br /></li> |
| <li>Triple implementation will continue to be optimized in version 3.0, but it cannot completely change the situation where &ldquo;RPC protocol based on HTTP/2&rdquo; is at a disadvantage compared to &ldquo;RPC protocol based on TCP&rdquo; in some scenarios</li> |
| </ul> |
| <h3 id="123-supplementary-gateway-scenarios">1.2.3 Supplementary gateway scenarios</h3> |
| <p>TBD<br /><br /></p> |
| <h3 id="124-simulate-the-throughput-improvement-of-the-stream-communication-scenario">1.2.4 Simulate the throughput improvement of the Stream communication scenario</h3> |
| <p>TBD</p></description></item></channel></rss> |