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

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

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

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

【问题讨论】:

    标签: java http rpc


    【解决方案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 调优技巧

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

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

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多