文章目录
高并发
TPS (transaction per second)
每秒执行的事务数量
- 用户每分钟执行6个事务,TPS为6 / 60s = 0.10 TPS。
QPS(Queries-per-second) 每秒查询率
- =请求数/秒=总请求数 / ( 进程总数 * 请求时间 ) 单个进程每秒请求服务器的成功次数
- 尽量减少用户的QPS
TPS与QPS有何区别
事务:客户端发起请求到收到服务端最终响应的整个过程,这是一个TPS
- 而在这个TPS中,为了处理第一次请求可能会引发后续多次对服务端的访问才能完成这次工作,每次访问都算一个QPS。
- 对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。
所以,一个TPS可能包含多个QPS
吞吐量
单位时间内客户端和服务器成功传递数据的数量
- 字节/秒
- 请求数/秒、页面数/秒、人数/天或处理业务数/小时等单位来衡量
QPS(TPS)= 并发数/平均响应时间 或者 并发数 = QPS*平均响应时间
CDN
CDN全称叫做“Content Delivery Network”,中文叫内容分发网络。
用户使用某个域名来访问静态资源时(这个域名在阿里CDN服务中叫做“加速域名”),比如这个域名为“image.baidu.com”,它对应一个CNAME,叫做“cdn.ali.com”,那么普通DNS服务器(区别CDN专用DNS服务器)在解析“image.baidu.com”时,会先解析成“cdn.ali.com”,普通DNS服务器发现该域名对应的也是一个DNS服务器,那么会将域名解析工作转交给该DNS服务器,该DNS服务器就是CDN专用DNS服务器。CDN专用DNS服务器对“cdn.ali.com”进行解析,然后依据服务器上记录的所有CDN服务器地址信息,选出一个离用户最近的一个CDN服务器地址,并返回给用户,用户即可访问离自己最近的一台CDN服务器了。
高并发会来带的后果
- 服务端:
导致站点服务器/DB服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一样的,比如:出现重复的数据记录,多次添加了用户积分等 - 用户角度:
卡
高并发场景下,如何保证缓存与数据库一致性?
。
方案1.写请求串行化
写请求
- 1.写请求更新之前先获取分布式锁,获得之后才能去数据库更新这个数据,获取不到就进行等待,超时后就返回更新失败。
- 更新完之后去刷新缓存,如果刷新失败,放到内存队列中进行重试(重试时取数据库最新数据更新缓存)。
读请求
- 读请求发现缓存中没有数据时,直接去读取数据库,读完更新缓存。
这种技术方案通过对写请求的实现串行化来保证数据一致性,但是会导致吞吐量变低。比较适合银行相关的业务,因为对于银行项目来说,保证数据一致性比可用性更加重要,就像是去存款机存钱,取钱时,为了保证账户安全,都是会让用户执行操作后,等待一段时间才能获得反馈,这段时间其实取款机是不可用的。
方案2.先更新数据库,异步删除缓存,删除失败后重试
高并发解决方案
- a.应用层面:读写分离、缓存、队列、集群、令牌、系统拆分、隔离、系统升级(可水平扩容方向)。
- b.时间换空间:降低单次请求时间,这样在单位时间内系统并发就会提升。
- c.空间换时间:拉长整体处理业务时间,换取后台系统容量空间。