书笔记:网站架构之性能篇

简介:

录:
  一、网站性能测试
  二、Web前端性能优化
  三、应用服务器性能优化(重点)
  四、存储性能优化
  PS:本文为《大型网站技术架构 & 核心原理与案例分析(李智慧 著)》一书的读书笔记
  // =======================================================================================
  网站性能测试
  一、不同视角下的网站性能
  1、用户视角:直观视觉感受
  2、开发人员视角:响应延迟、吞吐量、并发处理能力等
  3、运维人员视角:基础设置资源利用率
  二、性能测试指标
  1、响应时间:请求从发出到处理完接收的时间
  2、并发数:同时处理请求的数量,即同时提交请求的用户数
  3、吞吐量:单位时间内处理请求的数量
  *:随着并发数增大:系统吞吐量先逐渐增加到极限,之后反而下降;系统响应时间先是小幅上升,当吞吐量达到极限后快速上升
  4、性能计数器:服务器监控指标,如CPU、内存、磁盘IO、网络IO
  三、性能测试(压测)方法
  *:不断增加系统访问压力(并发请求数),以获取系统性能指标数据
  四、性能测试(压测)报告
  *:要能够反应压测的系统性能曲线规律,阅读者能评估系统性能是否能满足需求
  // ===========================================================
  Web前端性能优化
  一、浏览器访问优化
  1、减少http请求:每次独立的http请求的通信和服务开销都很昂贵,可通过合并CSS、JS、图片等方式减少http请求数
  2、使用浏览器缓存:通过设置http头的Cache-Control和Expires属性设定浏览器缓存,将CSS、JS、图片等较少变更的资源缓存下来
  3、启用压缩:文件压缩可减少通讯传输的数据量,文本压缩率可达80%以上,但压缩解压会增加计算压力(权衡)
  4、CSS渲染放最上面,JS功能脚本放最下面:使用户视觉感受先已经看到页面
  二、CND加速
  *:部署在网络运营商机房,用户请求路由的第一条就到达CND服务器,有效降低请求时间
  三、反向代理
  *:部署在网站机房内,用户请求先到达反向代理服务器,有3个主要功能
  1、加速Web请求:通过配置缓存功能来实现
  2、安全:在用户请求和应用服务器间建立一个屏障
  3、负载均衡:均匀分发请求到应用服务器
  // ===========================================================

