快速发布收录 免费推广展示
早上好, 游客 <游客> [ 马上登录 | 注册帐号 ]
首页 搜索优化 正文

9大高性能优化经验总结,强烈建议收藏

时间:2024-10-16 06:30 作者: 5955分类目录 阅读:5 次

功用优化基本归于Java高档岗的必备技能了,特备关于大流量的互联网运用至关重要@mikechen今天首要给咱们介绍下9种功用优化的方法:1.代码之所以把代码放到第一位,是因为这一点最简略引忽视,比方拿到一个功用优化的需求今后,言必称缓存、异步等。实际上,第一步就应该是剖析相关的代码,找出相应的瓶颈,再来考虑详细的优化战略。有一些功用问题,彻底是因为代码写的不合理,经过直接修改一下代码就能处理问题的,比方for循环次数过多、作了许多无谓的条件判别、相同逻辑重复多次等,这样的优化成本是最低的。2.数据库1.SQL优化这里以MySQL为例,最常见的方法是,由自带的慢查询日志或许开源的慢查询体系定位到详细的出问题的SQL,然后运用explain、profile等工具来逐步骤优,终究经过测试到达作用后上线。这里举几个优化的比如:1.查询优化对查询进行优化,要尽量防止全表扫描,首先应考虑在 where 及 order by 触及的列上建立索引。2.防止null判别应尽量防止在 where 子句中对字段进行 null 值判别,不然将导致引擎抛弃运用索引而进行全表扫描,如:select id from t where num is null3.防止全表扫描应尽量防止在 where 子句中运用 != 或 <> 操作符,不然将引擎抛弃运用索引而进行全表扫描。应尽量防止在 where 子句中运用 or 来衔接条件,假如一个字段有索引,一个字段没有索引,将导致引擎抛弃运用索引而进行全表扫描。in和 not in 也要慎用,不然会导致全表扫描,如:select id from t where num in(1,2,3)关于接连的数值,能用 between就不要用 in 了:select id from t where num between 1 and 34.大数据量查询关于多张大数据量的表JOIN,要先分页再JOIN,不然逻辑读会很高。5.合理运用索引索引并不是越多越好,索引固然能够进步相应的 select 的功率,但一起也下降了 insert 及 update 的功率,因为 insert 或 update 时有或许会重建索引,所以怎样建索引需求慎重考虑,视详细状况而定。一个表的索引数最好不要超越6个,若太多则应考虑一些不常运用到的列上建的索引是否有 必要。6.多运用数字型字段尽量运用数字型字段,若只含数值信息的字段尽量不要规划为字符型,这会下降查询和衔接的功用,并会增加存储开支。这是因为引擎在处理查询和连 接时会逐一比较字符串中每一个字符,而关于数字型而言只需求比较一次就够了。7.防止大数量尽量防止向客户端回来大数据量,若数据量过大,应该考虑相应需求是否合理。8.防止大事务尽量防止大事务操作,进步体系并发能力。2.衔接池调优咱们的运用为了完成数据库衔接的高效获取、对数据库衔接的限流等目的,通常会采用衔接池类的方案,即每一个运用节点都管理了一个到各个数据库的衔接池。跟着事务拜访量或许数据量的增加,原有的衔接池参数或许不能很好地满足需求,这个时分就需求结合当时运用衔接池的原理、详细的衔接池监控数据和当时的事务量作一个归纳的判别,经过重复的几回调试得到终究的调优参数。3.架构层面这一类调优包含读写分离、多从库负载均衡、水平缓笔直分库分表等方面,一般需求的改动较大,可是频率没有SQL调优高,并且一般需求DBA来配合参与。3.分布式缓存缓存能够称的上是功用优化的利器,缓存首要用来寄存那些读写比很高、很少改变的数据。什么状况适合用缓存?考虑以下两种场景:短时刻内相同数据重复查询多次且数据更新不频频,这个时分能够挑选先从缓存查询,查询不到再从数据库加载并回设到缓存的方法。此种场景较适合用单机缓存。高并发查询热门数据,后端数据库不堪重负,能够用缓存来扛。运用缓存需求留意的问题:1.防止缓存失效把频频修改的数据放入缓存,简略出现数据写入缓存后,运用还来不及读取缓存,数据就现已失效的景象,徒增体系负担。2.缓存热门数据缓存运用的内存资源十分宝贵,只能将最新拜访的数据缓存起来,而把历史数据清理出缓存,即缓存资源应该留给20%的热门数据。3.数据不一致性一般会对缓存设置失效时刻,超越失效时刻,就要从数据库重新加载。因而运用要忍耐必定时刻的数据不一致,另一种战略是数据更新时当即更新缓存,不过这也会带来更多的体系开支和事务一致性的问题。4.缓存可用性事务发展到必定阶段时,缓存会承当大部分数据拜访的压力,数据库现已习惯了有缓存的日子,所以当缓存服务器崩溃时,数据库会因为彻底不能承受如此大的压力而宕机,从而导致整个网站不可用,这种状况被称作缓存雪崩,发生这种毛病,乃至不能简略地重启缓存服务器和数据库服务器来恢复网站拜访。处理方法:1)缓存热备(当某台服务器宕机时,将缓存拜访切换到热备服务器上;2)缓存服务器集群。5. 缓存预热缓存中寄存的是热门数据,热门数据是缓存体系用LRU对不断拜访的数据筛选出来的,这个过程需求较长的时刻。新发动的缓存体系没有任何数据,此刻体系的功用和数据库负载都不太好。因而能够挑选在发动缓存是就把热门数据预加载好。6.缓存穿透因为不恰当的事务或歹意攻击,继续高并发地拜访某一个不存在的数据,假如缓存不保存该数据,就会有大量的恳求压力落在数据库上。简略的处理方法是把恳求的不存在的数据也放进缓存,其value是null。4.异步化针对某些客户端的恳求,在服务端或许需求针对这些恳求做一些隶属的工作,这些工作其实用户并不关心或许用户不需求当即拿到这些工作的处理成果,这种状况就比较适合用异步的方法处理这些工作。异步化的作用:缩短接口呼应时刻,运用户的恳求快速回来,用户体会更好。防止线程长时刻处于运转状况,这样会引起服务线程池的可用线程长时刻不够用,从而引起线程池使命行列长度增大,从而堵塞更多恳求使命,使得更多恳求得不到技能处理。线程长时刻处于运转状况,或许还会引起体系Load、CPU运用率、机器全体功用下降等一系列问题,乃至引发雪崩。异步的思路能够在不增加机器数和CPU数的状况下,有用处理这个问题。比方:运用音讯行列(MQ)中间件服务,MQ天然生成就是异步的。一些额外的使命,或许不需求我这个体系来处理,可是需求其他体系来处理,这个时分能够先把它封装成一个音讯,扔到音讯行列里边,经过音讯中间件的可靠性确保把音讯投递到关心它的体系,然后让这个体系来做相应的处理。再比方C端在完成一个提单动作今后,或许需求其它端做一系列的工作,可是这些工作的成果不会立刻对C端用户产生影响,那么就能够先把C端下单的恳求呼应先回来给用户,回来之前往MQ中发一个音讯即可,并且这些工作理应不是C端的负责规模,所以这个时分用MQ的方法,来处理这个问题最合适。5.Web前段Web前端指网站事务逻辑之前的部分,包含:浏览器加载网站视图模型图片服务CDN服务等首要优化手法有优化浏览器拜访,运用反向署理,CDN等。1.浏览器拜访优化(1)削减http恳求HTTP协议是无状况的运用层协议,意味着每次HTTP恳求都需求简历通讯链路,进行数据传输,而在服务器端,每个HTTP都需求发动独立的线程去处理,这些通讯和服务的开支都很昂贵,削减HTTP恳求的数目可有用进步拜访功用。削减HTTP恳求的首要手法是:兼并CSS,以及紧缩CSS巨细兼并JavaScript,以及紧缩JS巨细兼并图片将浏览器一次拜访需求的JavaScript,CSS兼并成一个文件,这样浏览器就只需求一次恳求。多张图片兼并成一张,假如每张图片都有不同的超链接,可经过CSS偏移呼应鼠标点击操作,构造不同的URL。(2)运用浏览器缓存对一个网站而言,CSS,JavaScript,Logo,图标等这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP恳求都需求的,假如将这些文件缓存在浏览器中,能够极好地改进功用。经过设置HTTP头中Cache-Control和Expires属性,可设定浏览器缓存,缓存时刻能够是数天乃至是几个月。有时分,静态资源文件改变需求及时运用到客户端浏览器,这种状况能够经过改变文件名完成,比方一般会在JavaScript后面加上一个版本号,使浏览器刷新修改的文件。(3)启用紧缩在服务器端对文件进行紧缩,在浏览器端对文件解紧缩,可有用较少通讯传输的数据量。文本文件的紧缩功率科大80%以上。(4)CSS放在页面最上面,JavaScript放在页面最下面浏览器会在下载彻底部CSS之后对整个页面进行烘托,因而最好的做法是将CSS放在页面最上面,让浏览器赶快下载CSS。JS则想法,浏览器在加载JS后当即履行,有或许会堵塞整个页面,造成页面显现缓慢,因而JS最好放在页面最下面。(5)削减Cookie传输一方面,Cookie包含在每次恳求和呼应中,太大的Cookie会严重影响数据传输,因而哪些数据需求写入Cookie需求慎重考虑,尽量削减Cookie中传输的数据量。另一方面,关于某些静态资源的拜访,如CSS,JS等,发送Cookie没有意义,能够考虑静态资源运用独立域名拜访,防止恳求静态资源时发送Cookie,削减Cookie传输的次数。2.CDN加快CDN(Content Distribute Network,内存分发网络)的本质上仍然是一个缓存,并且将数据缓存在离用户最近的地方,是用户以最快速度获取数据,即所谓网络拜访第一跳。CDN一般缓存的是静态资源,如图片,文件,CSS,Script脚本,静态网页等,可是这些文件拜访频率很高,将其缓存在CDN可极大改进网页的打开速度。3.反向署理传统署理服务器坐落浏览器一侧,署理浏览器将HTTP恳求发送到互联网上,而反向署理服务器坐落网站机房一侧,署理网站Web服务器接收HTTP恳求。和传统署理服务器能够保护浏览器安全相同,反向署理服务器也具有保护网站安全的作用,来自互联网的拜访恳求必须经过署理服务器,相当于在Web服务器和或许的网络攻击之间建立了一个屏障。除了安全功用,署理服务器也能够经过配置缓存功用加快Web恳求,当用户第一次拜访静态内容的时分,静态内容就被缓存在反向署理服务器上,这样当其他用户拜访该静态内容的时分,就能够直接从反向署理服务器回来,加快Web恳求呼应速度,减轻服务器负载要。6.服务化做服务化最基础的是按事务做服务拆分,防止跨事务间的互相影响,数据和服务一起拆分。同一个事务内部咱们还按核算密集型/IO密集型的服务拆分、C端/B端服务拆分、中心/非中心服务拆分、高频服务单独部署等原则做拆分。7.硬件升级硬件问题对功用的影响不容忽视。举一个比如:一个DB集群常常有慢SQL报警,事务排查下来发现SQL都很简略,该做的索引优化也都做了,后来DBA同学帮忙定位到问题是硬件过旧导致,将机械硬盘升级成固态硬盘之后报警立马消失了,作用马到成功!8.搜索引擎复杂查询以及一些聚合核算不适合在数据库中做,能够利用搜索引擎来完成,另外搜索引擎还能够帮咱们很好的处理跨库、跨数据源检索的场景。9.产品逻辑优化事务逻辑优化常常会简略被忽略,但作用却往往比数据库功用优化、JVM调优之类的来的更显着。举一个比如,12306春运抢火车票的场景,因为拜访的人多,用户点击“查票”之后体系会十分卡,进度条十分慢,作为用户,咱们会习惯性的再去点“查票”,或许会接连点个好几回。假定均匀一个用户点5次,则后端体系负载就增加了5倍!而其中80%的恳求是重复恳求。这个时分咱们能够经过产品逻辑的方法来优化,比方,在用户点击查询之后将“按钮置灰”,或许经过JS操控xx秒只能只能提交一次恳求等,有用的阻拦了80%的无效流量。以上!更多架构技能干货,私信【架构】即可检查我原创的300期+BAT架构技能系列文章与1000+大厂面试题答案合集。

共收录0个网站,0个公众号,0个小程序,0个资讯文章,0个微信文章
首页 关于我们 联系我们 收录标准 广告合作 免责声明 友情链接 TAGS标签
点击收藏小提示:按键盘CTRL+D也能收藏哦!
网站声明:本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,不承担任何责任。在此特别感谢您对分类目录网的支持与厚爱!
CopyRight @ 2006-2023 Www.5955.CN All Rights Reserved. 5955分类目录版权所有。  黔ICP备19007148号-12