资讯专栏INFORMATION COLUMN

如何用5W rmb支持34W并发

DandJ / 3133人阅读

摘要:在报名当天涌入海量考生,并发数飙升至,导致系统宕机,拒绝服务,导致考生无法报名,舆情哗然。所以,用来支持并发,是绝不可能的。或者直接在应用服务器上做操作,抛弃掉无法响应的请求,避免流量拖垮整个系统。

在《这垃圾APP,差点毁了70万高考生》一文中,我们的报考app是用5W rmb 向供应商采购。在报名当天涌入海量考生,并发数飙升至34W,导致系统宕机,拒绝服务,导致考生无法报名,舆情哗然。

那么5W rmb 能否支持34W并发呢?

先不考虑服务器资源是否够,瓶颈会首先出现在数据库读写,假设现在有34W并发,而且根据访问性质来看应该是报名操作,而报名操作是带有数据库CRUD的,Mysql的最大连接数是2000(假设没做分库分表,5W rmb让开发商做分库分表显然是不可能的),一般用到80%就很不错了,所以连接数用1600来算。然后假设数据库能在100ms内返回(想必也不是什么好机器),那么一个连接1s能进行10次操作,那么1600连接用满,能进行1.6W次数据库操作。

但这个也只是理论上的峰值,在实际项目中,单库是绝达不到1.6W写入的,并且还是涉及到多表操作的情况下。

实际上根据《高性能MySQL》第三版 1.5小节,在如下的测试环境中

测试机器Cisco UCSC250
内存384GB
存储引擎是InnoDB
测试的数据集2.5GB
MySQL的buffer pool设置为4GB

所以在内存为384G的机器上,吞吐量不会超过8000。那么384G机器要多少钱呢?

这是64G机器的价格,因此384=646 61.8W=10.8W/年

因此,如果要并发支持到8000,光数据库就至少需要10W/Y。当然,这是假设请求在1s内返回的情况,假设我们允许服务能在5s内返回,那么此时并发能支持到4W。还是在不考虑服务器,网络损耗的情况下,实际上是远远达不到的。

所以,用5w来支持38w并发,是绝不可能的。

回到我们刚才的计算,假设数据库吞吐量到达理论峰值,能支持8000用户同时访问,如果每个客户能等待5s的化,能支持4w用户(前提是这些用户不可以同时访问,需要在5s内做到均匀分布,此时需要通过限流等手段来实现)

要支持8000用户同时访问,又需要多少个应用服务器呢?

假设我们使用tomcat服务,每个线程所占空间为8M,那么光tomcat线程就需要: 80008=64000=64G,当然还需要有主机内存,损耗啥的,按照一倍计算就是128G,那么需要是21.8W=3.6W

所以,如果需要支持4w个用户5s延时的访问,需要3.6+10.8= 14.4w rmb

这还只是服务器的钱,不算开发成本在内

那么,如果要支持38w的并发报名呢?这已经是一个相当大的并发量了,首先需要考虑的是抛弃掉一部分流量,可以在cdn就直接抛弃,或是nginx,或者直接在应用服务器上,比如在这种情况下就只能保持8000/380000 = 2%,只能有2%的请求允许进来。

可以通过nginx+redis的方式抛弃掉98%的请求,这样可以不用浪费应用服务器资源。或者直接在应用服务器上做操作,抛弃掉无法响应的请求,避免流量拖垮整个系统。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72985.html

相关文章

  • 省钱小贴士(ECS):教你何每年省出8w+ 块

    摘要:摘要随着用户越来越多地使用阿里云的服务,如何用最小的成本来保有,成为用户越来越重要的关注点。为了更好的服务客户,团队调整了系统盘的最小容量限制。 摘要: 随着用户越来越多地使用阿里云的ECS服务,如何用最小的成本来保有ECS,成为用户越来越重要的关注点。为了更好的服务客户,ECS团队调整了系统盘的最小容量限制。 随着用户越来越多地使用阿里云的ECS服务,如何用最小的成本来保有ECS,成...

    h9911 评论0 收藏0
  • 搭建个人开发者云主机全过程-新云主机一步到位配置指南-免费HTTPS网关【小公司同样适用】【持续更新

    摘要:本文是笔者实践总结的技巧,介绍搭建云主机的方法,主要基于部署系列服务。从个人开发者需求出发,一步一步搭建自己的服务。虚拟内存的大小,一般不要超过当前内存大小,笔者选购的云主机是内存,所以设置虚拟内存。如果使用阿里云,在网页后台可以进行配置。 0x00 本文是笔者实践总结的技巧,介绍搭建云主机的方法,主要基于Docker部署系列服务。从个人开发者需求出发,一步一步搭建自己的服务。本文适合...

    ymyang 评论0 收藏0
  • PHP闭包(Closure)初探

    摘要:实现闭包将匿名函数在普通函数中当做参数传入,也可以被返回。如果将匿名函数返回给外界,匿名函数会保存所引用的变量,而外界则不能得到这些变量,这样形成闭包这个概念可能会更清晰一些。 原文:http://my.oschina.net/melonol/blog/126694 匿名函数提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个匿名函数...

    roadtogeek 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<