大型网站技术架构:核心原理与案例分析

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 链接性能优化Web前端性能优化应用服务器性能优化软件质量保证代码控制自动化发布灰度发布网站运行监控伸缩性设计按功能物理分离负载均衡分布式缓存可扩展设计利用分布式消息队列降低系统耦合性利用分布式服务打造可服用的业务平台1 链接个人博客: alex-my.xyzCSDN: blog


1 链接

个人博客: alex-my.xyz

CSDN: blog.csdn.net/alex_my

本书作者: 李智慧

2 性能优化

1 Web前端性能优化

  • 浏览器优化访问
    • 减少http请求。主要是合并css,合并js,合并图片。将浏览器一次访问所需要的js,css合并成一个文件。
    • 使用浏览器缓存。css,js, logo, 图标等静态资源文件更新都比较低,而这些文件几乎又是每次http请求都需要的。通过设置HTTP头中的Cache-Control, Expires的属性,可设定浏览器缓存。
    • 启用压缩。在服务端对文件进行压缩,在浏览器端对文件进行解压缩,可以有效减少通信传输的数据量。对html, css, js文件启用GZip压缩可以达到较好的效果。但是压缩对服务器和浏览器会产生一定的压力。
    • css放在页面最上面,js放在页面最下面。浏览器会在下载完全部css之后才对整个页面进行渲染。浏览器在加载js后立即执行,有可能会造成页面显示缓慢。
    • 较少Cookie传输。要慎重选择哪些数据写入到Cookie中。
  • CDN加速
  • 反向代理
    • 反向代理缓存。
    • 实现负载均衡。

2 应用服务器性能优化

  • 缓存
    优先考虑使用缓存优化性能
  • 合理使用缓存
    频繁修改的数据,没有热点的数据要考虑是否有缓存的意义。
  • 缓存预热
    新启动的缓存系统可以加载好热点数据。
  • 缓存穿透
    如果因为不恰当的业务,或者恶意攻击持续高并发的请求某个不存在的数据,由于缓存中没有保存该数据,所有的请求都会落到数据库上,会对数据库造成很大的压力。一个简单的对策是把不存在的数据也缓存起来,其值为null。
  • 使用分布式缓存
    比如Memcached。
  • 异步操作
    使用消息队列将调用异步化。将用户的请求数据发送到消息队列后立即返回,再由消息队列的消费者进程获取消息,异步写入数据库。
  • 使用集群
    使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问分发到多台服务器上处理。避免单一服务器因负载压力过大而响应缓慢。

3 软件质量保证

1 代码控制

  • 分支开发,主干发布
  • 任何修改都不得在主干上直接进行,需要开发一个新功能或修复一个BUG时, 从主干拉一个分支进行开发,开发完成且测试通过后,再合并回主干,然后从主干进行发布。

2 自动化发布

  • 开发自动化发布工具实现发布过程的自动化。自动构造代码分支,进行代码合并,执行发布脚本。

3 灰度发布

  • 采用灰度发布模式,将集群服务器分成若干部分,每天只发布一小部分,待观察运行稳定没有故障之火,再继续发布一部分服务器。
  • 如果出现问题,只要回滚已发布的一部分服务器即可。

4 网站运行监控

  • 不允许没有监控的系统上线。
  • 监控数据采集
    • 用户行为日志收集。指用户在浏览器上所有的操作及其所在的操作环境,包括用户操作系统与浏览器信息,IP地址,页面访问路径,页面停留时间等。这些数据对统计网站的PV/UV指标,分析用户行为,优化网站设计,个性化营销与推荐等都非常重要。
    • 通过服务器端日志收集,大部分web服务器都具备日志记录功能,比如Apache。
    • 通过客户端浏览器日志收集,通过在页面嵌入专门的js代码收集用户真实的操作行为,比服务器日志收集更加的精准。
    • 随着日志数据量变大,数据存储与计算压力变大。目前许多网站逐步开发基于实时计算框架Storm的日志统计与分析工具。
  • 服务器性能监控
    • 收集服务器性能指标,如系统Load,内存占用,磁盘IO,网络IO等。
  • 运行数据报告
    • 比如缓存命中率,平均响应延迟时间等。

4 伸缩性设计

1 按功能物理分离

  • 不同功能进行分离。比如前台,后台,注册,登陆都分离开立,只是用链接相连。

