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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介: 链接性能优化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 利用分布式服务打造可服用的业务平台

  • 拆分。纵向拆分,将一个大应用拆分为多个小应用,甚至可以独立部署。横向拆分,将复杂的业务拆分出来,独立部署为分布式服务。
  • 负载均衡。要能够支持服务请求者使用可配置的负载均衡算法访问服务。
  • 失效转移。可复用的服务通常会被多个应用调用,一旦该服务不可用,就会影响到很多应用的可用性。对于大型网站的分布式服务而言,即使是很少访问的简单服务,也需要集群部署,提供失效转移机制。
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
20天前
|
存储 SQL Cloud Native
Hologres 的架构设计与工作原理
【9月更文第1天】随着大数据时代的到来,实时分析和处理数据的需求日益增长。传统的数据仓库在处理大规模实时数据分析时逐渐显露出性能瓶颈。为了解决这些问题,阿里巴巴集团研发了一款名为 Hologres 的新型云原生交互式分析数据库。Hologres 能够支持 SQL 查询,并且能够实现实时的数据写入和查询,这使得它成为处理大规模实时数据的理想选择。
40 2
|
22天前
|
存储 分布式计算 Hadoop
ChunkServer 原理与架构详解
【8月更文第30天】在分布式文件系统中,ChunkServer 是一个重要的组件,负责存储文件系统中的数据块(chunks)。ChunkServer 的设计和实现对于确保数据的高可用性、一致性和持久性至关重要。本文将深入探讨 ChunkServer 的核心原理和内部架构设计,并通过代码示例来说明其实现细节。
23 1
|
4天前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
28天前
|
数据采集 存储 Java
Flume Agent 的内部原理分析:深入探讨 Flume 的架构与实现机制
【8月更文挑战第24天】Apache Flume是一款专为大规模日志数据的收集、聚合及传输而设计的分布式、可靠且高可用系统。本文深入解析Flume Agent的核心机制并提供实际配置与使用示例。Flume Agent由三大组件构成:Source(数据源)、Channel(数据缓存)与Sink(数据目的地)。工作流程包括数据采集、暂存及传输。通过示例配置文件和Java代码片段展示了如何设置这些组件以实现日志数据的有效管理。Flume的强大功能与灵活性使其成为大数据处理及实时数据分析领域的优选工具。
56 1
|
20天前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
36 0
|
20天前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
10 0
|
22天前
|
机器学习/深度学习 架构师 数据库
20年老架构师,劝我多看看这几个网站
20年老架构师,劝我多看看这几个网站
|
23天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
8天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
18 3
|
12天前
|
监控 负载均衡 应用服务中间件
探索微服务架构下的API网关设计与实践
在数字化浪潮中,微服务架构以其灵活性和可扩展性成为企业IT架构的宠儿。本文将深入浅出地介绍微服务架构下API网关的关键作用,探讨其设计原则与实践要点,旨在帮助读者更好地理解和应用API网关,优化微服务间的通信效率和安全性,实现服务的高可用性和伸缩性。
31 3

热门文章

最新文章