《高并发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. C语言--static修饰变量

    Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用static修饰变量,不论这个变量是全局的还是 ...

  2. 后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异

    「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点. 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现 ...

  3. [mysql]一次主从数据不一致的问题解决过程

    之前一篇: 主从更换ip之后重新建立同步 情况时这样的 昨天晚上主动2个机器都迁移了,然后今天才把主动重新连接上,但是从库的偏移量是从今天当前时刻开始的,也就是说虽然现在主动看似正常,其实是少了昨天的 ...

  4. PO核准通知界面修改

    想在notification頁面把供應商的稅捐代碼帶出來,添在如下紅框中 PO_WF_PO_NOTIFICATION head information:get_po_approve_msg line ...

  5. 基于easyui框架中input 类型的checkbox拼接成字符串存入数据库和读取选中---善良公社项目

    项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端ht ...

  6. android官方技术文档翻译——Android Lint

    本文译自androd官方技术文档<Android Lint>,原文地址:http://tools.android.com/tips/lint. 本文地址:http://blog.csdn. ...

  7. 在Windows下搭建Gitlab服务器

    一.GitLab简介 GitLab 是一个用于仓库管理系统的开源项目.使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类 ...

  8. 网站开发进阶(二十五)js如何将html表格导出为excel文件

    js如何将html表格导出为excel文件        赠人玫瑰,手留余香.若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉! jsp页面数据导出成excel的方法很 ...

  9. 总结C语言在嵌入式开发中应用的知识点(文件数据的加密与解密)

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  10. Linux下进程通信之管道

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...