常见软件并发量与对应架构
文章目录
- 指标
- 网络
- 容量
- 流量
- 压测
- PV(Page View)页面访问量
- RT(Response-time)响应时间
- QPS(Queries Per Second)每秒查询
- RPS(Requests Per Second )吞吐量
- TPS(Transactions Per Second)每秒事务
- 并发数(The number of concurrent connections)
- 操作系统限制
- 软件限制
- java
- tomcat
- Nginx
- MySQL
- 单机应用何时进行集群
- 各个并发量级别的 性能瓶颈 与 架构方案
- qps 100
- qps 1000
- qps 1w
- qps 10w
- qps 1000w
- 其他需求
- 案例:淘宝从几百到千万级并发的十四次架构演进之路!
- 单机的并发上限
- C10K问题 (单机1w并发)
- C10M问题 (单机1000w并发)
指标
网络
容量
流量
压测
PV(Page View)页面访问量
页面被浏览的次数,每次用户访问或者刷新页面都会被计算在内。
RT(Response-time)响应时间
直接反应了系统的快慢
一个请求从开始到最后收到响应数据所花费的总体时间
响应时间一般 = CPU执行时间 = 线程等待时间(IO等待,sleep, wait)时间
QPS(Queries Per Second)每秒查询
体现系统在规定时间内所能处理多少流量
通过PV 预估 峰值QPS,二八原则
峰值时间每秒请求数(QPS) = ( 总PV数 * 80% ) / ( 每天秒数 * 20% )通过RT 计算 单线程QPS
QPS = 1s / RT
RPS(Requests Per Second )吞吐量
体现系统处理请求的能力
等效于QPS
单位时间内系统能处理的请求数量,单位是 reqs/s
TPS(Transactions Per Second)每秒事务
事物数/秒
并发数(The number of concurrent connections)
系统的负载能力
并发量 = QPS * 平均响应时间
最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)* cpu数量
操作系统限制
Windows 每个进程中的线程数不允许超过 2000
Linux 每个进程中的线程数不允许超过 1000
软件限制
java
- Java中每开启一个线程需要耗用1MB的JVM内存空间用于作为线程栈之用
- 分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
tomcat
- Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,
- 实际上也就300-400并发
Nginx
反向代理并发数 2w 官网是5w
经过优化的话,则可以稳定地达到 10w 次/秒 的处理性能。
MySQL
主键查询: 千万级别数据 >> 1-10 ms
唯一索引查询: 千万级别数据 >> 10-100 ms
非唯一索引查询: 千万级别数据 >> 100-1000ms
无索引数据: 百万级别数据 >> 1000ms+
插入操作: 1w~10w tps
mysql并发数 业内据说能做到500-1000
单机应用何时进行集群
某个应用拥有250 个以上并发的时候,应考虑应用服务器的集群。
具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,
各个并发量级别的 性能瓶颈 与 架构方案
qps 100
这一步一台正常的电脑,用常见的软件都能支持,没什么可探讨的
单服务器,单应用,单数据库
qps 1000
单机软件性能达到上限(如tomcat一般不超过500)
单机数据库瓶颈
搭建tomcat集群,用Nginx 在应用层负载均衡
tomcat节点超过5个左右的话. 集群的session复制广播导致占用带宽,服务能力先增加后下降本地缓存/分布式缓存
通过缓存获取查询热点数据,减小数据库压力数据库 读写分离
qps 1w
集群的session共享瓶颈
不同业务直接竞争数据库,相互影响性能
单机的 写库 达到性能瓶颈
分布式缓存
将session服务化,解决session复制问题分布式架构
按照功能点把系统拆分,拆分成独立子系统,为子系统配置集群(加服务器,不用配置session共享)。数据库
分布式数据库
分库分表,大表拆小表
qps 10w
单机Nginx会成为瓶颈
- 搭建Nginx集群,用LVS/F5 传输层负载均衡
qps 1000w
此时用户肯定会分布在不同的地区,与服务器机房距离不同,导致了访问的延迟会明显不同
用户与机房的传输距离成为瓶颈
- 通过DNS,实现机房间的负载均衡
用户 就近/轮询 访问不同的机房,机房间同步信息
系统可做到机房级别的水平扩展,千万级到亿级的并发量都可通过增加机房来解决
其他需求
2020年最高能达到亿级并发上限,目前市场好像没有更高的需求,期待接下来的发展,
但是 还有其他的需求未满足
- 大数据,人工智能等应用 需要检索分析大量数据,会产生特别复杂的查询、海量文件存储、全文检索、可变数据结构等需求, 只用数据库做会很麻烦
- NoSQL数据库
- 搜索引擎ElasticSearch
- 分布式文件系统HDFS
- 业务做大、做广了之后,一个应用中包含了太多的业务代码,业务的升级迭代变得困难
- 按照业务板块来划分应用代码,做成独立的微服务
- 服务准备运行环境,部署,运维复杂
- 容器化技术 打包应用/服务 Docker,Kubernetes
案例:淘宝从几百到千万级并发的十四次架构演进之路!
https://www.cnblogs.com/xiaobug/p/11039259.html
单机的并发上限
http://www.52im.net/thread-561-1-1.html
C10K问题 (单机1w并发)
一台机器无法创建很多进程。如果是C10K就要创建1万个进程,那么单机而言操作系统是无法承受的(往往出现效率低下甚至完全瘫痪)。
如果是采用分布式系统,维持1亿用户在线需要10万台服务器,成本巨大,也只有Facebook、Google、雅虎等巨头才有财力购买如此多的服务器。
- 过去的10年里,高性能网络编程技术领域里经过众多开发者的努力,已很好地解决了C10K问题
C10M问题 (单机1000w并发)
- 目前大佬们正在研究的问题
1千万的并发连接数;
100万个连接/秒:每个连接以这个速率持续约10秒;
10GB/秒的连接:快速连接到互联网;
1千万个数据包/秒:据估计目前的服务器每秒处理50K数据包,以后会更多;
10微秒的延迟:可扩展服务器也许可以处理这个规模(但延迟可能会飙升);
10微秒的抖动:限制最大延迟;
并发10核技术:软件应支持更多核的服务器(通常情况下,软件能轻松扩展到四核,服务器可以扩展到更多核,因此需要重写软件,以支持更多核的服务器)。
常见软件并发量与对应架构相关推荐
- 测试软件并发量工具,并发模拟工具使用篇
格式:ab [options] [http://]hostname[:port]/path -n requests Number of requests to perform //本次测试发起 ...
- mysql并发量_高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!
推荐阅读: 学会这些微服务+Tomcat+NGINX+MySQL+Redis,再去面试阿里P7岗吧 "火爆"的微服务架构你还不会?从基础到原理的PDF文档快来学! Nginx负载均 ...
- 电商项目的并发量一般是多少_【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!...
写在前面 很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到 ...
- 大并发量,大数据量基于SSH应用程序架构有关问题
首先介绍下情况,并发量最多可达到万级,应用程序架构是基于SSH的,系统级是通过Apache分发,集群配置.但是目前情况不理想,我对系统级架构都是在钻研期间,下面是自己查的总结,但还是不怎么理想,各位熟 ...
- 系统并发量及常见性能指标
PV 即 page view,页面浏览量 用户每一次对网站中的每个页面访问均被记录1次.用户对同一页面的多次刷新,访问量累计. UV 即 Unique visitor,独立访客 通过客户端的cooki ...
- 高并发高流量网站架构详解--转载
原文地址:http://www.ha97.com/818.html Web2.0的兴起,掀起了互联网新一轮的网络创业大潮.以用户为导 向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批 ...
- 厉害了,淘宝千万并发,14 次架构演进…
本文以设计淘宝网的后台架构为例,介绍从一百个并发到千万级并发情况下服务端的架构的14次演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知. 文章最后汇总了一些架构设计 ...
- 高并发高可用的 架构实践
一. 设计理念 1. 空间换时间 1) 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(30 ...
- 并发量,QPS,TPS,看这一篇就够了
目录 引子 饭店问题 网站 类比饭店分析 性能测试 软件性能测试的基本概念和计算公式 一.软件性能的关注点 二.软件性能的几个主要术语 引子 饭店问题 饭店优化 网站 类比饭店分析 当一条请求从客户 ...
最新文章
- JavaScript实现Apache .htaccess 转化nginx生成器工具-toolfk程序员工具网
- Codeforces #440.Div.2
- Linux 如何取进程运行时间,linux -- 获取进程执行时间
- 语言速算24点的小窍门_4秒钟1道题!12岁少年三夺24点大赛冠军
- 【bzoj1010】玩具装箱toy——斜率优化dp
- 黑客攻防技术宝典Web实战篇第2版—第6章 攻击验证机制
- 违规停放共享单车 319人被纳入限制骑行“黑名单”
- 第七部分:小插曲,Deferred
- ios开发网络学习三:NSURLConnection小文件大文件下载
- 关于C语言进位问题的小测试(直接去尾or四舍五入)
- ide中项目文件夹右下角蓝色小方块
- AHRS和INS的区别
- 【软件设计】细数软件开发的核心原则
- angularjs使用lhgdialog做对话框控件
- python自己做电子词典_利用PyQt5制作电子词典
- windows tcp端口映射或端口转发
- 科大讯飞语音转文本(极速转换和普通转换两种)
- 第12期:Spark零基础学习路线
- 使用Tushare进行金融时间序列分析研究
- Python3 实现淘女郎照片爬虫