高并发系统中的常见问题

本文一共分析了三个案例,分别介绍并发系统中的共享资源并发访问、计算型密集型任务缓存访问 、单一热点资源峰值流量问题和解决方案。

Q1:订票系统,某车次只有一张火车票,假定有1w个人同时打开12306网站来订票,如何解决并发问题?

A1: 首先介绍数据库层面的并发访问,解决的办法主要是乐观锁和悲观锁。

乐观锁

假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

乐观锁使用一个自增的字段表示数据的版本号(或者timestamp),更新的时候检查版本号是否一致,比如数据库中版本号为4,更新时版本号使用版本号version=5,与数据库中的版本号version+1=(5)做比较,如果相等,则可以更新,如果不相等,其他程序已更新该记录,返回错误。

悲观锁

假定会发生并发冲突,屏蔽一切可能违反数据完整行的操作。

一般需要使用数据库的锁机制,比如MysqlInnoDB引擎的行级锁。

结论:在实际生产环境中,如果并发量不大且不允许脏读(原始数据为5,AB两个事务,B其他事务更新数据为2,事务未提交时,A读取到的仍然为5),可以使用悲观锁。并发访问量大时,使用悲观锁有非常大的性能问题,可以选择乐观锁。

其次,介绍一下Memcached的CAS机制

CAS,又称Compare-and-Swap,代表一种原子操作。

Memcached的CAS机制解决的问题及其原理:

1. 实现了Check-and-Set原子操作功能;
2. 其使用方式为:首先使用gets指令一个key-value及key对应value的版本号;其次操作产生新的value值;最后使用cas指令重新提交key-value,并附带刚刚获得到的版本号;
3. 当服务端判断cas操作中的版本号不是最新的时,则认为改key的值已经被修改,本次cas操作失败。程序设计人员通过CAS机制可实现自增和自减的原子操作;

可以看到MemCache的CAS机制和数据库的乐观锁实现原理非常类似。

Q2:假设系统中图片存储在TFS(Taobao File System)中,接口提供缩略图服务,首先在缓存中查找是否有缩略图,如果没有,则从TFS加载原图片,然后请求缩略图服务,缩略图计算完成后,设置回缓存服务中。

遇到的问题:当一张图片分享给100w个人以后,同一时间有1w个并发请求,由于缩略图计算耗时较长(假设1s), 在这1s内,每个请求查询缓存都没有找到然后申请计算缩略图,导致重复的缩略图计算量和资源消耗。

A2:对于缩略图这种耗时的服务,非常适合使用缓存,不过在使用的时候,对于同一个图片,原则上只需要计算一次缩略图,在缩略图未计算完成时,可以对每张图片做额外的标记表示其正在Processing,并发请求遇到缩略图Processing时,可以等待缩略图计算完成(这是建议的方式)后从缓存直接读取,也可以是直接返回错误,通过客户端重试来解决。

本案例中,如果缩略图请求在上传图片1分钟后才发生,则可以在后台预先计算缩略图并存储到缓存。另外就是在上传图片的时候计算缩略图,不过会增加上传图片的时间。

Q3:单点峰值流量,在并发系统中,除了请求整体的并发量高,还常见单一热点资源的并发请求量很高。例如,1万个人每人分享了一张图片,其中9999张图片的缩略图请求在10 QPS以内,剩下的一张图片为新闻热点图片,峰值请求在10万QPS左右, 系统会遇到的容量问题包括:1)接口前端机容量不够;2)缓存资源单实例遇到瓶颈。

A3:针对单点峰值流量可能遇到的性能瓶颈,解决方案如下。

1)接口层容量不够:这个问题比较简单,只要接口层设计是无状态的,当容量达到预警线,可以通过快速水平扩容解决。

2)缓存资源单实例遇到性能瓶颈:如果使用的是分布式缓存,当希望突破单一key的访问瓶颈时(这个瓶颈既有可能是CPU资源紧张,也有可能是单机网络带宽跑满,还有可能是磁盘IO吞吐不够),一个办法是分布式缓存做多副本(x3)冗余设计,这样系统的吞吐量(x3)可以提高3倍,不过成本也提高3倍。另外一个办法是针对极热点数据,除了分布式缓存,同时在前端机上打开localCache,依靠数量众多的前端机来抗极热点请求。

时间: 2024-10-08 22:47:03

高并发系统中的常见问题的相关文章

[转载] 高并发系统中的常见问题

原文: http://weibo.com/p/1001603862417250608209#_loginLayer_1436489552567 本文一共分析了三个案例,分别介绍并发系统中的共享资源并发访问.计算型密集型任务缓存访问 .单一热点资源峰值流量问题和解决方案. Q1:订票系统,某车次只有一张火车票,假定有1w个人同时打开12306网站来订票,如何解决并发问题? A1: 首先介绍数据库层面的并发访问,解决的办法主要是乐观锁和悲观锁. 乐观锁 假设不会发生并发冲突,只在提交操作时检查是否违

