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

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
13天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
42 1
|
24天前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
9天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
1月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
71 4
|
1月前
|
开发者 容器
Flutter&鸿蒙next 布局架构原理详解
本文详细介绍了 Flutter 中的主要布局方式,包括 Row、Column、Stack、Container、ListView 和 GridView 等布局组件的架构原理及使用场景。通过了解这些布局 Widget 的基本概念、关键属性和布局原理,开发者可以更高效地构建复杂的用户界面。此外,文章还提供了布局优化技巧,帮助提升应用性能。
98 4
|
13天前
|
监控 持续交付 API
深入理解云计算中的微服务架构:原理、优势与实践
深入理解云计算中的微服务架构:原理、优势与实践
27 0
|
26天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
7天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
24天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####