《高并发Web系统的设计与优化》的读后感

一口气看完了《高并发Web系统的设计与优化》,感觉受益匪浅,作者从高并发开始讨论问题,并逐步给出了非常有建设性的想法和建议,是值得我们进一步去思考的。我们都知道,高并发必然带来服务器的高压力,高压状态下单个服务器随时可能宕机,减少压力的性价比较高的办法就是分而治之(提升系统硬件就不说了),如何分便是相当困难的课题,这不是简单的一个1变2,2变4的过程,这是整个系统架构顺势变迁的一段艰苦历程,看过myspace系统变迁那篇文章的人就会明白这段历程是痛苦的、是紧张的、是激烈的、是精彩的、是兴奋的。要做好它,必须脚踏实地,不得不承受各种工作压力,还要有丰富的想象力,整个团队成员,他们不仅仅是工程师,还是艺术家,更是一群精力旺盛、百折不挠的海盗。

1、关键词:分离。

一台服务器的能力始终有限,即使能够纵向扩展,那也要面对资金和硬件技术的考验,而且往往这种扩展投入大收益小,性价比不高。于是当服务器出现压力时,有人想到了用分离的办法,分离的办法就多了,主要是根据压力级别来确定:

较简单一点就是各个服务的分离,如原来是web和数据库同在一台服务器上,现在可以考虑将web和数据库都分别放在单独的服务器上,也就是只需要两台服务器就可以完成分离工作。

也可以对单一服务的分离,可以根据功能模块(用户注册,结算中心等)来分离web服,数据库方面可以考虑数据组的读写分离,数据本身的分区等。

还可以将公共模块分离,比如电子书店类型网站的在线浏览功能就可以作为一个独立模块划分,必要时数据库也能跟着一起,数据本身也可以分离,比如网站图片和文件下载等,另外还可以考虑在数据层上面建立一个数据中心,用来统一调度各类型的数据资源。

2、关键词:缓存。

记得在某年的数据库大会上,盖国强老师就在它的PPT写到:缓存为王。虽然是数据库的大会,但这个口号是适合整个系统架构。

在一个内存速度数倍于磁盘速度的大环境下,没人会质疑内存对数据处理的速度,但是它和磁盘不一样的是前者是易失性的(断电即丢失数据),容量相对于磁盘也小很多,因此使用它的时候需要一种机制,人们也在不断完善这种机制,该考虑能缓存些什么了。

最容易想到的是所有静态的东西,如web中的图片、css、js以及数据库中的只读数据,内存容量不大怎么办呢?(也不可能够)加入换出机制,比如FIFO、LRU等。

对于需要更新的非静态数据,比如web中的动态网页和数据库中需要被修改的表,前者需要在设计时就定义好能够缓存的相对静态的片段,比如天气预报部分,至少能保留一天吧。后者则可以通过添加日志或者磁盘副本来保证数据的修改不易丢失。

目前对静态文件的缓存比较好的软件如squid、varnish。数据库方面的缓存如Oracle的Timesten。

3、关键词:虚拟化

在低使用率下,虚拟化能提供纵向的服务器分离,即一台服务器上跑多个虚拟服务器。在高压力环境下,虚拟化则能提供纵向的服务器扩展,即多个服务器提供某一个服务。在纵向扩展的虚拟化服务器群里分两类。

第一类:每台服务器并没有特定的服务或功能,功能在它们之上,它们只提供资源本身,因此这就要求虚拟化的软件足够彪悍,不仅能高性能的使用好整个资源库,而且还能做好负载均衡、故障转移、数据迁移、避免热点等工作。相关的软件如VFS、memcached、BigTable、数据库群集等。

第二类:部分服务器拥有相同的功能,能提供相同的服务,在它们前端会有一台或多台服务器提供类似反向代理的服务,请求由前端接收,只经过简单处理后就将请求抛给后端的服务器,而对请求的大部分处理是在后端完成,前端的主要工作是负载均衡、故障转移等。目前web反向代理比较好的软件有nginx。

4、关键词:细节

俗话说得好,细节决定成败。架构设计的成败不仅仅在宏观上,从微观的层面依然重要,不能认为web服务分离了,数据库服务分离了,数据用了虚拟化分布式就可以一劳永逸高枕无忧了。其实真正最难的工作是如何能确定你现在所做一切以及将来要做的是必要的。

相信每个人告诉你的:你的老板是世界上最抠门的动物。他们不会傻乎乎的给你钱,让你搞这些看上去“乱七八糟”的东西,因此你要有足够的实力来证明,如何证明?你可以告诉他IIS或者Apache的配置已经在性能上最大承受我们的系统了,你可以告诉他数据库该优化的地方已经都优化过了,你可以告诉他现在系统的IO平均等待队列这个关键性能指标已经位于红色位置了。然而要告诉他这些之前你需要做的是:扎实的技术沉淀、细心的监控观察、足够的统计数据和富有远见的扩展计划(得要老板给钱给得开心啊)。

总的来说,有很多值得思考的地方,但是再好的也难以抵挡今天晚上德国队对乌拉圭队比赛的诱惑,先写到这儿,散了。

