高并发的解决方案

本文用来描述高并发情况下的处理手段和方法。大白绕道。

1、应用和静态资源分离:

静态资源包括图片、js、css、视频和一些资源文件等。因为这些文件都是无状态文件,所以直接存放到对应的服务器上就可以了。如百度的图片在imgsrc.baidu.com二级域名访问的。此时就不会访问应用服务器了。

2、页面缓存:

将应用的页面缓存起来,这样就不会每次都重新生成页面了,大大地提升了访问速度。比如Nginx自带的缓存功能。页面缓存主要针对于数据很少变化的页面中。
对于经常变化的页面缓存策略: 比如一篇微博,发布后就很少变动了,但其后面的赞数很易变。可以先生成静态页面,然后AJAX方式去请求并修改这部分数据。

3、集群与分布式:

集群是每台服务器都具有相同的功能,处理请求时任意调用一台,起到分流的作用。
分布式是将不同的业务放到不同的服务器上,处理一个请求可能需要经过多台服务器。
集群有两种方式:静态资源集群应用程序集群。静态资源集群比较简单。应用程序集群需要考虑到缓存同步的问题。其中最重要的就是Session,Session的同步有两种:⑴.Session变化后自动同步到其他服务器;⑵.用一个程序统一管理Session。Tomcat采用第一种,第二种比如Redis、memcached等服务器来管理Session,然后再程序中通过重写Request并覆盖getSession方法来获取指定的Session。
集群还有一个问题是负载均衡,也就是要均分任务给所有的服务器。可以通过软件处理或专门的硬件(如F5)来处理。

分布式需要考虑Session、事务、以及各个节点的依赖关系。对于分布式事务,依照业务的贵重性,来采取TCC还是MQ。

4、反向代理:

反向代理是客户端直接访问的服务器不提供真正的服务(称为web服务器,如Nginx,Apache),他是从别的服务器(称为应用服务器,如Tomcat,weblogic)上获取资源并返回给用户。

代理服务器与反向代理服务器: 代理服务器是我们主动告诉代理服务器要获取的资源,然后他获取后给我们; 反向代理服务器是我们正常访问一台服务器,而此服务器内部调用了别的服务器获取资源并返回,我们并不知道。

代理服务器 反向代理服务器
获取方式 用户主动请求 服务器主动请求
域名 不需要 需要

反向代理服务器的作用:①可以作为前端服务器和应用服务器继承;②可以做负载均衡;③转发请求。

5、CDN

CDN(Content Delivery Network)内容分发网络,是一种全国性、按网络归属来分配的集群页面缓存服务器。当有请求进入时,他会把请求分配到最合适的CDN服务器来处理。如按照网络制式来分,联通的分到联通的节点上;按照地理位置分,北京的会被分配到北京的节点上,新疆会被分到西安的节点上(西北用户偏少,会建立同一的服务器节点)。
CDN的工作原理: 在ISP(Internet Service Provider,网络服务供应商)那里使用CNAME(可以理解为别名)将域名解析到一个特定的域名,然后再将解析的那个域名用专门的CDN服务器解析到响应的CDN节点。

高并发的解决方案_第1张图片
CDN请求图.png

图中部分名词解释:
DNS:域名解析服务。
LDNS:本地DNS。
比如: www.taobao.com 的cname= www.taobao.com.danuoyi.tbcache.com。
而其实际的IP为60.28.242.249,60.28.242.250。(DOS窗口执行 nslookup www.taobao.com可以获得。)

最后图片来源他处,侵删。其他均为原创。

6、MQ

使用MQ的作用,是为了限制突发性请求过多。可以给MQ设置固定容量。

你可能感兴趣的:(高并发的解决方案)