关于高性能Web服务的一点思考
下面这些概念对于专业做性能测试的会比较熟悉,但是对于开发人员不一定都那么清楚。
- 并发用户数: 某一时刻同时请求服务器的用户总数,通常我们也称并发数,并发连接数等。
- 吞吐率:对于web服务器来说就是每秒处理的请求数,req/sec.
- 服务器平均请求处理时间:服务内部的处理时间,可以理解为我们平时log里的时间。
- 用户平均请求延迟时间:用户发送一个请求到接收到响应的时间间隔。
并发用户数和吞吐率容易被人混淆,除非服务器刚好1秒内能处理完并发用户的请求,否则两者数值上没有必然联系。一般的服务器都有并发的限制,比如MongoDB的maxConns,Tomcat的maxThreads。
吞吐率和服务器的请求处理时间则互为倒数,其实都是用来衡量服务器内部质量的,而用户平均请求延迟时间则是在一定并发下用来衡量对单个用户的服务质量。
一般的随着并发越来越大,吞吐率是先升后降,因为平均服务器处理时间是吞吐率的倒数,所以它是先降后升,存在一个平衡点,往往超过这个点,吞吐率明显下降,服务器平均处理时间也会明显变大。这个平衡点就是我们做压力测试要寻找的,叫做服务器的最大吞吐率,有时候我们习惯了干脆直接叫做吞吐率了,这时的并发可以叫做最大并发数或者叫最佳并发数。很多人习惯说:某某服务支持多大多大并发,我理解应该就是指的这个数。
而用户平均请求延迟时间则会随着并发数的增加而变大,一般在达到服务器的最大并发数之前增加的会比较缓慢,超过之后会骤增。如果一直只有一个用户请求,那么用户平均请求延迟时间自然等于服务器平均请求处理时间(忽略网络耗时),但随着并发用户的增加,无论服务器的并发策略如何,用户的等待时间都会变长,因为假设理想情况,服务器资源无限,所有的请求都是并行处理也仅仅是“等于”,但现实是上下文切换,请求排队等等的代价不可忽略,所以具体到某个用户的等待时间就会变长。而服务器平均请求处理时间,随着资源的充分利用一开始反而可能会下降。

综上所述,如果用户平均请求延迟时间 » 服务器平均处理时间,忽略网络耗时的话,可以说服务器已经存在瓶颈了,说明实际大并发数已经超过服务器的最大并发处理能力了。
我们的生产环境现在就面临这样的问题,每天的峰值期间从前面Nginx看平均的响应时间已经达到了3s,但是Tomcat内部的处理时间其实并不到1s,剩下的时间耗在了哪?线程切换,请求排队…

那么如何在不加机器的情况下优化这个问题呢?既然瓶颈是服务器并发,那么就得想办法提高并发能力。具体到Tomcat可能是一些参数调优之内的,比如NIO,APR,但这些都做过了之后还有没有优化的空间呢。最近我准备验证下Servlet3.0的异步和Jetty的Continuation,总体的思路就是将容器线程和业务线程分开,减小并发的粒度来提高并发。但具体有没有效果很难说,只有测了才知道,想要并发越高,逻辑就得拆的越细,代价就越高。

最后,实际情况要复杂的多,考虑网络因素,用户实际的平均请求延迟时间会更大,而且通常我们缺少这样的数据参考,所以现在很多都在做端到端的监控。
关于高性能Web服务的一点思考的更多相关文章
- 高性能Web服务之lnmp架构应用
传统上基于进程或线程模型架构的web服务通过每进程或每线程处理并发连接请求,这势必会在网络和I/O操作时产生阻塞,其另一个必然结果则是对内存或CPU的利用率低下.生成一个新的进程/线程需要事先备好其运 ...
- 高性能Web服务端 PHP vs Node.js vs Nginx-Lua 的对比分析
1. ngx_lua nodejs php 比较 我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至 ...
- 关于纯移动web优点的一点思考
自己造个小概念,纯移动web就是手机浏览器上访问的网站^_^ 缺点就不说了,说几个随着硬件和网络发展会放大的优势. 1 相对app来说,完全无缝对接,只要符合html标准,一次开发全平台部署 2 推广 ...
- 尹吉峰:使用 OpenResty 搭建高性能 Web 应用
2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,原贝壳找房基础架构部工程师尹吉峰在活动上做了<使用 O ...
- [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考
一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...
- 【读书笔记】2016.12.10 《构建高性能Web站点》
本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...
- 编写高性能Web应用程序的10个技巧
这篇文章讨论了: ·一般ASP.NET性能的秘密 ·能提高ASP.NET表现的有用的技巧和窍门 ·在ASP.NET中使用数据库的建议 ·ASP.NET中的缓存和后台处理 使用ASP.NET编写一个We ...
- web服务器之nginx与apache
最近准备架设php的web服务器,以下内容可供参考. 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞 ...
- 构建高性能web站点--读书大纲
用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...
随机推荐
- Linux inode && Fast Directory Travel Method(undone)
目录 . Linux inode简介 . Fast Directory Travel Method 1. Linux inode简介 0x1: 磁盘分割原理 字节 -> 扇区(sector)(每 ...
- Node 连接Mysql并进行增删改查
NPM: NPM的全称是Node Package Manager,类似于ruby的gem,Python的PyPL.setuptools,PHP的pear,是Nodejs中的包管理器.Nodejs自身提 ...
- 重温布局(display)
无聊,从新复习了一遍,基础布局,记录一下,避免忘了. 首先说一下 Css文件前缀 Firefox:-moz-box-shadow Safari:-webkit-box-shadow Opera:-o- ...
- 捉襟见肘之自定义自拍相机AVFoundation
因为上篇的问题的,我搜索到解决方法: http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-ima ...
- python04 面向对象编程02
为啥要用类而不用函数呢 记住两个原则: 减少重复代码 代码会经常变更 2 会对变量或字符串的合法性检测(在实例初始化的时候能够统一初始化各个实例的变量,换做函数来说,要弄出同样的变量那么在初始化 ...
- BZOJ4590: [Shoi2015]自动刷题机
显然看着就是二分,仔细看的话显然刷的题数随n增大单调不升. 挂了一发是因为无解输出一个-1而不是两个…… #include<cstdio> #include<algorithm> ...
- rdesktop in linux
rdesktop -f -a 16 -u administrator -p passwrod feelamcheung 192.168.0.2:8080
- 如何在Mac OSX 10.10上安装GDB
http://ntraft.com/installing-gdb-on-os-x-mavericks/
- jexus jws 安装
cd /tmp wget linuxdot.net/down/jexus--x64.tar.gz tar -zxvf jexus--x64.tar.gz mv jexus /usr rm -rf /t ...
- thinkphp 3.2 视图模型 实例 视图查询结果 二维数组 合并
使用视图模型查询的时候 结果是这样的 array(6) { [0] => array(5) { ["picTitle"] => string(7) "标题2& ...