web 高并发分析的更多相关文章

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

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

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

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

  3. [超简洁]EasyQ框架-应对WEB高并发业务(秒杀、抽奖)等业务

    背景介绍 这几年一直在摸索一种框架,足够简单,又能应付很多高并发高性能的需求.研究过一些框架思想如DDD DCI,也实践过CQRS框架. 但是总觉得复杂度高,门槛也高,自己学都吃力,如果团队新人更难接 ...

  4. 面试官问你如何解决web高并发这样回答就好了

    所谓高并发,就是同一时间有很多流量(通常指用户)访问程序的接口.页面及其他资源,解决高并发就是当流量峰值到来时保证程序的稳定性. 我们一般用QPS(每秒查询数,又叫每秒请求数)来衡量程序的综合性能,数 ...

  5. web高并发的解决方案

    我们先了解一下什么是并发和并行 并发:并发是指两个或多个事件在同一时间间隔内发生,就是可以重叠在时间段启动,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机 ...

  6. Java高并发秒杀API之业务分析与DAO层

    根据慕课网上关于java高并发秒杀API的课程讲解用maven+ssm+redis实现的一个秒杀系统 参考了codingXiaxw's blog,很详细:http://codingxiaxw.cn/2 ...

  7. 2017.4.26 慕课网--Java 高并发秒杀API(一)

    Java高并发秒杀API系列(一) -----------------业务分析及Dao层 第一章 课程介绍 1.1 内容介绍及业务分析 (1)课程内容 SSM框架的整合使用 秒杀类系统需求理解和实现 ...

  8. Netty Redis 亿级流量 高并发 实战 (长文 修正版)

    目录 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -30[ 博客园 总入口 ] 写在前面 1.1. 快速的能力提升,巨大的应用价值 1.1.1. 飞速提升能力,并且满足实际开发要求 1 ...

  9. Netty 高并发 (长文)

    目录 Netty+Zookeeper 亿级 高并发实战 (长文) 写在前面 1. 高并发IM架构与部分实现 1.1. 高并发的学习和应用价值 1.1.1. 高并发IM实战的价值 1.1.2. 高并发I ...

随机推荐

  1. UNIX网络编程——使用select 实现套接字I/O超时

    下面程序包含read_timeout.write_timeout.accept_timeout.connect_timeout 四个函数封装: /* read_timeout - 读超时检测函数,不含 ...

  2. iOS下WebRTC音视频通话(三)-音视频通话

    前两篇文章记录了音视频通话的一些概念和一些流程,以及一个局域网内音视频通话的示例. 今天以一个伪真实网络间的音视频通话示例,来分析WebRTC音视频通话的过程. 上一篇因为是在相同路由内,所以不需要穿 ...

  3. 饮一盏Bug留香,唱一曲项目飞扬

    沿途的风景    牵挂的项目    两情迢迢 学生档案管理项目在2月的末尾从稍带寒意的季节里完成了第一次迭代,验收的结果不尽善尽美,演示的功能也惨不忍睹,各种"关爱"的点评充斥耳旁 ...

  4. Android进阶(十三)网络爬虫&json应用

    刚开始接触网络爬虫,怎一个"菜"字了得!经过几次的折磨,对其原理以及其中用到的json技术有了大致的了解,故作一总结,供有同样迷惑的朋友参考学习. 自己爬取的网站内容为12306的 ...

  5. 利用Dijkstra算法实现记录每个结点的所有最短路径

    最近在做PAT时发现图论的一些题目需要对多条最短路径进行筛选,一个直接的解决办法是在发现最短路径的时候就进行判断,选出是否更换路径:另一个通用的方法是先把所有的最短路径记录下来,然后逐个判断.前者具有 ...

  6. Opencv2.4.9、VS2010配置及grabcut代码实例

    最近opencv库更新到了2.4.9,作为小码农的我紧跟时代的步伐,装了2.4.9这个库.以下是我的配置步骤: 1.从http://opencv.org/上下载opencv2.4.9文件,由于我用的是 ...

  7. ACM算法竞赛:抄课文

    题目如下: 比如现在要写一句话 Hello world 输入: n (n > 0) 比如输入的n为10,就将Hello world打印十 #include <stdio.h> #in ...

  8. PCA与特征选取

    一.什么是PCA PCA,即PrincipalComponents Analysis,也就是主成份分析: 通俗的讲,就是寻找一系列的投影方向,高维数据按照这些方向投影后其方差最大化(方差最大的即是第一 ...

  9. VMware中安装系统提示没有可用的映像(No image available)

    今天新建了个虚机在装系统的时候提示"没有可用的映像" 之所以会出现这种情况是因为在新建虚机的时候选择的设置不同导致的,此处不管选第一项还是第二项都会虚机设置中多了一个软盘的配置项, ...

  10. 手把手教你画一个 逼格满满圆形水波纹loadingview Android

    才没有完结呢o( ̄︶ ̄)n .大家好,这里是番外篇. 拜读了爱哥的博客,又学到不少东西.爱哥曾经说过: 要站在巨人的丁丁上. 那么今天,我们就站在爱哥的丁丁上来学习制作一款自定义view(开个玩笑,爱 ...