黑马程序员技术交流社区

标题: 高并发 [打印本页]

作者: 学python的排骨    时间: 2019-9-19 18:04
标题: 高并发
                                                                                                                                                                                                [size=22.000000pt]高并发
                                                [size=17.000000pt]一、是什么
                                                [size=10.000000pt]并行、并发:
                                                [size=10.000000pt]并发:
                                                [size=10.000000pt]       你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。     并行:                                                [size=10.000000pt]你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。高并发([size=10.000000pt]High Concurrency[size=10.000000pt])[size=10.000000pt]![size=10.000000pt]= [size=10.000000pt]并发
                                                [size=10.000000pt]     是互联网分布式系统架构设计中必须考虑的因素之一;它通常是指,[size=10.000000pt]通过设计保证系统能够同时并行处理                                                [size=10.000000pt]     很多请求。[size=10.000000pt]  高并发相关常用的一些指标                                                [size=10.000000pt]响应时间([size=10.000000pt]Response Time[size=10.000000pt])[size=10.000000pt]:系统对请求做出响应的时间。例如系统处理一个[size=10.000000pt]HTTP[size=10.000000pt]请求需要[size=10.000000pt]200ms[size=10.000000pt],这个[size=10.000000pt]200ms[size=10.000000pt]就是系统的响应时间。
[size=10.000000pt]吞吐量([size=10.000000pt]Throughput[size=10.000000pt])[size=10.000000pt]:单位时间内处理的请求数量。
[size=10.000000pt]每秒查询率[size=10.000000pt]QPS[size=10.000000pt]([size=10.000000pt]Query Per Second[size=10.000000pt])[size=10.000000pt]:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。[size=10.000000pt]并发用户数[size=10.000000pt]:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
                                                [size=17.000000pt]二、为什么[size=10.000000pt]思考:
                                                [size=10.000000pt]为什么[size=10.000000pt]flask[size=10.000000pt]项目部署是[size=10.000000pt]基于[size=10.000000pt]ubuntu 16.04[size=10.000000pt]系统,使用 [size=10.000000pt]Gunicorn + Nginx [size=10.000000pt]进行布署[size=10.000000pt],云服务器为阿里
                                                [size=10.000000pt]云;而不是[size=10.000000pt]基于[size=10.000000pt]ubuntu 16.04[size=10.000000pt]系统,使用[size=10.000000pt]runserver[size=10.000000pt]进行部署[size=10.000000pt],云服务器为阿里云?例如:小米手机每周二的秒杀,可能手机只有[size=10.000000pt]1[size=10.000000pt]万部,但瞬时进入的流量可能是几百几千万。
                                                [size=10.000000pt]例如:[size=10.000000pt]12306[size=10.000000pt]抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存。读写冲突,锁非常严重,这是秒杀业务难的地方。那我们怎么优化秒杀业务的架构呢?
                                                [size=17.000000pt]三、怎么做
                                                [size=17.000000pt]


                                       
                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               
               
               
                                                                                                                                                                                                [size=10.000000pt]Tengine[size=10.000000pt]是由淘宝网发起的[size=10.000000pt]Web[size=10.000000pt]服务器项目。它在[size=10.000000pt]Nginx[size=10.000000pt]的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。[size=10.000000pt]Tengine[size=10.000000pt]的性能和稳定性已经在大型的网站如[size=10.000000pt]淘宝网[size=10.000000pt],[size=10.000000pt]天猫商城[size=10.000000pt]等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的[size=10.000000pt]Web[size=10.000000pt]平台。
                                                [size=10.000000pt]提高系统并发能力的方式,方法论上主要有两种:垂直扩展([size=10.000000pt]Scale Up[size=10.000000pt])与水平扩展([size=10.000000pt]Scale Out[size=10.000000pt])。
                                       
                               
                                                                                                                                                                                                                       
               
               
                                                                                                                                                                                                [size=22.000000pt]Cookie
[size=10.000000pt]cookie [size=10.000000pt]是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功
                                                [size=10.000000pt]能。
                                                [size=10.000000pt]cookie[size=10.000000pt]由服务器生成,发送给浏览器,浏览器把[size=10.000000pt]cookie[size=10.000000pt]以[size=10.000000pt]kv[size=10.000000pt]形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该[size=10.000000pt]cookie[size=10.000000pt]发送给服务器。由于[size=10.000000pt]cookie[size=10.000000pt]是存在客户端上的,所以浏览器加入了一些限制确保[size=10.000000pt]cookie[size=10.000000pt]不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的[size=10.000000pt]cookie[size=10.000000pt]数量是有限的。
                                                [size=22.000000pt]Session
[size=10.000000pt]session [size=10.000000pt]从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?
                                                [size=10.000000pt]对方肯定有某种特征(长相等)表明他就是张三。                                                [size=10.000000pt]session [size=10.000000pt]也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的[size=10.000000pt]“[size=10.000000pt]身份标识[size=10.000000pt]”[size=10.000000pt],然后客户端每次向服务器发请求的时候,都带上这个[size=10.000000pt]“[size=10.000000pt]身份标识[size=10.000000pt]”[size=10.000000pt],服务器就知道这个请求来自于谁了。至于客户端怎么保存这个[size=10.000000pt]“[size=10.000000pt]身份标识[size=10.000000pt]”[size=10.000000pt],可以有很多种方式,对于浏览器客户端,大家都默认采用 [size=10.000000pt]cookie [size=10.000000pt]的方式。
                                                [size=10.000000pt]服务器使用[size=10.000000pt]session[size=10.000000pt]把用户的信息临时保存在了服务器上,用户离开网站后[size=10.000000pt]session[size=10.000000pt]会被销毁。这种用户信息存储方式相对[size=10.000000pt]cookie[size=10.000000pt]来说更安全,可是[size=10.000000pt]session[size=10.000000pt]有一个缺陷:如果[size=10.000000pt]web[size=10.000000pt]服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候[size=10.000000pt]session[size=10.000000pt]会丢失。
                                       
                               
                                                                                       
               
                                                                                                                                                                [size=22.000000pt]Token
[size=10.000000pt]在[size=10.000000pt]Web[size=10.000000pt]领域基于[size=10.000000pt]Token[size=10.000000pt]的身份验证随处可见。在大多数使用[size=10.000000pt]Web API[size=10.000000pt]的互联网公司中,[size=10.000000pt]tokens [size=10.000000pt]是多用户下处理认证的
                                                [size=10.000000pt]最佳方式。以下几点特性会让你在程序中使用基于[size=10.000000pt]Token[size=10.000000pt]的身份验证[size=10.000000pt]1.[size=10.000000pt]无状态、可扩展
[size=10.000000pt]2.[size=10.000000pt]支持移动设备
[size=10.000000pt]3.[size=10.000000pt]跨程序调用
[size=10.000000pt]4.[size=10.000000pt]安全
                                                [size=10.000000pt]https://www.cnblogs.com/bobo-site/p/9317049.html
                                       
                               
                                                                                       
               






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2