应用服务器性能优化
  一、分布式缓存(memcache)
  *:网站性能优化第一定律:优先考虑缓存
  1、缓存的基本原理:本质为内存Hash表
  *:数据以Key、Value对形式存储在内存Hash表中。通过Hash(Key)得到HashCode,即Value对应内存的位置
  2、合理使用缓存
  *:不适合缓存的数据:频繁修改(写导致缓存中的数据失效)、没有热点、一致性要求高(缓存设有失效时间,这段时间内可能有脏数据)
  *:缓存预热:缓存刚起来时为空数据,最好在使用前预加载数据库数据
  *:缓存雪崩:当缓存服务器崩溃时,所有请求会落到数据库导致数据库宕机。好的方法是使用分布式缓存服务器提高缓存可用性
  *:缓存穿透:不正确或者恶意的请求可能落在某个不存在的Key导致频繁读数据库,一个简单对策将不存在的Key也缓存起来
  3、分布式缓存架构
  *:一种是以JBossCache为代表的,每个缓存服务器数据相同,需同步更新的分布式缓存(很少用)
  *:一种是以Memcache为代表的,每个缓存服务器数据部相同,之间不需要通信的分布式缓存。应用程序通过一致性Hash等路由算法选择具体的缓存服务器
  4、Memcache的特点
  *:简单的通行协议:TCP的,一套基于简单文本的自定义协议(一个命令关键字+一组命令操作数,如get )
  *:丰富的客户端程序:几乎支持所有主流语言(因为通信协议简单)
  *:高性能的网络通信:基于Libevent,提供稳定的长连接
  *:高效的内存管理::简单固定的内存空间分配,slab_class=>slab=>chunk
  *:互不通信的集群架构:客户端路由算法一致性Hash更成为数据存储伸缩性架构的范例
  二、异步操作
  *:使用消息队列将调用异步化,可改善网站的扩展性
  *:消息队列:用户请求发送给消息队列后立即返回,再由消费队列的消费者进程将消息异步写入数据库,具有很好的削峰作用
  三、使用集群
  *:利用集群解决高并发问题,前端用负载均衡技术将请求均匀分发到多台服务器上(不单单局限在应用服务器)
  四、代码优化
  1、多线程
  *:线程的优点:比进程更轻量,占用更少系统资源,切换代价更小
  *:使用多线程的2个主要原因:IO阻塞(阻塞时可以调用其他线程处理)和多CPU(最大限度使用CPU)
  :线程数估算公式:启动线程数 = [ 任务执行时间 / ( 任务执行时间 - IO等待时间 ) ] CPU核数
  *:线程安全问题实质:多线程并发对某块内存进行修改操作(对象、内存、文件、数据库等)
  *:线程安全问题解决思路:对象设计为无状态,使用局部变量,并发访问加锁等
  2、资源复用
  *:开销较大的系统资源:数据库连接,网络Socket连接,线程,复杂对象等
  *:资源复用的2个方法:单例模式和对象池,都可以防止不必要的创建和销毁操作
  3、数据结构和算法
  *:灵活组合数据结构和算法优化程序执行复杂度,如Hash等
  // ===========================================================
  存储性能优化
  一、机械硬盘和固态硬盘
  1、机械硬盘:每次访问数据都需要移动磁头臂(物理运动),故数据连续访问和随机访问性能表现差别大
  2、固态硬盘:没有机械装置,数据存储于硅晶体中,有更好的性能。可靠性,性价比还有待提升,但逐步取代机械硬盘是迟早的事
  二、B+树和LSM树
  1、由于机械硬盘具有快速顺序读写,慢速随机读写的特性,故应用程序选择存储结构和算法极为重要
  2、B+树是一种专门针对磁盘存储而优化的N叉排序树,目前数据库多采用两级索引,树的层次最多三层
  3、LSM树可以看为一个N阶合并树,数据写操作都在内存中进行,目前许多NoSQL都采用LSM树作为主要数据结构
  三、RAID和HDFS
  1、RAID,即廉价磁盘冗余阵列,主要是为了改善磁盘访问延迟,增加磁盘可用性和容错能力(数据在多块磁盘并发读写和数据备份)
  2、HDFS,即分布式文件系统,Hadoop的文件系统,系统在整个存储集群的多台服务器上进行数据并发读写和备份
最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
22天前
|
存储 数据挖掘 BI
2-5 倍性能提升,30% 成本降低,阿里云 SelectDB 存算分离架构助力波司登集团实现降本增效
波司登集团升级大数据架构,采用阿里云数据库 SelectDB 版,实现资源隔离与弹性扩缩容,查询性能提升 2-5 倍,总体成本降低 30% 以上,效率提升 30%,助力销售旺季高效运营。
100 9
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
6月前
|
SQL 缓存 分布式计算
vivo 湖仓架构的性能提升之旅
聚焦 vivo 大数据多维分析面临的挑战、StarRocks 落地方案及应用收益。 在 **即席分析** 场景,StarRocks 使用占比达 70%,查询速度提升 3 倍,P50 耗时从 63.77 秒缩短至 22.30 秒,查询成功率接近 98%。 在 **敏捷 BI** 领域,StarRocks 已完成 25% 切换,月均查询成功数超 25 万,P90 查询时长缩短至 5 秒,相比 Presto 提升 75%。 在 **研发工具平台** 方面,StarRocks 支持准实时数据查询,数据可见性缩短至 3 分钟,查询加速使 P95 延迟降至 400 毫秒,开发效率提升 30%。
vivo 湖仓架构的性能提升之旅
|
6月前
|
网络协议 Java 应用服务中间件
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
|
3月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
10月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
302 4
|
10月前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
132 3
|
10月前
|
存储 前端开发 Java
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
126 2
|
6月前
|
数据采集 Prometheus Cloud Native
架构革新:揭示卓越性能与高可扩展的共赢秘诀
为了构建现代化的可观测数据采集器LoongCollector,iLogtail启动架构通用化升级,旨在提供高可靠、高可扩展和高性能的实时数据采集和计算服务。然而,通用化的过程总会伴随性能劣化,本文重点介绍LoongCollector的性能优化之路,并对通用化和高性能之间的平衡给出见解。
架构革新:揭示卓越性能与高可扩展的共赢秘诀

热门文章

最新文章