已阅读
很多人艾特了微信官方殊不知CDN加速在默默努力


高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
QPS:每秒钟请求或者查询的数量,在互联网领域,指每秒响应请求数(指HTTP请求)。
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)。
响应时间:从请求发出到收到响应花费的时间,例如系统处理一个
HTTP请求需要100ms,这个100ms就是系统的响应时间。
PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量,同一个人浏览你的网站同一页面,只记作一次PV。
UV:独立访问(UniQue Visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客。
带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小 。
看一张图:
那么怎么浅显的解释下高并发呢?
把服务器比作水箱,水箱与外界连接换水有三根水管,正常情况下都能正常进行换水,但是突然一段时间大量的水需要流通,水管的压力就承受不了了。
再简单点:洪涝灾害、早晚高峰、中午12点的大学食堂,大概都是这个原理吧。这些现实问题怎么解决的呢,高并发是不是也可以借鉴一下呢?
1.洪涝灾害:修固堤岸(增强服务器性能)
2.早晚高峰:多选择其他路线(分流,和分配服务器线路),不是一定需要就避开早晚高峰(减少客户端请求)
3.中午12点的大学食堂:学校多开几个食堂(静态资源与后端api分到不同服务器)


什么是数据库缓存?
MySQL等一些常见的关系型数据库的数据都存储在磁盘中,在高并发场景下,业务应用对MySQL产生的增、删、改、查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生。
为什么是要使用缓存?
缓存数据是为了让客户端很少甚至不访问数据库服务器进行数据的查询,高并发下,能最大程度的降低对数据库服务器的访问压力极大地解决数据库服务器的压力。
提高应用数据的响应速度
用户请求-->数据查询-->连接数据库服务器并查询数据-->将数据缓存起来(HTML、内存、JSON、序列化数据)-->显示给客户端;
用户再次请求或者新用户访问-->数据查询-->直接从缓存中获取数据-->显示给客户端。
什么是CDN?
CDN的全称是Content Delivery Network,即内容分发网络,尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络。
CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
使用CDN的优势?
本地Cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度。
跨运营商的网络加速,保证不同网络的用户都得到良好的访问质量
远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器
自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽,分担网络流量,减轻原站点WEB服务器负载等功能。
广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵。
七层负载均衡的实现
基于URL等应用信息的负载均衡。
Nginx的proxy是它一个很强大的功能,实现了7层负载均衡。
Nginx实现的优点
功能强大,性能卓越,运行稳定;
配置简单灵活;
能够自动剔除工作不正常的后端服务器;
上传文件使用异步模式;
支持多种分配策略,可以分配权重,分配方式灵活。
Nginx负载均衡
内置策略:IP Hash、加权轮询;
扩展策略:fair策略、通用hash、一致性hash。
加权轮询策略
首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器。
当所有后端机器都down掉时,Nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处于timeout的状态。
IP Hash策略
Nginx内置的另一个负载均衡的策略,流程和轮询很类似,只是七种的算法和具体的策略有些变化。
IP Hash算法是一种变相的轮询算法。