大浏览量系统的静态化架构设计

简介: 淘宝前台系统的优化历程 2009年,系统拆分,静态文件合并,前端页面异步化和JSON化。 2010年,去DB依赖,引入缓存,提升单机QPS,关注用户体验。 2011年,优化进入深水区Velocity,BigPipe。

淘宝前台系统的优化历程

2009年,系统拆分,静态文件合并,前端页面异步化和JSON化。

2010年,去DB依赖,引入缓存,提升单机QPS,关注用户体验。

2011年,优化进入深水区Velocity,BigPipe。

2012年,静态化改造。

2013年,统一Cache,CDN化,网络协议。

高访问系统的静态改造

什么是静态化系统
几个特征:

  1. 一个页面对应URL通常固定。
  2. 在页面中不能包含与浏览者相关的因素,这里所说的“不能包含”不包括JS动态生成的部分,也就是在页面中HTML代码不能明显地含有与浏览器相关的DOM。
  3. 在页面中不包含时间因素。页面同样不能含有与时间(而是服务端输出的时间)相关的因素,页面中的DOM不随时间变化而变化。
  4. 页面中不包含地域信息。
  5. 不能包含Cookie等私有数据。

为什么要进行静态化架构设计

系统经过多次优化升级,包括系统架构的升级,系统本身的模块优化,代码优化和增加各种缓存等这些优化,我们的优化层次都是在java系统中做改进的。在这种情况下压测我们的java系统,性能依旧不能满足我们的期望,我们的目标是再上一个数量级。java本身遇到了瓶颈,自然就想到了静态化这种架构,让请求尽量不进过java。

那么系统静态化为何能做java系统做不到的高性能呢?静态化有如下优点:

  1. 改变了缓存方式。直接缓存http连接而不是仅仅缓存数据,web代理服务器根据请求url直接取出对应的http相应头和响应体直接返回,这个响应连http协议都不用重新组装,同样http请求头也不一定需要解析,所以做到了获取数据最快。
  2. 改变了缓存的地方。不是在java层面做缓存而是直接在web服务器层上做,所以屏蔽了java层面的一些弱点,而web服务器(如nignx,apache,varnish)都擅长处理大并发的静态文件请求。

如何改造动态系统?

  1. URL唯一化
  2. 分离与浏览者相关的因素。
  3. 分离时间因素。
  4. 异地化地域因素。
  5. 去掉Cookie。
  6. 动态内容结构化。(ESI和CSI)

ps:

ESI(Edge Side Includes)-即在web代理服务器做动态内容请求,并将请求插入到静态页面中,当用户拿到页面时已经是一个完整的页面了。这种方式对服务端性能有些影响(同步集中请求),对对用户体验较好。

CSI(Client Side Include)-这种方式就是发起一个异步js请求单独向服务端获取动态内容。对服务端性能影响小,但是用户端页面有些延时。

如何选择静态化方案的设计?

nignx+cache(静态文件)+java 结构虚拟机单机部署

nignx+cache(静态文件)+java 结构实体机(增大cache内存,增大缓存命中率-采用一致性hash分组)单机部署

统一cache层+java(把nignx和cache层统一管理和运维)

缓存失效问题?

被动失效:采用设置cache时间长度自动失效,也可以开发一个cache管理界面手工失效某些cache。

主动失效:

  1. cache失效中心监控数据库表变化发送purge失效请求
  2. 装修时间戳比较失效装修内容
  3. java系统发布清空cache
  4. vm模板发布清空cache 

 其中失效中心承担了主要的失效功能,失效中心的逻辑图如下:

 

目录
相关文章
|
2月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
216 3
|
12天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
11天前
|
网络协议 安全 中间件
系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)
本文全面介绍了计算机系统及其相关技术,涵盖计算机系统概述、硬件、软件等内容。计算机系统由硬件(如处理器、存储器、输入输出设备)和软件(系统软件、应用软件)组成,旨在高效处理和管理数据。硬件核心为处理器,历经从4位到64位的发展,软件则分为系统软件和应用软件,满足不同需求。此外,深入探讨了计算机网络、嵌入式系统、多媒体技术、系统工程及性能评估等多个领域,强调了各组件和技术在现代信息技术中的重要作用与应用。
22 3
|
25天前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
|
23天前
|
Cloud Native Devops 持续交付
探索云原生架构:构建高效、灵活和可扩展的系统
本文将深入探讨云原生架构的核心概念、主要技术以及其带来的优势。我们将从云原生的定义开始,了解其设计理念和技术原则;接着分析容器化、微服务等关键技术在云原生中的应用;最后总结云原生架构如何助力企业实现数字化转型,提升业务敏捷性和创新能力。通过这篇文章,读者可以全面了解云原生架构的价值和应用前景。
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
2月前
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
41 5
|
2月前
|
微服务 API Java
微服务架构大揭秘!Play Framework如何助力构建松耦合系统?一场技术革命即将上演!
【8月更文挑战第31天】互联网技术飞速发展,微服务架构成为企业级应用主流。微服务将单一应用拆分成多个小服务,通过轻量级通信机制交互。高性能Java Web框架Play Framework具备轻量级、易扩展特性,适合构建微服务。本文探讨使用Play Framework构建松耦合微服务系统的方法。Play采用响应式编程模型,支持模块化开发,提供丰富生态系统,便于快速构建功能完善的微服务。
37 0
|
2月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
40 0
|
2月前
|
消息中间件 缓存 Java
如何优化大型Java后端系统的性能:从代码到架构
当面对大型Java后端系统时,性能优化不仅仅是简单地提高代码效率或硬件资源的投入,而是涉及到多层次的技术策略。本篇文章将从代码层面的优化到系统架构的调整,详细探讨如何通过多种方式来提升Java后端系统的性能。通过对常见问题的深入分析和实际案例的分享,我们将探索有效的性能优化策略,帮助开发者构建更高效、更可靠的后端系统。
下一篇
无影云桌面