基于 http 的大型 rpc 服务器

Posted

技术标签:

【中文标题】基于 http 的大型 rpc 服务器【英文标题】:large scale rpc server built on http 【发布时间】:2013-07-27 17:46:26 【问题描述】:

我正在使用 http 构建一个为 100000 个客户端提供服务的 rpc 服务器。服务器使用tomcat作为容器,基本上客户端的每个请求都会非常快,因为服务器会启动一个新线程来处理请求,所以没有长时间等待的请求等待返回值。

我想知道这个场景的调音点是什么?我知道的第一件事是 ipv4.contrack,它控制最大 tcp 连接以及有关 tcp 连接回收的其他一些参数。

此外,我还应该研究什么? tomcat线程池可能是一个。虽然我认为 100000 个客户不太可能同时发出请求,但我确实希望服务器能够同时处理尽可能多的请求

【问题讨论】:

【参考方案1】:

首先,您必须定义您的要求。比如:

最大并发连接数 最大请求处理时间 等

之后,我建议进行广泛的负载测试。创建您的服务器的基本(但接近现实生活)实现并开始测试。

最初你可以使用 ab 工具,然后切换到 JMeter,例如。

ab 将生成如下内容:

 ab -c 10 -n 100 http://www.xyz.com/
This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.xyz.com (be patient).....done
Server Software: Apache-Coyote/1.1
Server Hostname: www.xyz.de
Server Port: 80

Document Path: /
Document Length: 3112 bytes

Concurrency Level: 10
Time taken for tests: 0.659 seconds
Complete requests: 100
Failed requests: 0
Broken pipe errors: 0
Total transferred: 367003 bytes
html transferred: 339208 bytes
Requests per second: 151.75 [#/sec] (mean)
Time per request: 65.90 [ms] (mean)
Time per request: 6.59 [ms] (mean, across all concurrent requests)
Transfer rate: 556.91 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 6
Processing: 8 63 144.6 12 514
Waiting: 8 63 144.7 12 513
Total: 8 64 144.8 12 514

Percentage of the requests served within a certain time (ms)
50% 12
66% 15
75% 19
80% 19
90% 491
95% 491
98% 512
99% 514
100% 514 (last request)

创建一个情节可能会有所帮助:

您可以继续进行所有性能优化和调整,因为可以立即看到结果。

您可能需要先调整您的应用程序,但之后您有很多选择,包括以下内容:

JVM 调优(GC 调优等) 连接器调优 压缩 蔚来 HTTP 1.1 特定内容 等等

只需使用正确的方法并开始做某事——这需要一些时间。

编辑 Tomcat 调优技巧

坦率地说,关于这个主题有很多不同的文章:

Chapter 4. Tomcat Performance Tuning OPTIMISING AND TUNING APACHE TOMCAT Tomcat 6 performance tuning Tomcat configuration $Tomcat/conf/server.xml

没有100%通用的解决方案,你应该自己做深入调查

【讨论】:

谢谢雷纳特。其实我以前看过ab。你有详细的调音点练习吗?问题是即使我得到了基准,我仍然不知道从哪里开始调整 不客气,请参阅更新。我建议每次创建构建时都开始生成基准测试结果。【参考方案2】:

最重要的是要了解您的系统将如何使用以及主要的性能因素(或多个因素)是什么。换句话说,你会受到 I/O 限制还是 CPU 限制?一旦你理解了这一点,你就可以开始设计性能测试,在现实的测试场景下为你的系统性能提供一个基线测量,然后改变你的系统配置(例如,线程池或堆的大小),看看会产生什么影响对系统性能有影响。

我还建议阅读this 论文。即使它现在已有十多年的历史,但设计讨论和权衡仍然适用于今天。至少,它应该可以帮助您考虑哪些性能调整方面对您的系统最重要。

【讨论】:

以上是关于基于 http 的大型 rpc 服务器的主要内容,如果未能解决你的问题,请参考以下文章

rpc和http的比较

RPC和HTTP的区别

大型网络中的 RPC 性能

基于RPC原理的dubbo

RPC服务和HTTP服务对比

Hadoop RPC机制中Server类的实现:基于Java NIO