前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >后端性能优化的指标有哪些_后端性能优化

后端性能优化的指标有哪些_后端性能优化

作者头像
全栈程序员站长
发布于 2022-10-01 09:56:17
发布于 2022-10-01 09:56:17
1.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

网站的性能测试

性能测试是性能优化的前提,也是性能优化结果的检查和度量标准。

性能测试的常用指标:

响应时间 并发数目 吞吐量。常用的吞吐量指标:   ①TPS(每秒事务数)、

②HPS(每秒Http请求数)、

③QPS(每秒查询数,)

性能计数器。常用的性能计数器有:System Load、对象和线程数、CPU使用、内存使用、磁盘和网络IO等指标。 性能测试的几个参考点: 性能测试 负载测试:系统的某项或者多想性能指标达到安全临界值时的并发数 压力测试 稳定性测试。PS:稳定性测试主要是长时间给系统一定的压力,看系统是否正常运行。 网站的性能优化三维度

后台服务器常用的优化方式

缓存 集群 异步 代码优化 存储优化 缓存相关知识

后台性能优化的第一定律:优先考虑使用缓存优化性能。

缓存的本质 缓存的合理使用 缓存可用性 缓存的常见问题处理与优化 分布式缓存架构

缓存的本质

缓存的本质就是一个内存Hash表,数据以一对KeyValue键值对存储在内存Hash表中。主要用户存放读写比很高、很少变化的数据,网站数据通常遵循“二八定律”,即80%的访问落在20%的数据上,因此,将这20%的数据缓存起来,可以很好的改善系统性能。

合理的使用缓存

合理的使用缓存对提高系统性能有很多好处,但是不合理的使用缓存反而会成为系统的累赘甚至风险。滥用缓存的三种情况如下:

频繁修改的数据   数据的读写比至少应该是2:1以上,即写入一次缓存,在数据更新前至少读写两次,缓存才有意义。真正实践中这个比例可能会更高。

没有热点的访问   如果应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问并没有集中在小部分数据中,那么缓存也没有意义,因为大部分数据还没有被再次访问就已经被挤出缓存了。

数据的不一致与脏读   写入缓存的数据最好能容忍一定时间的数据不一致,一般情况下最好对缓存的数据设置失效时间(固定值+一定范围的随机值)。如果不能容忍数据的不一致,必须在数据更新时,删除对应的缓存(思考:为什么不是更新缓存)可以参考这个文档,但是这种情况只针对读写比非常高的情况。

缓存的常见问题优化手段

缓存雪崩   缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

该类问题的解决方式主要有三种:

①加锁排队。大概原理是在去数据库取数据的时候加锁排队,该方法仅仅适用于并发量不高的情况。

②在原有失效时间基础上加一个合理的随机值(0-5分钟)。分布式场景下最常见的方式(单机也可以)。

③给缓存加标记,在缓存失效之后更新缓存数据。

缓存穿透   缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。

该类问题的主要解决方式。

①使用布隆过滤器做过滤。该方法仅仅用于查询一个不可能存在的数据。

②把不存在的数据也缓存起来。最佳实践:单独设置比较短的过期时间,比如说五分钟。

缓存预热   缓存中存放的是热点数据,热点数据又是缓存系统利用某种算法对不断访问的数据筛选淘汰出来的,在重建缓存数据的过程中,系统的性能和数据库负载都不太好,那么多好的方式就是在缓存系统启动的时候就把热点数据加载好,这个缓存预加载的手段叫做缓存预热。对于一些元数据如省市区列表,类目信息,就可以在启动的加载数据库中的全部数据。

分布式缓存架构

分布式缓存是指缓存部署在多个服务器组成的集群中,以集群方式提供缓存服务,其架构方式有两种:

①以JBosss Cache为代表的需要更新同步的分布式缓存(在所有服务器中保存相同的缓存数据)。

②以Memcache为代表的互不通信的分布式缓存(应用程序通过一致性Hash等路由算法选择缓存服务器远程访问远程数据,可以会容易的扩容,具有良好的可伸缩性)。

异步

使用异步操作,可以大幅度改善网站的性能,使用异步的两种场景,高并发、微服务;

①高并发,在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下会对数据库造成一定的压力,同时也使得响应延迟加剧。使用消息队列具有很好的削峰作用,在电子商务网站促销活动中,使用消息队列是常见的技术手段。

