web 高并发分析
《高并发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 高并发分析的更多相关文章
- 针对web高并发量的处理
针对web高并发量的处理 针对高并发量的处理 一个老生常谈的话题了 至于需要运维支持的那些cdn.负载均衡神马的就不赘述了 你们都懂的 虫子在此博文只讲一些从程序角度出发的一些不错的解决方案. 至于从 ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- [超简洁]EasyQ框架-应对WEB高并发业务(秒杀、抽奖)等业务
背景介绍 这几年一直在摸索一种框架,足够简单,又能应付很多高并发高性能的需求.研究过一些框架思想如DDD DCI,也实践过CQRS框架. 但是总觉得复杂度高,门槛也高,自己学都吃力,如果团队新人更难接 ...
- 面试官问你如何解决web高并发这样回答就好了
所谓高并发,就是同一时间有很多流量(通常指用户)访问程序的接口.页面及其他资源,解决高并发就是当流量峰值到来时保证程序的稳定性. 我们一般用QPS(每秒查询数,又叫每秒请求数)来衡量程序的综合性能,数 ...
- web高并发的解决方案
我们先了解一下什么是并发和并行 并发:并发是指两个或多个事件在同一时间间隔内发生,就是可以重叠在时间段启动,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机 ...
- Java高并发秒杀API之业务分析与DAO层
根据慕课网上关于java高并发秒杀API的课程讲解用maven+ssm+redis实现的一个秒杀系统 参考了codingXiaxw's blog,很详细:http://codingxiaxw.cn/2 ...
- 2017.4.26 慕课网--Java 高并发秒杀API(一)
Java高并发秒杀API系列(一) -----------------业务分析及Dao层 第一章 课程介绍 1.1 内容介绍及业务分析 (1)课程内容 SSM框架的整合使用 秒杀类系统需求理解和实现 ...
- Netty Redis 亿级流量 高并发 实战 (长文 修正版)
目录 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -30[ 博客园 总入口 ] 写在前面 1.1. 快速的能力提升,巨大的应用价值 1.1.1. 飞速提升能力,并且满足实际开发要求 1 ...
- Netty 高并发 (长文)
目录 Netty+Zookeeper 亿级 高并发实战 (长文) 写在前面 1. 高并发IM架构与部分实现 1.1. 高并发的学习和应用价值 1.1.1. 高并发IM实战的价值 1.1.2. 高并发I ...
随机推荐
- Troubleshooting Autoinvoice Import
metalink :1089172.1 In this Document Purpose Troubleshooting Steps AutoInvoice Execution Repor ...
- CSS 控制table 滑动及调整列宽等问题总结
一. 通过css控制table y方向上滚动 html中没有滚动条,可以根据overflow属性的scroll来对table显示不完全的内容进行滚动. 只是y方向上滚动,很简单,只要设置div的hei ...
- UNIX环境高级编程——记录上锁(fcntl函数)以及死锁检测
一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数, ...
- Oracle生成查询包含指定字段名对应的所有数据表记录语句
应用场合:已知字段名字,查询数据库中所有数据表中包含该字段名的所有数据表 操作办法:指定字段名,数据库表用户,执行下面查询语句即可 --Oracle生成查询包含指定字段名对应的所有数据表记录语句 de ...
- 【翻译】在Ext JS应用程序中构建可维护的控制器
原文:Building Maintainable Controllers in Ext JS Apps 你好You Had Me 你是Tearing Me Apart 模板We Dont Need t ...
- 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据
在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...
- numpy教程:逻辑函数Logic functions
http://blog.csdn.net/pipisorry/article/details/48208433 真值测试Truth value testing all(a[, axis, out, k ...
- 程序压力测试、性能测试AB、Webbench、Tsung
负载生成器是一些生成用于测试的流量的程序.它们可以向你展示服务器在高负载的情况下的性能,以及让你能够找出服务器可能存在的问题.为了得到更加客观和准确的数值,应该从远程访问.局域网访问 ...
- 开源项目管理系统:ProjectForge
ProjectForge是一个Java编写的开源的基于Web的项目管理解决方案.包括:工时表(Timesheet).费用管理.项目甘特图,控制和管理工程分解结构.集成JiRA做为问题管理系统. 使用的 ...
- 《java入门第一季》之面向对象静态内部类和非静态内部类的区别
很感谢在内部类章节,"开心阳"先生给与的建议.使用静态内部类.这里就简单说一下静态内部类的使用. package com.devin; public class MyMain{ p ...