当前位置:首页 > 书籍文档 >

软件解决方案(软件的定制化服务)

来源:原点资讯(www.yd166.com)时间:2023-05-24 07:38:45作者:YD166手机阅读>>

高性能设计会涉及到几个名词:IO多路复用、零拷贝、线程池、冗余等,其本质上是一个系统性的问题,可以从计算机体系结构的底层原来去思考,系统优化离不开CPU和IO两个维度,具体如下:

  • 如何设计高性能计算(CPU):减少计算成本,合理使用同步/异步、限流减少请求次数等;让更多的核参与计算: 多线程代替单线程、集群代替单机等等;
  • 如何提升系统IO:加快IO速度,顺序读写代替随机读写、硬件上SSD提升等;减少IO次数,索引/分布式计算代替全表扫描、零拷贝减少IO复制次数、DB批量读写、分库分表增加连接数等;减少IO存储,数据过期策略、合理使用内存、缓存、DB等中间件,做好消息压缩等。
方案一:计算性能优化

1、减少程序计算复杂度

boolean result = true; // 循环遍历请求的requests, 判断如果是A业务且A业务未达到终态返回false, 否则返回true for(Requet request: requests){ // 1. query DB 获取TestDO String id = request.getId(); TestDO testDO = queryDOById(id); // 2. 如果是A业务且testDO未到达中态记录为false if(StringUtils.equals("A", request.getBizType())){ // check是否到达终态 if(!StringUtils.equals("FINISHED", testDO.getStatus)){ result = result && false; } } } return result;

代码中存在很明显的几个问题:

1.每次请求过来在第6行都去查询DB,但是在第8行对请求做了判断和筛选,导致第6行的代码计算资源浪费,而且第6行访问DAO数据,是一个比较耗时的操作,可以先判断业务是否属于A再去查询DB;

2.当前的需求是只要有一个A业务未到达终态即可返回false, 11行可以在拿到false之后,直接break,减少计算次数;

优化后的代码:

boolean result = true; // 循环遍历请求的requests, 判断如果是A业务且A业务未达到终态返回false, 否则返回true for(Requet request: requests){ // 1. 不是A业务的不走查询DB的逻辑 if(!StringUtils.equals("A", request.getBizType())){ continue; } // 2. query DB 获取TestDO String id = request.getId(); TestDO testDO = queryDOById(id); // check是否到达终态 if(!StringUtils.equals("FINISHED", testDO.getStatus)){ result = false; break; } } return result;

优化之后的计算耗时从平均270.75ms-->40.5ms

软件解决方案,软件的定制化服务(1)

日常优化代码可以用ARTHAS工具分析下程序的调用耗时,耗时大的任务尽可能做好过滤,减少不必要的系统调用。

2、合理使用同步异步

分析业务链路中,哪些需要同步等待结果,哪些不需要,核心依赖的调度可以同步,非核心依赖尽量异步。

场景:从链路上看A系统调用B系统,B系统调用C系统完成计算再把结论返回给A,A系统超时时间400ms,通常A系统调用B系统300ms,B系统调用C系统200ms。

软件解决方案,软件的定制化服务(2)

现在C系统需要将调用结论返回给D系统,耗时150ms

软件解决方案,软件的定制化服务(3)

此时A系统- B系统- C系统已有的调用链路可能会超时失败,因为引入D系统之后,耗时增加了150ms,整个过程是同步调用的,因此需要C系统将调用D系统更新结论的非强依赖改成异步调用。

// C系统调用D系统更新结果 featureThreadPool.execute(()->{ try{ dSystemClient.updateResult(resultDTO); }catch (Exception exception){ LogUtil.error(exception, logger, "dSystemClient.updateResult failed! resultDTO = {0}", JSON.toJSONString(resultDTO)); } });

3、做好限流保护

故障场景:A系统调用B系统查询异常数据,日常10TPS左右甚至更少,某一天A系统改了定时任务触发逻辑,加上代码bug,调用频率达到了500TPS,并且由于ID传错,绕过了缓存直接查询了DB和Hbase, 造成了Hbase读热点,拖垮集群,存储和查询都受到了影响。

软件解决方案,软件的定制化服务(4)

栏目热文

整体方案怎么写(方案怎么写才正确格式)

整体方案怎么写(方案怎么写才正确格式)

日常工作中,少不了要写方案,很多人一听到要写方案就头疼。其实,写方案也没有那么难,只要掌握了方案的结构,写起来也就很简单...

2023-05-24 08:16:49查看全文 >>

方案如何写(活动方案范文)

方案如何写(活动方案范文)

肖飞老师讲申论申论知识百问百答(82)方案,是一种计划性公文,主要用于对比较复杂的工作做出全面的部署,因而说方案是较为复...

2023-05-24 08:00:47查看全文 >>

需求方案怎么写(可行性分析模板)

需求方案怎么写(可行性分析模板)

一、方案背景(一)目的为规范各类常用物料的需求计划编制工作,确保物料需求计划编制正确、合理,符合生产实际,确保物料充足且...

2023-05-24 07:50:01查看全文 >>

解决方案工程师的未来(解决方案工程师怎么入行)

解决方案工程师的未来(解决方案工程师怎么入行)

来源:【人民网】近年来,我国建筑业加快转型升级,站在了高质量发展的全新起点上,一幅幅传统的“施工现场”变身为充满智慧科技...

2023-05-24 08:04:03查看全文 >>

方案的格式范文(写方案的方法与技巧)

方案的格式范文(写方案的方法与技巧)

从地基基础到屋面工程,22个专项施工方案,各类工程都覆盖,稍微修改直接使用22个专项目录安全用电施工方案电气工程施工方案...

2023-05-24 07:29:53查看全文 >>

破风影评大结局解析(电影破风最后结局是什么样的)

破风影评大结局解析(电影破风最后结局是什么样的)

成功是被逼出来的,人的潜能无穷,安于现状的话只会被淘汰,而逼自己一把的人找那个将突破自我,创造奇迹。极限,说白了就是超出...

2023-05-24 08:17:52查看全文 >>

电影破风最后的结局(电影破风看完后有什么感受)

电影破风最后的结局(电影破风看完后有什么感受)

梦想一旦被付诸行动,就会变得神圣。——阿·安·普罗克特好多和林超贤导演合作过的演员对他的评价都出奇的一致:魔鬼导演。因为...

2023-05-24 08:14:14查看全文 >>

破风电影真实吗(破风电影内容简介)

破风电影真实吗(破风电影内容简介)

今天,将近一个月的环中国国际公路自行车赛完美收官。最终,吕先景以1秒的时间优势成为第十届“环中国”自行车赛十年历史上,首...

2023-05-24 08:03:52查看全文 >>

电影破风最后结局是什么样的(电影破风结局女主和谁在一起了)

电影破风最后结局是什么样的(电影破风结局女主和谁在一起了)

一部叫做《破风》的电影,一群为梦想给拼搏的人,一段人生的洗礼。好几场比赛都以为是电影的最后了,但是并没有。从一开始三人配...

2023-05-24 07:50:43查看全文 >>

电影破风所涉及的运动(体育题材电影破风)

电影破风所涉及的运动(体育题材电影破风)

春节档提前炸了。因为今天释出的一支预告。看架势,猛烈如酒——一分钟当然看不够。今天Sir必须盘它——《紧急救援》01春节...

2023-05-24 07:50:59查看全文 >>

文档排行