②微服务之间调用,在微服务流行的当下,有时候我们调用其他系统的微服务接口,只是为了通知其他系统,我们不关心结果,这个时候我们可以使用单独的线程池异步调用其他系统的微服务,这样可以减少程序的响应时间。

任何可以晚点的事情都应该晚点再做。

集群

在网站高并发访问的场景洗下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,可以避免单一服务器因负载压力过大而响应缓慢。常用的负载均衡技术有以下几种:

①HTTP重定向负载均衡,不利于SEO,不推荐。

DNS域名解析负载均衡,许多DNS服务器还支持基于地理位置的域名解析,会将域名解析成距离用户地理最近的一个服务器地址,这样可以加快访问速度。大公司常用的手段。

③反向代理负载均衡(应用层负载均衡),常见产品:Nginx,反向代理服务器的性能可能会成为瓶颈。

④IP负载均衡,在内核进程完成数据分发,叫反向代理负载均衡有更好的处理性能,网卡和带宽会成为主要的瓶颈。

⑤数据链路层负载均衡(三角传输模式),又名DR(直接路由模式),也是大型网站昌运宫的负载均衡手段,在Linux平台上最好的链路层负载均衡产品是LVS。

代码优化

网站的业务逻辑实现代码主要部署在应用服务器上,合理的优化代码也可以很好的改善网站性能。几种常用的几种代码优化方式:

①合理使用多线程,服务器的启动的线程数参考值:[任务执行时间/(任务执行时间-IO等待时间)]CPU内核数。

②资源复用,要尽量减少那些开销很大的系统资源的创建和销毁,比如数据库连接,网络通信连接、线程、复杂对象,从编程角度,资源复用主要有两种方式,单例、对象池。

数据结构,前面缓存部分就已经提到了Hash表的基本原理,Hash表的读写性能在很大程度上依赖于HashCode的随机性,即HashCode越散列,Hash表的冲突就越少,目前比较好的Hash散列算法是Time33算法,算法原型为:hash(i) = hash(i-1)33+str[i]。

④垃圾回收,比如说在JVM里,合理设置Young Generation和Old Generation的大小,尽量减少Full GC,如果设置合理的话,可以在整个运行期间做到从不进行Full GC。

存储优化

在网站应用中,海量是的数据读写对磁盘访问会造成一定的压力,虽然可以通过Cache解决一部分数据读压力,但是很多时候,磁仍然是系统最严重的瓶颈。

机械硬盘VS固态硬盘   这两个的区别我相信大家都知道了吧,机械硬盘是通过马达驱动磁头臂带动磁头到指定的磁盘位置访问数据,这个效率我就不用多说了吧,相反,固态硬盘的数据是存储在可以持久记忆的硅晶体上,因此可以像内存一样随机访问,而且功耗更小。

B+树VS. LSM树   B+树是一种专门针对磁盘存储而优化的N叉排序树,以树节点为单位存储在磁盘中,从根开始查找所需的节点编号和磁盘位置,将其加载到内存中,然后继续查找,知道找到所需数据,目前大部分关系型数据库多采用两级索引的B+树,树的层次最多为3层。

目前很多NoSQL产品采用LSM树作为主要的数据结构,LSM树可以看做是一个N阶合并树,数据的写操作都在内存中完成,并且都会创建一个新记录,这些数据在内存中仍然还是一颗排序树。在需要读的时候,总是从内存中的排序树开始搜索,如果没有找到,就从磁盘的排序树中查找。

