其他
微信红包架构:扛住100亿次请求的后端架构应该这样设计!
1. 前言
QPS:Queries per second 每秒的请求数目 PPS:Packets per second 每秒数据包数目 摇红包:客户端发出一个摇红包的请求,如果系统有红包就会返回,用户获得红包 发红包:产生一个红包里面含有一定金额,红包指定数个用户,每个用户会收到红包信息,用户可以发送拆红包的请求,获取其中的部分金额。
支持至少100万连接用户 每秒至少能处理2.3万的QPS,这里我们把目标定得更高一些 分别设定到了3万和6万。 摇红包:支持每秒83个的速度下发放红包,也就是说每秒有2.3万次摇红包的请求,其中83个请求能摇到红包,其余的2.29万次请求会知道自己没摇到。当然客户端在收到红包以后,也需要确保客户端和服务器两边的红包数目和红包内的金额要一致。因为没有支付模块,所以我们也把要求提高一倍,达到200个红包每秒的分发速度 支持用户之间发红包业务,确保收发两边的红包数目和红包内金额要一致。同样也设定200个红包每秒的分发速度为我们的目标。
https://github.com/xiaojiaqi/C1000kPracticeGuide/tree/master/docs/cn
客户端QPS
服务器QPS
第一:需要记录每秒处理的请求数目,这需要在代码里埋入计数器。 第二:我们需要监控网络,因为网络的吞吐情况,可以客观的反映出QPS的真实数据。为此,我利用python脚本 结合ethtool 工具编写了一个简单的工具,通过它我们可以直观的监视到网络的数据包通过情况如何。它可以客观的显示出我们的网络有如此多的数据传输在发生。
客户端的摇红包请求消息 客户端的其他消息 比如聊天 好友这一类 服务器端对客户端消息的回应
Alias ss2=Ss –ant | grep 1025 | grep EST | awk –F: “{print \$8}” | sort | uniq –c’
当非常多goroutine 同时运行的时候,依靠sleep 定时并不准确,发生了偏移。我觉得这是golang本身调度导致的。当然如果cpu比较强劲,这个现象会消失。 因为网络的影响,客户端在发起连接时,可能发生延迟,导致在前1秒没有完成连接。 服务器负载较大时,1000M网络已经出现了丢包现象,可以通过ifconfig 命令观察到这个现象,所以会有QPS的波动。
单机百万的实践 https://github.com/xiaojiaqi/C1000kPracticeGuide 如何在AWS上进行100万用户压力测试 https://github.com/xiaojiaqi/fakewechat/wiki/Stress-Testing-in-the-Cloud 构建一个你自己的类微信系统 https://github.com/xiaojiaqi/fakewechat/wiki/Design http://djt.qq.com/article/view/1356 http://techblog.cloudperf.net/2016/05/2-million-packets-per-second-on-public.html http://datacratic.com/site/blog/1m-qps-nginx-and-ubuntu-1204-ec2 @火丁笔记 http://huoding.com/2013/10/30/296 https://gobyexample.com/non-blocking-channel-operations
END
你的转发,是对我最大的鼓励!在看亦是支持↓