在一个高并发系统中 如果突然出现一个应用或者说一个服务突然变得很慢,应该怎么排查?

声明:该总结为网友朋友总结,本人是归纳成文,方便各网友学习交流. 这个是考线上排查问题能力,没有标准答案,作为开发,假设这种情景出现你怎么诊断问题? 首先:想知道,在实际情况下,怎么知道[一个应用或者说一个服务突然变得很慢]?调用访问的时候会发现的,对于业务流程比较熟悉很重要,先能够初步圈出,可能出现问题的地方,服务监控是必须的,做业务必须要知道自己服务的状态. 1.首先就是想看日志,后来想想看日志确实不太可行,并发量太大的情况下,查日志会很慢,(看日志,pstack strace gdb).

谈谈高并发系统的限流

开涛大神在博客中说过:在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.本文结合作者的一些经验介绍限流的相关概念.算法和常规的实现方式. 缓存 缓存比较好理解,在大型高并发系统中,如果没有缓存数据库将分分钟被爆,系统也会瞬间瘫痪.使用缓存不单单能够提升系统访问速度.提高并发访问量,也是保护数据库.保护系统的有效方式.大型网站一般主要是"读",缓存的使用很容易被想到.在大型"写"系统中,缓存也常常扮演者非常重要的角色.比如累积一些数据批量写入,内存里面的缓存

慌了,大厂最后一面居然问我高并发系统下的限流?

开涛大神在博客中说过:在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.本文结合作者的一些经验介绍限流的相关概念.算法和常规的实现方式. 缓存 缓存比较好理解,在大型高并发系统中,如果没有缓存数据库将分分钟被爆,系统也会瞬间瘫痪.使用缓存不单单能够提升系统访问速度.提高并发访问量,也是保护数据库.保护系统的有效方式.大型网站一般主要是"读",缓存的使用很容易被想到.在大型"写"系统中,缓存也常常扮演者非常重要的角色.比如累积一些数据批量写入,内存里面的缓存

【转载】聊聊高并发系统之降级特技

原文:聊聊高并发系统之降级特技 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.之前已经有一些文章介绍过缓存和限流了.本文将详细聊聊降级.当访问量剧增.服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务.系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级.本文将介绍一些笔者在实际工作中遇到的或见到过的一些降级方案供大家参考. 降级的最终目的是保证核心服务可用,即使是有损的.而且有些服务是无法降级的(如加入购

高性能高并发系统的稳定性保障

小码哥 于 1 月前 发表在 七嘴八舌 作者:肖飞,于2011年8月份加入京东,曾亲身参与到京东的应用性能监控.统一日志.流式计算.内存缓存.四层防攻击等一些基础技术平台的研发和搭建工作,经历了京东的技术系统从简单粗放向复杂精细化的演变过程.目前主要工作为多中心交易项目中的数据复制中间件JingoBUS的研发.平时也会开发一些公共的平台和工具,关注分布式系统的实现.程序设计.性能优化.开发语言等. 本文是2015年肖飞在内部分享的<高性能高并发系统的稳定性保障>PPT内容. 性能.并发.稳定性

高并发应用中客户端等待、响应时间的推算,及RT/QPS概念辨析

高并发应用中客户端等待.响应时间的推算,及RT/QPS概念辨析 对于一个网站,已知服务端的服务线程数和处理单个请求所需的时间时,该如何算出高并发时用户从点击链接到收到响应的时间?注意这个时间并不等于服务端处理单个请求的时间,因为高并发时,很多用户请求需要排队等待,你要把这个额外的等待时间算进去. 这个问题很重要,因为它的结果直接影响你的网站的用户体验.这篇文章就是来帮你算这个时间的.你可以使用本文附带的程序来算,也可以通过本文提炼出的公式来算. 另外还有一个问题:所谓RT(响应时间)和QPS,究

大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普通的技术人员就可以快速搭建起千万级的高并发大数据网站平台. 亮点一:真实环境还原,课程采用了VM环境重现大网站集群服务器环境,真实环境还原再现. 亮点二:基础实用,细节决定成败,课程内容在演练过程中重点介绍各种细节,保证初级人员快速入门及高级进阶. 亮点三:讲师丰富的海量平台运作经验 讲师tom5多

大数据高并发系统架构实战方案

大数据高并发系统架构实战方案(LVS负载均衡.Nginx.共享存储.海量数据.队列缓存 ) 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练.通过该课程的学习,普通的技术人员就可以快速搭建起千万级的高并发大数据网站平台,课程涉及内容包括:LVS实现负载均衡.Nginx高级配置实战.共享存储实现动态内容静态化加速实战.缓存平台安装配置使用.mysql主从复制安装配置实战等.课程二十.