我们先了解一下什么是并发和并行
并发:并发是指两个或多个事件在同一时间间隔内发生,就是可以重叠在时间段启动,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:并行是指两个或者多个事件在同一时刻发生
高比发关心的参数
QPS(TPS):每秒钟 request/事务 数量,在互联网领域,指每秒响应请求数(指 http请求);
QPS = 并发数 / 平均响应时间
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定);
响应时间:系统对一个请求做出响应的平均时间。例如系统处理一个HTTP请求需要 200ms,这个200ms就是系统的响应时间(我认为这里应该仅包含处理时间,网络传 输时间忽略)。
方案一:分离
对于web服务器来说,图片消耗的资源是十分大的,大型网站基本都采用图片分离,他们都是独立的,多台图片服务器,可以降低服务器的系统压力,在图片和web服务器上可以进行配置的优化,保证执行效率
方案二:使用缓存
缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的缓存也 是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。 架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模 块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访 问响应能力。 网站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以 在web开发中使用,比如用java开发的时候就可以调用MemoryCache对一些数据进行缓 存和通讯共享,一些大型社区使用了这样的架构。另外,在使用web语言开发的时候, 各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多 了,.net不是很熟悉,相信也肯定有。
方案三:HTML静态
可以使用静态的页面,尽量使用静态页面,一些信息发布的网站,交互性强的社区,使用静态就很有必要,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询 但是内容更新很小的应用,可以考虑使用html静态化来实现。比如论坛中论坛的公用设 置信息,这些信息目前的主流论坛都可以进行后台管理并且存储在数据库中,这些信息 其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的 时候进行静态化,这样避免了大量的数据库访问请求。
方案四:数据库集群
大型的网站结构很复杂,访问量大,用户多,一台数据库就容易达到瓶颈,在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好 的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就 参考相应的解决方案来实施即可。
方案五:CDN加速技术:
CDN的全称是内容分发网络。其目的是通过在现有的Internet中增加一层新的网络 架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容, 提高用户访问网站的响应速度。 CDN有别于镜像,因为它比镜像更智能,或者可以做这样一个比喻:CDN=更智能 的镜像+缓存+流量导流。因而,CDN可以明显提高Internet网络中信息流动的效率。从技 术上全面解决由于网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问网 站的响应速度。 CDN的类型特点 CDN的实现分为三类:镜像、高速缓存、专线。 镜像站点(Mirror Site),是最常见的,它让内容直接发布,适用于静态和准动态的 数据同步。但是购买和维护新服务器的费用较高,还必须在各个地区设置镜像服务器, 配备专业技术人员进行管理与维护。对于大型网站来说,更新所用的带宽成本也大大提 高了。 高速缓存,成本较低,适用于静态内容。Internet的统计表明,超过80%的用户经常 访问的是20%的网站的内容,在这个规律下,缓存服务器可以处理大部分客户的静态请 求,而原始的服务器只需处理约20%左右的非缓存请求和动态请求,于是大大加快了客 户请求的响应时间,并降低了原始服务器的负载。 CDN服务一般会在全国范围内的关键节点上放置缓存服务器。 专线,让用户直接访问数据源,可以实现数据的动态同步。