网站大量收购独家精品文档,联系QQ:2885784924

2024年黑马程序员高并发解决及方案.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

黑馬程序员:高并发处理方案

一、什么是高并发

?高并发(HighConcurrency)是互联网分布式系统架构设计中必须考虑的原因之一,它一般是指,通過设计保证系统可以同步并行处理诸多祈求。高并发有关常用的某些指標有响应時间(ResponseTime),吞吐量(Throughput),每秒查询率QPS(QueryPerSecond),并发顾客数等。

响应時间:系统對祈求做出响应的時间。例如系统处理一种HTTP祈求需要200ms,這個200ms就是系统的响应時间。

吞吐量:單位時间内处理的祈求数量。

QPS:每秒响应祈求数。在互联网领域,這個指標和吞吐量辨别的没有這样明显。

并发顾客数:同步承载正常使用系统功能的顾客数量。例如一种即時通讯系统,同步在线量一定程度上代表了系统的并发顾客数。

二、什么是秒杀

?秒杀場景一般會在電商网站举行某些活動或者节假曰在12306网站上抢票時碰到。對于電商网站中某些稀缺或者特价商品,電商网站一般會在约定期间點對其進行限量销售,由于這些商品的特殊性,會吸引大量顾客前来抢购,并且會在约定的時间點同步在秒杀页面進行抢购。

?此种場景就是非常有特點的高并发場景,假如不對流量進行合理管控,肆意放任大流量冲击系统,那么将导致一系列的問題出現,例如某些可用的连接资源被耗尽、分布式缓存的容量被撑爆、数据库吞吐量減少,最终必然會导致系统产生雪崩效应。

?一般来說,大型互联网站一般采用的做法是通過扩容、動静分离、缓存、服务降级及限流五种常规手段来保护系统的稳定运行。

?

三、扩容

?由于單台服务器的处理能力有限,因此當一台服务器的处理能力靠近或已超過其容量上限時,采用集群技术對服务器進行扩容,可以很好地提高系统整体的并行处理能力,在集群环境中,节點的数量越多,系统的并行能力和容錯性就越强。

?在無状态服务下,扩容也許是迄今為止效果最明显的增長并发量的技巧之一。

?從扩容方式角度讲,分為垂直扩容(scaleup)和水平扩容(scaleout)。垂直扩容就是增長單机处理能力,怼硬件,但硬件能力毕竟還是有限;水平扩容說白了就是增長机器数量,怼机器,但伴随机器数量的增長,單应用并发能力并不一定与其展現线性关系,此時就也許需要進行应用服务化拆分了。

?從数据角度讲,扩容可以分為無状态扩容和有状态扩容。無状态扩容一般就是指我們的应用服务器扩容;有状态扩容一般是指数据存储扩容,要么将一份数据拆提成不一样的多份,即sharding,要么就整体复制n份,即副本。sharding碰到的問題就是分片的可靠性,一般做转移、rehash、分片副本;副本碰到的問題是一致性性,一般做一致性算法,如paxos,raft等。

四、動静分离

動静分离,静态资源祈求与動态祈求分离,项目中需要访問的图片、声音、js/css等静态资源需要有独立的寄存位置,便于未来实現静态祈求分离時直接剥离出来,例如nginx可以直接配置图片文献直接访問目录,而不需要通過tomcat。這样tomcat就可以专注处理動态祈求,操作数据库数据处理之类的。静态祈求代理服务器性能比tomcat高诸多。

動静分离是指,静态页面与動态页面分開不一样系统访問的架构设计措施。

一般来說:

静态页面访問途径短,访問速度快,几毫秒

動态页面访問途径長,访問速度相對较慢(数据库的访問,网络传播,业务逻辑计算),几拾毫秒甚至几百毫秒,對架构扩展性的规定更高

静态页面与動态页面以不一样域名辨别

系统需要将動态数据和静态数据分而治之,顾客對静态数据的访問,应當防止祈求直接落到企业的数据中心,而是应當在CDN中获取,以加速系统的响应速度。

五、缓存

缓存之因此可以提高处理速度,是由于不一样设备的访問速度存在差异。缓存的话題可以扯几本書不带重样的。從CPU可以一直扯到客户端缓存,即從最底层一直到扯到最特近顾客的一层,每一层都也許或可以有缓存的存在。我們這裏不扯這样多,只說简朴服务端缓存。目前從几种不一样角度来看一下缓存:

①從效果角度。命中率越高越好吗?10萬個店铺数据,缓存了1000個,命中率稳定100%,那是不是說,有99000個店铺都是長尾店铺?缓存效果评估不能單看命中率。

②從回收方略。假如把缓存當做数据库同样的存储设备去用,那就没有回收的說法了(除非重启或者宕机,否则数据仍然有效);假如只存储热数据,那就有回收和替代的問題。回收有两种方式,一种是空间配额,另一种是時间配额。替代也有几种方式,LRU,FIFO,LFU。

③從缓存使用模式角度:顾客直接操作缓存和db;顾客直接操作缓存,缓存协助我們讀写DbB;

④從缓存分级角度。java堆内缓存、java堆外缓存、磁盘缓存、分布式缓存,多级缓存。

⑤從缓存使用角度。null穿透問題、惊群問題、缓存热點問題、缓存一致

文档评论(0)

159****1748 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档