`

性能驱动下的架构实例

阅读更多

大型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  
不错,值得学习一下!

相关推荐

    《GPU高性能计算之CUDA》实例

    本书除了详细介绍了CUDA的软硬件架构以及C for CUDA程序开发和优化的策略外,还包含有大量的实例供读者学习参考用。 下表是各个实例的介绍列表。 文件夹 对应书中章节 备注 ACsearch_DPPcompact_with_driver ...

    领域驱动设计C#2008实现 - 问题.设计.解决方案,完整扫描版

    《领域驱动设计C# 2008实现:问题·设计·解决方案》是第一本也是唯一一本...《领域驱动设计C# 2008实现:问题·设计·解决方案》面向有经验的C#和.NET开发人员,以进一步提升读者编写高性能和可扩展的应用程序的技能。

    GPU高性能计算之CUDA》实例

    本书除了详细介绍了CUDA的软硬件架构以及C for CUDA程序开发和优化的策略外,还包含有大量的实例供读者学习参考用。 下表是各个实例的介绍列表。 文件夹 对应书中章节 备注 ACsearch_DPPcompact_with_driver...

    《精通Linux 设备驱动程序开发》.(Sreekrishnan).pdf

    14.4 块驱动程序数据结构和方法296 14.5 设备实例:简单存储控制器298 14.5.1 初始化299 14.5.2 块设备操作301 14.5.3 磁盘访问302 14.6 高级主题304 14.7 调试306 14.8 查看源代码306 第15章 网络...

    精通LINUX设备驱动程序开发

    串行设备驱动程序 118 6.1 层次架构 119 6.2 uart驱动程序 121 6.2.1 设备实例:手机 122 6.2.2 rs-485 132 6.3 tty驱动程序 132 6.4 线路规程 134 6.5 查看源代码 141 第7章 输入设备驱动程序 143 7.1 ...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    8.3 网络设备驱动程序实例 8.3.1 初始化函数 8.3.2 打开函数 8.3.3 关闭函数 8.3.4 发送函数 8.3.5 接收函数 8.3.6 中断处理函数 第9章 USB驱动程序开发 9.1 USB驱动程序简介 9.1.1 USB背景知识 9.1.2 ...

    网络驱动程序设计指南

    第二章 内核模式驱动程序的网络结构 6 2.1 Windows 2000 网络结构和OSI模型 6 2.2 NDIS驱动程序 7 2.2.1 NDIS微端口驱动程序 7 2.2.2 NDIS中间层驱动程序 8 2.2.3 NDIS协议驱动程序 9 2.3 TDI驱动程序 9 2.4 网络...

    双侧驱动轴向柱塞马达斜盘结构设计及优化

    斜盘是双侧驱动轴向柱塞马达实现液压力平衡的关键零部件之一,能否合理设计斜盘结构对整个马达的性能有很大的影响。基于双侧驱动轴向柱塞马达,引入了新型斜盘结构,分析了柱塞及滑靴运动轨迹对斜盘尺寸的影响。结果...

    win2000驱动程序设计指南

    内核模式驱动程序的网络结构 6 2.1 Windows 2000 网络结构和OSI模型 6 2.2 NDIS驱动程序 7 2.2.1 NDIS微端口驱动程序 7 2.2.2 NDIS中间层驱动程序 8 2.2.3 NDIS协议驱动程序 9 2.3 TDI驱动程序 9...

    MINA通讯框架的两个简单实例和文档

    它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议(如TCP/IP,UDP/IP协议等)下快速高效开发。 Apache Mina也称为:  NIO框架  客户端/服务端框架(典型的C/S架构)  网络套接字(networking...

    JAVA上百实例源码以及开源项目源代码

     Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式  //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在...

    软件设计模式与体系结构

    既讨论了软件体系结构的基本理论知识,又介绍了软件体系结构的设计和工业界应用实例,强调理论与实践相结合。 全书共4篇22章,第一篇“基础篇:软件体系结构的理论”,第二篇“软件复用与构件库的设计”,第三篇...

    性能测试从零开始:LoadRunner入门与提升

    12.1.2 Automation Center性能测试框架设计实例 319 12.1.3 定义XML格式的性能测试任务文件 325 12.1.4 Automation Center性能测试调度运行 329 12.1.5 性能测试报告诊断系统 330 12.2 核心技术及具体实现方法 332 ...

    java源码包---java 源码 大量 实例

     Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式  //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在...

    汇编语言实例add.asm

    汇编语言通常用于性能关键任务和系统编程,如操作系统、驱动程序和嵌入式系统开发。虽然它比高级语言更难以编写和维护,但它提供了对硬件的直接和完整控制,使程序员能够优化代码以实现最高效的性能。学习汇编语言还...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    1.2 RAC体系结构 1.2.1整体结构 1.2.2物理层次结构 1.2.3逻辑层次结构 1.3 RAC的特点 1.3.1双机并行 1.3.2高可用性 1.3.3易伸缩性 1.3.4低成本 1.3.5高吞吐量 1.4 RAC存在的问题 1.4.1稳定性 1.4.2高...

    JAVA上百实例源码以及开源项目

     Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式  //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在...

Global site tag (gtag.js) - Google Analytics