专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
OSC开源社区  ·  全球首个基于Web的“液态玻璃(Liquid ... ·  昨天  
程序员的那些事  ·  月薪已炒到6W?强烈建议大家冲一冲这个新兴领域 ·  4 天前  
蚂蚁技术AntTech  ·  天玑实验室全新升级 聚焦“AI+产业创新” ·  2 天前  
大淘宝技术  ·  探秘TaoAvatar:淘宝3D真人数字人技术解析 ·  2 天前  
51好读  ›  专栏  ›  程序员大咖

扛住100亿次请求?我们来试一试

程序员大咖  · 公众号  · 程序员  · 2017-02-21 19:00

正文

请到「今天看啥」查看全文


  1. 支持至少100万连接用户

  2. 每秒至少能处理2.3万的QPS,这里我们把目标定得更高一些 分别设定到了3万和6万。

  3. 摇红包:支持每秒83个的速度下发放红包,也就是说每秒有2.3万次摇红包的请求,其中83个请求能摇到红包,其余的2.29万次请求会知道自己没摇到。当然客户端在收到红包以后,也需要确保客户端和服务器两边的红包数目和红包内的金额要一致。因为没有支付模块,所以我们也把要求提高一倍,达到200个红包每秒的分发速度

  4. 支持用户之间发红包业务,确保收发两边的红包数目和红包内金额要一致。同样也设定200个红包每秒的分发速度为我们的目标。


想完整模拟整个系统实在太难了,首先需要海量的服务器,其次需要上亿的模拟客户端。这对我来说是办不到,但是有一点可以确定,整个系统是可以水平扩展的,所以我们可以模拟100万客户端,在模拟一台服务器 那么就完成了1/600的模拟。


和现有系统区别:

和大部分高QPS测试的不同,本系统的侧重点有所不同。我对2者做了一些对比。




4. 基础软件和硬件



4.1软件


Golang 1.8r3 , shell, python (开发没有使用c++ 而是使用了golang, 是因为使用golang 的最初原型达到了系统要求。虽然golang 还存在一定的问题,但是和开发效率比,这点损失可以接受)

服务器操作系统: Ubuntu 12.04

客户端操作系统: debian 5.0



4.2硬件环境


服务端: dell R2950。 8核物理机,非独占有其他业务在工作,16G内存。这台硬件大概是7年前的产品,性能应该不是很高要求。


服务器硬件版本:



服务器CPU信息:



客户端: esxi 5.0 虚拟机,配置为4核 5G内存。一共17台,每台和服务器建立6万个连接。完成100万客户端模拟



5. 技术分析和实现

5.1) 单机实现100万用户连接


这一点来说相对简单,笔者在几年前就早完成了单机百万用户的开发以及操作。现代的服务器都可以支持百万用户。相关内容可以查看

github代码以及相关文档:

https://github.com/xiaojiaqi/C1000kPracticeGuide

系统配置以及优化文档:
https://github.com/xiaojiaqi/C1000kPracticeGuide/tree/master/docs/cn



5.2) 3万QPS


这个问题需要分2个部分来看客户端方面和服务器方面。



客户端QPS



因为有100万连接连在服务器上,QPS为3万。这就意味着每个连接每33秒,就需要向服务器发一个摇红包的请求。因为单IP可以建立的连接数为6万左右, 有17台服务器同时模拟客户端行为。我们要做的就保证在每一秒都有这么多的请求发往服务器即可。


其中技术要点就是客户端协同。但是各个客户端的启动时间,建立连接的时间都不一致,还存在网络断开重连这样的情况,各个客户端如何判断何时自己需要发送请求,各自该发送多少请求呢?








请到「今天看啥」查看全文