性能优化1-概述
来源:互联网 发布:南风知我意叶小意txt 编辑:程序博客网 时间:2024/05/15 23:50
一.性能优化概述
根据不同应用,业务场景及指标的情况下,制定要达到的性能指标。
找到性能问题,然后分析瓶颈,解决性能问题。
通常的瓶颈有:应用层代码,算法,本身应用架构,数据库层,jvm等。
常见的指标有:
吞吐量,tps,qps,响应延时。
tps,吞吐量及qps与业务指标有关。
响应延时,更加侧重客户体现上,这会影响转化率。
响应延时又分为最长延时,平均延时及最短延时。
一般最长延时及平均延时会比较关注。
之前做的一个电商项目,首页延时响应时间最长是20ms。
一天按1000万订单来算,一天24小时,则平均每秒下单tps必须在115以上。
购买还需要考虑购买时间点,不可能流量都比较平均,这部分数据就需要实际的数据分析了。
这里假设早上9点到晚上9点是高峰期,则按12小时算,则tps必须在230以上。
因为还有峰值访问,所以一般可以设置这个平均tps乘以一个系数,这里是3,则要求tps在690以上。
二.性能优化怎么做
首先是性能测试,分析瓶颈。
jmeter等可以用来压测。
如果发现下单tps不符合业务指标,就要分析性能瓶颈在哪一块了。
一般下单包含以下几个核心操作(实际还有优惠券等):
1.创建订单
2.扣产品库存
3.扣用户钱
4.更新订单状态为成功
可以看出有许多涉及很多服务。
这时如果有调用链监控,则对于性能定位就比较方便。
如果扣产品库存服务比较慢,则需要分析这个服务具体的实现。库存本身是线程竞争的资源。而本身的瓶颈在于数据库。
对于这块常见的优化是:
1.将热点产品库存分散在多个服务器,比如产品a总库存为10000,分散在2台服务器,则每台库存为5000,这样压力可以少一半。
而对于库存扣减请求需要按load banlance形式去循环扣减。
2.底层扣减库存的优化,底层不要对产品加锁再在程序层做扣减。
直接在sql层写:update product set stock=stock-[请求库存] where stock>=[请求库存]
这个方式比上面的方法少一次数据库请求。
3.更为极端的优化是库存操作在redis内存
但缺点是如果redis挂了,则会导致超卖情况,这个与具体实现有关。
还有一种比较好的做法是:
购买车阶段库存扣减从redis做,最终实现下单的时候以数据库库存为主。这个不会导致超卖。
这种对于抢购类业务场景还是有优势的,因为最终进入到数据库层下单流程的只有实际库存数的用户流量。
比如,某产品之前库存是1000,其中100件已经加入购买车,数据库库存是1000。
redis挂了,这时从数据库恢复库存,内存库存就变为:1000,而这多出来的100再被其他用户加入购买车后,最终下单会告诉用户【产品已被抢光】,并不会发生超卖。
这时实际上涉及一个在redis挂了,如何恢复库存的情况,其实可以从用户对应购买车中购买了哪些产品,来进行库存的恢复。但缺点是用户数比较大时,恢复比较慢。
阅读全文
0 0
- 性能优化1-概述
- MySql性能优化概述
- Oracle性能优化概述
- mysql 性能优化概述
- Java性能优化(概述)
- mysql性能优化概述
- 前端性能优化概述
- 系统性能优化概述
- 【性能优化】ORACLE数据库性能优化概述
- Oracle 的性能优化概述
- 性能监测和优化概述
- Java性能优化[0]:概述
- Java程序性能优化-概述
- Java性能优化[0]:概述
- ORACLE数据库性能优化概述
- Java程序性能优化-第一章 Java性能优化概述
- Oracle 性能优化的基本方法概述
- Java程序的性能优化概述
- 基于S3C2451裸机开发的电子相册
- osx制作u盘安装盘
- linux 之chpasswd
- Java系列之JDBC和ODBC之间的区别与联系
- 安装NVIDIA显卡驱动以及CUDA
- 性能优化1-概述
- ofbiz实体引擎(六) GenericHelper的初始化创建
- 自定义view
- 简单的整数划分问题
- 基于Linux的多线程Web Server
- ORACLE 中的union(去重并集),union all(不去重并集),intersect(交集),minus(减集)
- ETL学习笔记之三:MS SQL DTS
- OD常用断点大全~
- ETL学习笔记之四:开源项目 Kettle