`

性能驱动下的架构实例

阅读更多

大型WEB互联网应用都是在市场的锤炼中成长的,以前提到过性能需求的驱动对于架构的影响,一个1M PV和一个100M PV的网站肯定是不一样的。这里仅仅给出几个典型的例子,兴许你对此能有收获。

 

初期,只有简单的应用服务器和DB服务器分家,使用简单的Jetty容器,系统的瓶颈在DB侧。简单就是美,网站刚刚运营,不考虑太多,能访问就是王道,给用户提供丰富的内容:


=================================================================

 

系统在发展中不断地演化。

有一天发现用户压力越来越大,终于无法承受了,系统屡屡到达崩溃的边缘,在现有硬件和架构条件下很难支撑现有的业务,做出了这样的改变:


在这次改变中,做了这几件重要的事情:

1、引入了全页面的缓存。互联网应用缓存为王,全页面的缓存可以起到立竿见影的效果。

2、把页面展现抽象成为“主题”,和页面数据分离开来。并且,为此,引入了“聚合”的概念,它为以后的进一步发展打下了一个伏笔。

3、为了缓解数据库的瓶颈,使用了RAC方式做持久层的集群。

4、对于JS、CSS、图片等几乎一成不变的静态资源,引入反向代理,优先处理。

 

=================================================================

 

网站安安静静地发展,悄悄地演化。

终于有一天,用户访问量激增,百万级的PV达到了,WEB2.0业务也增加进来,缓存的命中率越来越低,CPU成为了瓶颈,访问异常缓慢。这一次,又要动刀了:

 


这一次的架构重构做了这么几件重要的事情:

1、静态资源(特别是可供下载的文件),使用CDN缓解压力。

2、把请求拆分成主请求、异步数据请求和静态资源请求,其中主请求仅仅是获取页面不变的部分(模板+静态数据),动态的数据以异步JSON的方式获取,并在浏览器端使用JavaScript聚合。这一步把某些聚合操作放置到了客户端进行,缓解了服务端压力。

3、真正将页面的聚合展现和页面的生成拆分开来,保证了用户响应是快速的。

4、引入多层次缓存(内存中对象集合使用Memcached缓存,接口层面缓存报文,页面缓存缓存文件等),同时,对于层次的划分,容易将整个系统拆分成若干个子部件独立运作,简单、独立。

5、数据库进一步拆分,读写分离。

6、页面分块。这是大型Web2.0网站共有的特点,一个页面上往往总有那么一部分是固定不变的,这些部分应当能以页面片段的形式缓存到磁盘上,每次页面生成的时候只需要更关注变化的部分即可。

 

=================================================================

 

继续、继续。

访问量增长了几十倍,集群的服务器也第一次达到了三位数,系统不稳定,速度重新落下,问题定位也无比困难,一切又开始扑朔迷离起来。


这一次,不可避免地又做了架构上的调整,首要的目标,是以隔离解耦的方式增加系统稳定性,同时,更便于产品化管理:

1、整体采用SOA方式布局,按照功能划分集群,并且每个功能集群定义为一个“服务”,内部采用REST风格的接口访问服务。服务驱动和编制引擎(ESB角色)定时把可以提前生成的静态数据存放到共享存储上。

2、清晰化聚合逻辑,静态的数据尽量在服务端聚合完成,减少客户端数据请求的流量。

3、引入NOSQL数据库和廉价存储,适当放弃一致性,为海量数据做准备。

4、开发核心业务功能包部署引擎(基于OSGi),对于业务的定制,只需要按照功能包定义的格式开发,完成后可做到不重启应用增加业务功能。

 

文章系本人原创,转载请注明作者和出处

  • 大小: 2 KB
  • 大小: 16.4 KB
  • 大小: 30.1 KB
  • 大小: 37.4 KB
分享到:
评论
1 楼 javaboy2010 2012-12-31  
不错,值得学习一下!

相关推荐

    汽车LED照明驱动电路设计实例.docx编程资料

    通过对汽车LED照明驱动电路的设计实例进行分析,我们可以看到合理的选择LED的连接方式和驱动器类型对于保证LED照明系统的性能至关重要。无论是采用串联还是并联方式,都需要考虑到实际应用场景的需求,并采取相应的...

    高性能服务器架构实例 服务器端加客户端

    综上所述,"高性能服务器架构实例 单机测试突破 3W连接"的实现涉及了众多的软件工程和技术细节,包括异步I/O、线程池管理、非阻塞I/O、事件驱动编程、连接复用、负载均衡、内存管理、协议优化、数据压缩以及日志监控...

    windows 驱动开发实例代码

    2. **驱动程序结构**:涵盖Driver Entry、Device Objects、IRP(I/O Request Packets)管理等,这些都是驱动程序的核心组成部分。 3. **设备注册**:讲解如何在系统中注册新设备,包括INF文件的编写,用于安装和...

    IGBT驱动与保护电路设计及应用电路实例.pdf

    为了帮助理解IGBT驱动与保护电路的设计,书籍中可能会提供一些实际的应用电路实例,通过案例分析来讲解在不同应用下如何设计驱动与保护电路,并对电路中可能遇到的问题给出解决方案。 5. 优化与调试: 在IGBT驱动...

    ARM嵌入式Linux设备驱动实例开发

    ARM嵌入式Linux设备驱动实例开发是一本深入探讨在基于ARM架构的嵌入式系统中如何开发和优化Linux设备驱动程序的专业书籍。ARM处理器因其低功耗、高性能的特点,在嵌入式领域广泛应用,如智能手机、物联网设备、工业...

    ARM嵌入式Linux设备驱动实例开发 李亚锋

    《ARM嵌入式Linux设备驱动实例开发》与《嵌入式设计及Linux驱动开发指南:基于ARM9处理器》这两本书都是深入探讨嵌入式系统领域的重要参考资料,特别针对ARM架构和Linux操作系统。以下是对这两本书中涉及的关键知识...

    sql数据库驱动包和实例

    本资源包含的“sql数据库驱动包和实例”显然对学习和开发涉及SQL数据库的应用非常有帮助。 首先,让我们深入理解SQL驱动包的作用。SQL驱动包通常包括以下几部分: 1. JDBC驱动:对于Java开发者来说,JDBC(Java ...

    驱动实例资源.zip,驱动源码实例,从基础到复杂一步步的进步

    "Hello World"驱动通常是一个入门级别的程序,它向开发者展示了驱动的基本结构和编写流程,包括初始化、注册、处理I/O请求等基本步骤。 随着实例的深入,你将学习到如何编写更复杂的驱动,如中断处理、DMA(直接...

    2个文件系统过滤驱动开发实例

    1. 设计驱动架构:确定驱动的功能需求,设计驱动的模块和接口。 2. 编写驱动代码:使用如C或C++语言,遵循Windows Driver Model (WDM) 或通用Windows驱动程序模型 (UMDF/WMDF) 规范。 3. 配置编译环境:如使用Visual...

    模型驱动体系结构MDA的实例研究

    ### 模型驱动体系结构MDA的实例研究 #### 一、MDA概述 模型驱动体系结构(Model Driven Architecture, MDA)是由Object Management Group (OMG)提出的一种软件开发方法论,旨在解决不同中间件系统之间的集成问题。...

    SEP4020底层驱动以及一些实例

    10. **硬件描述语言(HDL)**:虽然不是直接的驱动编程,但理解SEP4020的VHDL或Verilog描述有助于理解其内部结构,从而编写更高效的驱动。 总的来说,这个压缩包提供了一个全面的学习路径,涵盖了从基础驱动到实际...

    WDM式驱动程序实例源码

    在"MYWDM"这个压缩包中,我们可能找到了一个实用的WDM驱动程序实例源码,这对于理解WDM驱动的工作原理和开发自己的驱动程序非常有帮助。 WDM驱动程序的核心特点在于它的分层结构,主要包括三部分:用户模式驱动...

    WDM驱动程序实例,用DriverStudio加vc

    1. **驱动程序结构**:理解WDM驱动的层次结构,包括PnP(Plug and Play)管理器、Filter驱动和Miniport驱动等组件。每个组件都有其特定的功能和在驱动堆栈中的位置。 2. **IRP(I/O请求包)处理**:IRPs是驱动程序...

    FreeBSD 驱动实例代码

    通过深入学习和实践这些FreeBSD驱动实例代码,开发者可以更好地理解和控制硬件资源,优化系统性能,同时为特定硬件设备提供自定义支持。这不仅提升了FreeBSD系统的兼容性,也为定制化系统解决方案提供了基础。

    WindowsXPWDM驱动实例,使用DriverW

    总的来说,Windows XP WDM驱动实例结合DriverWORKS,为开发者提供了一套完整的解决方案,用于构建高效、稳定的设备驱动程序。掌握WDM驱动开发不仅能够提升硬件设备在Windows XP上的性能,还能增强系统的兼容性和稳定...

    usb驱动开发例程

    5. 上层驱动和筛选器驱动:有时,为了实现特定的功能或者增强设备性能,开发者会在函数驱动之上添加筛选器驱动。这些驱动可以处理特定的设备功能,比如数据过滤、错误处理等。 6. 调试与测试:完成驱动编写后,...

    基于ARM的裸机驱动实例

    "基于ARM的裸机驱动实例"是一个专注于裸机环境下,即没有操作系统支持时,对硬件设备进行驱动程序开发的学习资源。在这样的环境中,开发者需要直接与硬件打交道,编写底层的驱动代码,以实现对硬件功能的控制。 ADS...

    ARM嵌入式Linux设备驱动实例开发(书籍+光盘)

    《ARM嵌入式Linux设备驱动实例开发》是一本专注于ARM架构下Linux系统设备驱动程序开发的专业书籍。书中全面深入地探讨了如何为ARM处理器编写和优化Linux设备驱动,旨在帮助读者掌握这一领域的核心技术和实践方法。 ...

Global site tag (gtag.js) - Google Analytics