大型网站,比如门户网站,在海量用户访问、高并发请求方面,基本的解决方案是以下几点:
1、高性能的数据库(oracle/db2/mysql...)
2、高性能的Web容器(weblogic/apache...)
3、高效率的编程语言(java/C#)
4、使用高性能的服务器(小型机、PC服务器)
5、集群分布式运行(比如上百台小型机器在线运行)
但是在在线用户上百万,日点击量超亿,而数据达几十T,甚至日数据量就达到T级别这种情况下还是难以解决
大型网站面临的高负载和高并发问题。
本人也经常关注这方面的解决方案,结合自己的经验。总结了一部分常用的设计,希望各位多多指点。
一、设计上有足够弹性
这是在前期架构设计师要足够考虑到的。最终目的是通过物理设备的线性投入来应付业务量的增长,而不止于受到技术框架应用部署的限制,甚至推到重来,这样的结构设计就是弹性的设计,当然这里还包括业务上的弹性设计(目前的开发模式、架构设计在很大程度上也是为了解决这个问题)。
一般企业也是极力避免这种情况的发生,否则失去的不仅是成本投入还包括了客户资源。
二、页面静态化
即静态html格式,这样避免了对数据资源的访问,同时也大大降低了应用的CPU消耗。如果能静态页面的信息尽量静态化。
三、无状态
这里说的无状态是服务器尽量设计成无状态的与客户端通讯,避免了占用大量内存的情况,但这也不是绝对的。部分应用中的状态保留也能大大减少IO流量与数据库的访问压力。看具体情况而定。
四、数据库集群、横向/纵向切分
数据库集群能缓解数据库的压力,但节点过多又会引起写入同步消耗过大。
数据库横向切分也就是把一个业务数据按不同属性(比如地域归属、用户名hashcode)来平均的分到各个数据库上。这样控制分库的粒度也就是控制了数据库的分布,能大大缓解单个数据压力过大访问受限的情况,不利的情况是经常要跨库访问,这样情况可能会变得比较复杂。
数据库纵向切分也就是按业务内容来分不同的数据库,比如客户资料是一个数据库保存,而商品订单资料又分一个数据库保存,这样也能把数据库压力分解一部分。
通过数据库的切分也能大大减少单个故障点的影响范围。
五、异步批量处理
对于非紧急数据,可以采用异步批量处理,安排在非高峰时刻也能提高应用的使用效率。同时批量本身在实现上效率也高于单笔业务处理。
六、表的分区分段分表设计
这是针对一个数据库的情况下,防止单表数据过大,采用分段分区把一张表分解到不同的物理设备上,提高查询速度,而可以按业务性质把一张表分成多张表,分区分表可以组合应用,这样在DB维护上也非常有益。同时分表也能有效降低I/O锁情况。
七、分历史数据库
对于很多网站来说海量的历史数据是很少用到的,可以按照业务性质,把不修改的数据迁移到专门的历史数据库上归档,比如三个月以前的交易订单、用户的资料修改记录等。对于需要查询历史数据的情况,可以单独提供这类应用来查询历史数据库。这样能避免不断增加的交易数据带来的性能压力。
八、分活动和非活跃用户
这是按照用户的优先级别分别存储访问,对于少量的活跃用户提供高速的访问(比如通过缓存),这样实际上大大提高了大部分用户请求的处理速度,实际上也大幅度降低应用压力提高并发能力,而对于非活跃用户继续保留了完整的请求服务,客户基本不会产生使用上的差异。
九、分布式的应用
包括前台服务器和中间件(其实包括前面描述的多个数据库),把压力尽可能的均匀地分布到很多服务器上,而服务器可以是上百台的线性增加。
十、使用 Epoll/IOCP 来提高并发性能
这些在游戏类网站上非常有用,能大大提高单台应用服务器的处理能力。结合多线程多进程多服务器处理可以解决高并发请求的情况。
十一、建立专门的文档服务器
包括的页面图片、软件、文档等数据,由于IO流量大,比较占用应用服务器,必要的时候单独建立服务器存放。这种对于有大量图片的应用比如淘宝商品应该是非常有效的。
十二、分查询与更新业务数据库
对于更新类关键业务提供强有力的高效保证(这类业务相对查询量应该比较少),而对于查询库则可以提供廉价的数据库服务。
十三、缓存
其实所有的应用都或多或少的使用到了缓存,缓存包括 CPU /内存 /硬盘/网络/客户端的缓存,客户端可以缓存js/图片等信息,而不用频繁的访问应用,内存缓存是非常有效的方式,可以把静态的数据放到应用内存上,而不是频繁访问数据库查询,对于简单数据库其实还可以使用专业的缓存应用,比如memcache。
十四、海量数据使用非关系数据库
对于访问记录等数据结构简单可靠性要求不高的数据持久化,可以不用关系数据库,因为数据库提供的食物访问一致性、隔离性、关系维护消耗了绝大部分资源,而这些功能对不是应用的要点。所以可以考虑使用文件方式或者其他号称NOSQL的方式来存储使用。
本人认为应用通过分布式并发负载均衡运行可以解决应用服务器的性能问题(通过良好的设计来保证当业务持续增加的时候通过服务器的线性增加就能解决),关键点是数据库的唯一一致性要求(一份数据只能保存在一个地方,更新查询都以它为基础)决定了数据库的成本是非常高的,甚至于无法用资金来解决(大型机也不见得能保证海量数据的访问处理),所以只要解决了数据库的存放问题也就能解决高性能网站的主要问题 。
上边说了这么多基本上还是把数据对象分开存放、尽量减少对于数据库的访问的原则提出解决方案的。
对于系统的高可用性这里也总结出几条:
A、良好成熟的框架设计(并不一定是非常先进),优秀的业务模型,高内聚低耦合的模块功能。
B、优化部署配置,包括数据库的优化。
C、预防为主,有专门的监控负责人,能定期分析系统健康负载情况。在问题爆发前能及时预警。
D、有良好的单点控制与应急措施,比如当发帖非常耗性能的时候,单独关掉“发帖”,
保证大部分的游览功能。 保证客户应用的最大化
E、有效专业的开发管理团队与规范的制度
分享到:
相关推荐
【Lua语言在轻量级Web服务器设计中的应用】 Lua是一种轻巧、高效的脚本语言,因其易扩展性和良好的整合性而被广泛应用于各种领域。在轻量级Web服务器设计中,Lua的优势尤为突出。本文主要探讨了如何利用Lua与C语言...
通过查看和分析源码,我们可以理解软件的工作原理和设计思路。 【压缩包子文件的文件名称列表】:WEB服务器项目源码 在WEB服务器项目源码中,我们可以期待看到以下几个关键部分: 1. **主程序文件**:通常包含...
这个压缩包包含了易语言的源代码,供用户研究和参考,以便理解Web服务器的基本工作原理以及易语言在构建这类应用时的语法和编程思路。 易语言是一种中文编程语言,它的设计理念是“易学易用”,特别适合中国用户...
【基于Web服务器的电网监控系统设计】 随着信息技术的飞速发展,嵌入式系统在电力监控领域的应用越来越广泛。本文主要介绍了如何利用ARM11...这种系统设计思路和实现方法为未来电力监控系统的研发提供了参考和指导。
Nginx是一个轻量级的Web服务器,也常用于反向代理、负载均衡和HTTP缓存。HAProxy是一个高性能的负载均衡器,适用于处理大量连接的场景。LVS则是一个运行在Linux内核上的负载均衡解决方案。 接下来,我们探讨TCP连接...
基于java web开发的mes生产制造系统,该系统基于ssm框架开发,系统功能包括:系统管理、车间基础数据建模、计划管理、物料控制、生产执行、质量管理、库存管理、看板管理、数据分析等主体功能模块。广泛应用于汽车、...
### Nginx 高性能 WEB 服务器系列知识点详解 #### 1. Nginx 入门简介 **Nginx** 是一款广受欢迎的高性能 HTTP 和反向代理服务器,同时也可作为 IMAP/POP3/SMTP 代理服务器。它以其出色的稳定性、丰富的功能集、...
大型仪器共享管理系统的设计思路主要包括:设备资源的梳理、共享流程的设计、系统平台的功能设计和技术实现等方面。 在设备资源的梳理方面,需要对设备资源和共享流程进行梳理,根据仪器设备资源的类型设置仪器设备...
Servlet是Java编写服务器端应用程序的标准API,它扩展了Web服务器的功能,能够处理HTTP请求并生成响应。JSP(Java Server Pages)则是动态网页开发技术,允许开发者将HTML代码与Java代码混合编写,实现视图层的动态...
Elixir 是一种并发性极强、性能优秀的函数式编程语言,而 Raxx 的设计思路就是充分利用 Elixir 的特性来实现高效的 Web 应用开发。 **Rack 兼容性** Raxx 与 Rack 框架兼容,Rack 是 Ruby 社区广泛采用的一种 Web ...
在系统架构设计中,总体思路应围绕负载均衡、Web应用开发架构、数据存储设计以及不同网络用户访问的考虑。负载均衡技术(如Nginx或HAProxy)用于分散流量,确保无单点故障。Web应用开发可以采用微服务架构,每个服务...
### 领悟Web设计模式 #### 引言 随着技术的发展,Web应用程序的设计与实现方式也在不断进化。...此外,对于大型项目来说,合理地运用这些设计模式尤为重要,它能帮助我们构建更加健壮和灵活的应用程序。
综上所述,这两本书籍将为读者提供关于大型网站架构的全面视图,从Web开发技术、高并发处理策略到Java中间件的实战经验,再到系统架构设计的深度解析,都是对于希望在互联网行业从事大型网站开发或者技术架构师角色...
在"第一讲-大型互联网项目架构设计实践及架构优化思路.pdf"中,我们重点关注了如何构建一个能够应对高可用性和高并发挑战的系统,以及如何通过一系列的技术手段进行性能优化。这里我们将深入探讨其中的关键知识点。 ...
此外,通过对Apache等Web服务器进行适当的配置调整(如减少非必要的LoadModule加载),也能有效提升整体性能。 #### 数据库集群与库表散列 随着网站流量的增长,单一数据库服务器往往难以应对高并发请求带来的挑战...
【标题】"毕业答辩-ASP基于WEB网上聊天室设计(源代码论文).rar" 提供的是一个关于使用ASP技术构建Web在线聊天室的项目,它包括了源代码和相关的学术论文,适合于计算机科学与技术专业学生进行毕业设计或者研究。...
7. **论文**:论文部分可能详细介绍了系统的功能需求、设计思路、实现方法和测试结果,是理解系统开发过程的重要参考资料。通过阅读论文,学习者可以了解到如何从需求分析到系统实施的整个流程。 8. **实验室设备...
服务器软件基于Python开发,采用了浏览器/Web服务器结构,便于维护与扩展,且能够支持多销售点的运作。 知识点三:系统软件开发工具 在实现水资源监测系统的过程中,使用的开发工具包括: 1. Zope:一个开源的Web...
而Jetty和Tomcat则功能强大,支持多线程、WebSocket等高级特性,适用于大型Web应用。 毕业设计和论文撰写时,你可以选择其中一种语言,深入研究其实现HTTP服务器的过程。这包括但不限于以下步骤: - 分析HTTP协议的...
摘 要:本文结合机房环境设备的管理需要,分析了远程监控系统的特点,提出基于嵌入式Web服务器的远程监控系统设计思路、体系架构方法,并对基于OPC技术的互联与基于嵌入式Web服务器的互联作了简要对比。文章结合CGI...