web高并发的解决方案
我们先了解一下什么是并发和并行
并发:并发是指两个或多个事件在同一时间间隔内发生,就是可以重叠在时间段启动,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:并行是指两个或者多个事件在同一时刻发生
高比发关心的参数
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服务一般会在全国范围内的关键节点上放置缓存服务器。 专线,让用户直接访问数据源,可以实现数据的动态同步。
web高并发的解决方案的更多相关文章
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- 针对web高并发量的处理
针对web高并发量的处理 针对高并发量的处理 一个老生常谈的话题了 至于需要运维支持的那些cdn.负载均衡神马的就不赘述了 你们都懂的 虫子在此博文只讲一些从程序角度出发的一些不错的解决方案. 至于从 ...
- PHP 高并发秒杀解决方案
本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列)) 1:(正常流程,不做任何高并发处理),代码如下: <?php $_mysqli = ne ...
- 多道技术 进程 线程 协程 GIL锁 同步异步 高并发的解决方案 生产者消费者模型
本文基本内容 多道技术 进程 线程 协程 并发 多线程 多进程 线程池 进程池 GIL锁 互斥锁 网络IO 同步 异步等 实现高并发的几种方式 协程:单线程实现并发 一 多道技术 产生背景 所有程序串 ...
- 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
- web 高并发分析
<高并发Web系统的设计与优化>的读后感 一口气看完了<高并发Web系统的设计与优化>,感觉受益匪浅,作者从高并发开始讨论问题,并逐步给出了非常有建设性的想法和建议,是值得我们 ...
- 【高并发简单解决方案】redis缓存队列+mysql 批量入库+php离线整合
原文出处: 崔小拽 需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化 ...
随机推荐
- Golang 协程调度
一.线程模型 N:1模型,N个用户空间线程在1个内核空间线程上运行.优势是上下文切换非常快但是无法利用多核系统的优点. 1:1模型,1个内核空间线程运行一个用户空间线程.这种充分利用了多核系统的优势但 ...
- 2017年最新20个轻量的 JavaScript 库和插件
下面这个列表中的免费 JavaScript 插件都是今年发布的,没有臃肿的一体化的框架,它们提供轻量级的解决方案,帮助 Web 开发过程更容易和更快.提供的插件可以创建滑块.响应式菜单.模态窗口.相册 ...
- 实现一个简单的vue-router
所有项目的源代码都放在我的github上,欢迎大家start: https://github.com/Jasonwang911/my-vue-router 首先来看下vue-router的使用: im ...
- SpringMVC Hello World
前言 新年伊始,元宵佳节,窗外灯火通明,炮声连连.北漂以来第一次一个人在北京过十五. 切入正题,收假后一边要赶项目进度还要学习java,so在元宵佳节之际写了第一篇SpringMVC Hello Wo ...
- HTML之marquee(文字滚动)详解
语法: <marquee></marquee> 以下是一个最简单的例子: 代码如下: <marquee><font size=+3 color=red> ...
- Extjs 项目中常用的小技巧,也许你用得着(3)
几天没写了,接着继续, 1.怎么获取表单是否验证通过: form.isValid()//通过验证为true 2.怎样隐藏列,并可勾选: hidden: true, 如果是动态隐藏的话: grid.ge ...
- Java基础——Oracle(三)
一.Oracle内部结构 1.表空间 表空间是数据库的逻辑划分,一个表空间只属于一个数据库,每个表空间由一个或多个数据文件组成,表空间中其他的逻辑结构的数据存储在这些数据文件中,一般oracle系统安 ...
- 【IDEA&&Eclipse】4、IntelliJ IDEA上操作GitHub
IntelliJ IDEA集成了对GitHub的支持,使上传代码到GitHub和从GitHub下载代码更加方便快捷. 1. 分享代码到GitHub 首先需要在IntelliJ配置Git,如果没有正确配 ...
- [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上)
[js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...
- CSS--使用Animate.css制作动画效果
一 使用Animate.css动画 // 通过@import引入外部CSS资源; // 引入线上图片及JS文件; // 通过更改CSS类名生成不同类型的CSS3动画; <!DOCTYPE h ...