在LSM树上进行一次数据更新不需要磁盘访问,在内存中即可完成,速度远快于B+树,当数据访问以写操作为主,而读操作则集中在最近写入的数据上时,使用LSM树可以极大程度的减少磁盘的访问次数,加快访问速度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192293.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月18日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
瞬时响应:网站的高性能架构一、网站性能测试二、Web前端性能优化三、应用服务器性能优化四、存储性能优化
一、网站性能测试 (1)性能测试指标:①响应时间;②并发数;③吞吐量;④性能计数器; (2)性能测试方法:①性能测试;②负载测试;③压力测试;④稳定性测试; (3)性能优化策略:   ①性能分析:检查请求处理各个环节的日志,分析哪个环节响应时间不合理,检查监控数据分析影响性能的因素; ②性能优化:Web前端优化,应用服务器优化,存储服务器优化; 二、Web前端性能优化 (1)浏览器访问优化: ①减少http请求:因为http是无状态的,每次请求的开销都比较昂贵(需要建立通信链路、进行数据传输,而服务器
JavaEdge
2018/05/16
2.4K0
《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构
此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。
Edison Zhou
2018/08/20
5970
《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构
大型网站背后的高性能系统架构设计
CDN 的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户已最快速度获取数据,即所谓网络访问第一跳。
李红
2019/05/29
1.3K0
《大型网站技术架构》学习笔记-02架构篇
上一篇文章已经介绍了网站系统最需要关注的5大质量属性,接下来对这些特性进行详细介绍(这部分有部分内容会显得有些陈旧,之后会进行更新)。 高性能架构 网站性能测试 性能测试时性能优化的前提和基础,
用户1216676
2018/01/24
1.1K0
大型网站技术架构:核心原理与案例分析-李智慧(第一次看)
CAP认为,一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区耐受性(系统具有跨网络分区的伸缩性),在大型网站中,通常会选择强化分布式存储系统的可用性和伸缩性在某种程度上放弃一致性 数据一致性分为:
lin_zone
2019/02/22
1.6K0
干货分享!设计一个系统架构时怎么去做性能优化?
设计系统架构中最核心的几个要素包括:性能,可用性,伸缩性,扩展性和安全性,而性能又是其中最为重要的,本篇简要说下网站性能优化方面所需做的一些事情;
lyb-geek
2020/08/06
6120
大型网站技术架构,网站的高性能架构(二)
网站的性能指标,既可以是开发人员客观的性能分析数据,测试指标。也可以是主观的终端用户体验感受。一般而言,我们用如下指一些标来衡定一个网站的性能水平:响应时间、并发数量、吞吐量、性能计数器。响应时间即从请求发出开始,到收到响应并解析成对应的可视化结果所花费的时间;并发数指系统能够同时处理的请求数量。吞吐量是指单位时间内系统能够处理的请求数量,常用的单位为TPS(每秒事务数)、HPS(每秒的 HTTP 请求数)、QPS(每秒数据库查询数);性能计数器为直观的数据指标,比如当前系统负载、对象与线程数、CPU /内存使用率、磁盘与网络IO等。理想的系统负载应该对应为系统的 CPU 数量,因为系统负载指当前正在排队被 CPU 处理的进程数量。
用户5997198
2019/08/12
9450
大型网站技术架构,网站的高性能架构(二)
【大型网站技术架构笔记】(三)高性能与高可用架构
1.响应时间。 2.并发数。如果暂时没有对应的准确监控,针对不同业务模型,可以有不一样的并发数的预估。我们的系统进行峰值并发数预估的话,有一种比较粗略的计算方式,即全天请求平均每秒并发数 * 3。但也需要case by case。 3.吞吐量。比较常见的有QPS(每秒查询数)、HPS(每秒http请求数)以及TPS(每秒处理事务数)。 4.性能计数器。包括系统负载、线程数、cpu、内存使用情况等。可以用top、free、cat /proc/cpuinfo等命令来查看。系统负载的定义为当前被CPU执行的线程数/等待被CPU执行的总线程数。当其值与逻辑cpu个数相同时是最佳状态,其代表所有的资源都被最大限度地被利用。但也有人认为当负载为0.7倍逻辑CPU数时最佳。 1)系统负载、任务、cpu、内存使用情况:
吃橙子的狐狸
2019/02/28
5800
【架构师入门必知】大型网站技术架构入门知识点大全
集中花两天时间把这本《大型网站技术架构》看完了,分章节来记录一些干货。本书可以作为架构师入门的第一本书,因为很少涉及到具体的编程或者系统设计,而是以一个宏观的角度来讨论大型网站的架构方案。可以让你从全局的角度了解架构师的工作和职责。做到心中有数。
用户5997198
2022/04/27
5290
【架构师入门必知】大型网站技术架构入门知识点大全
Java架构笔记-互联网架构设计:高性能的后端
后端服务一般指用户直接看到的远程服务,涉及到网络硬件、逻辑计算、通信协议和数据存储等部分。下面我们将着重介绍高性能后台服务的设计方法和策略。
聚优云惠
2020/03/12
9280
大型网站技术架构核心原理与案例分析(一)
高并发,大流量;高可用;海量数据;用户分布广泛,网络情况复杂;安全环境恶劣;需求快速变更,发布频繁;渐进式发展;
硬核项目经理
2019/08/06
8310
大型网站技术架构
早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。 主要环节 业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信。 集群化(应用服务器;基于RPC的微服务应用等) LVS负载均衡,负责将请求转发给不同业务集群 反向代理服务器,常用的如Nginx 应用服务器,servlet容器,如tomca
Java高级架构
2018/04/19
1.6K0
【架构技术专题】什么是架构设计的五个核心指标?如何设计?(4)
性能就是核心要素之一,不然我为什么架构设计?随随便便一个lowlow的系统上线就好了。所以性能优化是很多小公司卖不去过的坎。这么说吧,当然优化网站性能的手段也非常多:
java进阶架构师
2018/08/15
2.6K0
【架构技术专题】什么是架构设计的五个核心指标?如何设计?(4)
架构 | 大型网站分布式高并发架构设计汇总
本文多数内容为小编精心总结,呕心沥血完成,切勿抄袭沿用。 参考文献《架构知识》、《深入理解java》 ---- 章节目录: 前言 前端架构 应用层架构 服务层架构 存储层架构 后台架构 数据采集、监控 安全架构 大型网站特点 系统的演变 大型网站架构模式 架构要素 性能优化 前端性能优化 服务器端性能优化 存储性能优化 高可用性能优化 伸缩性优化 分布式缓存 NOSQL 安全架构常见的攻击方式 加密 信息过滤 1前言 网站架构包括:前端架构+应用层架构+服务层架构+存储层架构+后台架构+数据中心机房架构+
码神联盟
2018/04/02
1.6K0
读《大型网站技术架构》
《大型网站技术架构》是自己接触的第一本架构知识的书籍,还是在14年时买的实体书,前后读了几遍,颇有所得,后来实体书被朋友借走再没归还,也就没再翻过。
高广超
2018/12/12
1.2K1
【ASP.NET Core 基础知识】--部署和维护--性能优化技巧
应用程序设计和架构优化是提高 ASP.NET Core 应用程序性能的重要方面之一。适当的设计模式是优化架构的关键之一。设计模式是解决特定问题的经验总结,能够提高代码的可读性、可维护性和可扩展性,从而间接地提高了性能。下面是一些在 ASP.NET Core 中常用的设计模式:
喵叔
2024/05/24
1450
分布式架构中的三高:高并发、高性能、高可用
互联网应用以及云计算的普及,使得架构设计和软件技术的关注点从如何实现复杂的业务逻 辑,转变为如何满足大量用户的高并发访问请求。
用户2146693
2021/11/24
8.9K0
分布式架构中的三高:高并发、高性能、高可用
性能优化中的系统架构优化
系统架构优化是性能优化的一个重要方面,它涉及到对整个IT系统或交易链上各个环节的分析与改进。通过系统架构优化,可以提高系统的响应速度、吞吐量,并降低各层之间的耦合度,从而更好地应对市场的变化和需求。业务增长导致的性能问题推动架构的发展,系统架构的演变过程来分析系统性能与调优方式。
漫谈测试
2025/02/10
1620
性能优化中的系统架构优化
京东二面:高并发设计,都有哪些技术方案?
那么高并发系统都有哪些经验,掌握核心技巧,你可以快速成为一个架构师,主导一些高访问量系统的架构设计
微观技术
2022/04/07
3660
京东二面:高并发设计,都有哪些技术方案?
提升B2B业务系统吞吐量的解决方案之Java项目
在B2B业务领域,系统吞吐量是衡量一个系统性能好坏的重要指标。对于Java项目而言,提升系统吞吐量意味着在有限的硬件资源下,能够处理更多的业务请求,保证系统的稳定性和高效性。以下是一些详细且专业的解决方案,帮助提升Java项目的系统吞吐量。
小冷coding
2024/04/14
1980
提升B2B业务系统吞吐量的解决方案之Java项目
推荐阅读
相关推荐
瞬时响应:网站的高性能架构一、网站性能测试二、Web前端性能优化三、应用服务器性能优化四、存储性能优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档