我们先了解一下什么是并发和并行

并发:并发是指两个或多个事件在同一时间间隔内发生,就是可以重叠在时间段启动,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

并行:并行是指两个或者多个事件在同一时刻发生

高比发关心的参数

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高并发的解决方案的更多相关文章

  1. 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...

  2. 针对web高并发量的处理

    针对web高并发量的处理 针对高并发量的处理 一个老生常谈的话题了 至于需要运维支持的那些cdn.负载均衡神马的就不赘述了 你们都懂的 虫子在此博文只讲一些从程序角度出发的一些不错的解决方案. 至于从 ...

  3. PHP 高并发秒杀解决方案

    本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列)) 1:(正常流程,不做任何高并发处理),代码如下: <?php $_mysqli = ne ...

  4. 多道技术 进程 线程 协程 GIL锁 同步异步 高并发的解决方案 生产者消费者模型

    本文基本内容 多道技术 进程 线程 协程 并发 多线程 多进程 线程池 进程池 GIL锁 互斥锁 网络IO 同步 异步等 实现高并发的几种方式 协程:单线程实现并发 一 多道技术 产生背景 所有程序串 ...

  5. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

    问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...

  6. 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  7. 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  8. web 高并发分析

    <高并发Web系统的设计与优化>的读后感 一口气看完了<高并发Web系统的设计与优化>,感觉受益匪浅,作者从高并发开始讨论问题,并逐步给出了非常有建设性的想法和建议,是值得我们 ...

  9. 【高并发简单解决方案】redis缓存队列+mysql 批量入库+php离线整合

    原文出处: 崔小拽 需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化 ...

随机推荐

  1. 获取屏幕宽度,将view移出屏幕再移动回来

    public class MainActivity extends AppCompatActivity { private TextView kuandu; float curTranslationX ...

  2. [git与github]__git与github简单了解

    前言 关于版本控制,版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 我们通过版本控制系统可以解决的问题:可以非常方便的查看我们的源码文件的历代更新版本.或将我们的项目源 ...

  3. 我们自研的那些Devops工具

    随着云技术以及容器技术的崛起,人肉运维的时代结束了 2018年为了解决日常运维中的痛点以及更高效的推进运维工作,我们自研并完善了几个工具系统,这些系统无一例外的帮我们节约了时间,提高了效率,这篇文章将 ...

  4. 解决 "Script Error" 的另类思路

    本文由小芭乐发表 前端的同学如果用 window.onerror 事件做过监控,应该知道,跨域的脚本会给出 "Script Error." 提示,拿不到具体的错误信息和堆栈信息. ...

  5. 【awesome-dotnet-core-learning】(3)-Bogus-假数据生成器

    [awesome-dotnet-core-learning](3)-Bogus-假数据生成器 简介 Bogus一个简单而强大的假数据生成器,用于C#,F#和VB.NET.从著名的faker.js移植过 ...

  6. Struts2之类型转换

    jsp提交的数据全部是String类型,Struts2也是通过request.getParameter(name)取得String类型的数据,并通过拦截器将String转换成各种类型的数据,然后通过g ...

  7. [转].Python中sorted函数的用法

    [Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法对给定的List L进行排序,方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副 ...

  8. 【Java并发编程】13、forkjoin

    http://www.infoq.com/cn/articles/fork-join-introduction http://www.importnew.com/14506.html Java7中的F ...

  9. Mybatis generator代码生成

    背景 项目中使用Mybatis做持久层框架,但由于开发成员水平不一,写dao的时候,各有各的偏好,有时候还会写出带sql注入漏洞的代码. 出现sql注入漏洞,一般是#和$的区别没弄明白: $ 直接把字 ...

  10. Linux Shell脚本编程case条件语句

    1,判断一个数字是否则在1,2,3之中. #!/bin/bash read -p "pls input a number:" n case "$n" in ) ...