2 负载均衡

  • 负载均衡
    • 是用DNS域名解析实现负载均衡。利用域名解析做为第一级负载均衡手段。
    • 是用反向代理实现负载均衡。
  • 负载均衡算法
    • 轮询。所有请求被依次分发到每台应用服务器上,即每台服务器需要处理的请求数目都相同,适合于所有服务器硬件都相同的场景。
    • 加权轮询。在高性能的服务器上分配更多的请求。
    • 最少连接。记录每个应用服务器正在处理的连接数,将新到的请求分发到最少连接的服务器上。
    • 源地址散列。根据请求的IP地址进行Hash计算,得到应用服务器,这样请求来自于同一个IP地址的请求总在同一台服务器上处理,请求的上下文信息可以存储在这台服务器上,在一个会话周期内重复使用。

3 分布式缓存

  • 要注意解决新增一台缓存服务器对缓存命中的影响。

5 可扩展设计

1 利用分布式消息队列降低系统耦合性

  • 如果模块之间不直接调用,那么新增模块或者修改模块就对其它模块影响最小。
  • 消息生产者应用程序通过远程访问接口将消息推送给消息队列服务器,消息队列服务器将消息写入本地内存队列后立即返回成功响应给消息生产者。消息队列服务器根据消息订阅列表查找订阅该消息的消息消费者程序,将消息队列中的消息按照先进先出的原则将消息通过远程通信接口发送给消息消费者程序。

2 利用分布式服务打造可服用的业务平台

  • 拆分。纵向拆分,将一个大应用拆分为多个小应用,甚至可以独立部署。横向拆分,将复杂的业务拆分出来,独立部署为分布式服务。
  • 负载均衡。要能够支持服务请求者使用可配置的负载均衡算法访问服务。
  • 失效转移。可复用的服务通常会被多个应用调用,一旦该服务不可用,就会影响到很多应用的可用性。对于大型网站的分布式服务而言,即使是很少访问的简单服务,也需要集群部署,提供失效转移机制。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
4月前
|
人工智能 API 数据安全/隐私保护
Apifox 与 Apipost 的 API 文档引擎对比:底层架构、性能与可扩展性分析
深入探索市场上两大主流API工具——Apifox和Apipost的文档能力时,发现了令人惊讶的差距。这不仅仅是功能多寡的问题,更关乎开发效率与团队协作的质变。
|
2月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
神经架构搜索(NAS)正被广泛应用于大模型及语言/视觉模型设计,如LangVision-LoRA-NAS、Jet-Nemotron等。本文回顾NAS核心技术,解析其自动化设计原理,探讨强化学习、进化算法与梯度方法的应用与差异,揭示NAS在大模型时代的潜力与挑战。
446 6
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
|
1月前
|
Java API 开发工具
灵码产品演示:软件工程架构分析
本演示展示灵码对复杂软件项目的架构分析与文档生成能力。通过Qwen3模型,结合PlantUML,自动生成系统架构图、微服务时序图,并提取API接口文档,实现高效、智能的代码理解与文档输出。
137 5
|
1月前
|
存储 JSON 数据处理
ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
随着越来越多企业在实际业务中使用 ClkLog,数据规模和分析需求也不断提升,部分用户日活已经超过10万,为了顺应这一趋势,ClkLog 秉持 “开放透明、持续演进”的理念,推出了迄今为止最重要的一次性能优化升级。新版本在大规模数据处理与复杂查询场景中,性能表现实现了跨越式提升。经过多轮研发与严格测试,新版本现已正式上线:在原有付费版 1.0 的基础上架构全面升级,并同步发布全新的 2.0 版本。为用户带来更强的性能与更广的适用场景。
|
18天前
|
机器学习/深度学习 自然语言处理 监控
23_Transformer架构详解:从原理到PyTorch实现
Transformer架构自2017年Google发表的论文《Attention Is All You Need》中提出以来,彻底改变了深度学习特别是自然语言处理领域的格局。在短短几年内,Transformer已成为几乎所有现代大型语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等革命性模型。与传统的RNN和LSTM相比,Transformer通过自注意力机制实现了并行化训练,极大提高了模型的训练效率和性能。
|
3月前
|
存储 监控 算法
园区导航系统技术架构实现与原理解构
本文聚焦园区导航场景中室内外定位精度不足、车辆调度路径规划低效、数据孤岛难以支撑决策等技术痛点,从架构设计到技术原理,对该系统从定位到数据中台进行技术拆解。
131 0
园区导航系统技术架构实现与原理解构
|
2月前
|
存储 前端开发 JavaScript
如何开发设备管理系统中的经验分析报表板块 ?(附架构图+流程图+代码参考)
设备管理系统(EMS)助力企业高效管理设备生命周期,涵盖采购、维护到报废全流程。本文详解经验分析报表模块设计与开发,涵盖动态看板、点检、巡检、维修、保养及库存统计功能,提供代码示例与架构设计建议,提升设备管理效率与决策水平。
|
19天前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路