SpringCloud高并发性能优化
1. SpringCloud高并发性能优化
1.1. 前言
当系统的用户量上来,每秒QPS上千后,可能就会导致系统的各种卡顿,超时等情况,这时优化操作不可避免
1.2. 优化步骤
- 第一步:优化大SQL,对于多表关联的SQL,当单表数据几百上千万行时,执行可能会达到好几秒,对微服务系统来说,我是不建议join多表操作,除非是数据量少的维表,我们可以将一句大SQL拆分成多个过程,逻辑在JVM中完成
- 第二步:超时时间不要设的过长,一般一个接口的响应时间要控制在200ms以内,超时时间1s就够了,一旦接近或超过1s,就要考虑是否要用,缓存,索引,NoSQL等手段优化下了
- 第三步:如果设置了1s超时,可能因为网络的抖动,某次请求超过1s,这个时候需要设置合理的超时重试
- 第四步:设置重试,那就要考虑接口幂等性的问题,常见解决方案是建唯一索引,或者通过redis判断下唯一id,保证接口被多次调用时不重复插入数据
1.3. Hystrix参数优化
- 我们知道Hystrix线程池的大小和超时时间我们都是可以设置的,线上环境,我们需要对这些参数进行调整,该如何调整呢?
- 假设你的系统B,预计QPS是30,每秒请求响应时间是200ms,那么可以算出30*0.2=6,然后再加点缓冲空间,比如4,那么总共就是6+4=10的线程数量,当然这个4你可以自己调整,这是为了防止突然增大的流量给个缓冲的余地
- 当然这个缓存增加的线程数量对设置超时时间是有参考意义的,比如上面我如果设置了10条线程,此时的超时时间该设置多少?并不是越多越好哦,应该是这么算:10/30=0.333,那么也就是在300ms左右,10是线程池数目,30是你预计的QPS。
- 想象下,如果超时时间设为500ms,当很多请求都变为500ms时,也就是10/0.5=20,你的QPS变成了20,那么多余的请求就不会不断堆积,导致线程卡死,线程卡死后的恢复速度会是比较慢的,所以要合理设置线程池和超时时间
1.4. 降级操作
对于降级操作,可以举些例子参考
- 比如redis挂了,对查询可以查本地缓存,mysql等
- 对插入操作,数据库挂了,可以尝试写入日志文件,或写入MQ之后恢复
SpringCloud高并发性能优化的更多相关文章
- 用Netty开发中间件:高并发性能优化
用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...
- 用Netty开发中间件:高并发性能优化(转)
用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...
- GNU Linux高并发性能优化方案
/*********************************************************** * Author : Samson * Date : 07/14/2015 * ...
- 高并发&性能优化(二)------系统监控工具使用
上一篇主要从总体介绍了高并发&性能优化的相关思路和方法,本篇主要介绍系统监控工具. [CPU查看工具] ------top命令(性能) 进入top命令后,按1即可看到每核CPU的运行指标与详细 ...
- Java 架构师+高并发+性能优化+Spring boot大型分布式项目实战
视频课程内容包含: 高级 Java 架构师包含:Spring boot.Spring cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.Zer ...
- 高并发&性能优化(一)------总体介绍
[开篇词] 本文主要通过一些经典的高并发场景,以及一些基本的运维工具来讲述一些关于高并发以及性能优化相关的内容,主要包括性能瓶颈的定位,性能调优的思路和技巧等. [性能的衡量指标] ?什么是性能 性能 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- 百万并发中间件系统的内核设计看Java并发性能优化
“ 这篇文章,给大家聊聊一个百万级并发的中间件系统的内核代码里的锁性能优化. 很多同学都对Java并发编程很感兴趣,学习了很多相关的技术和知识.比如volatile.Atomic.synchroniz ...
- Java架构师/高并发/高可用/高扩展/性能优化/框架源码分析实战
https://ke.qq.com/course/401944?taid=3389721334391320
随机推荐
- views视图
1.request.POST.get('.......') --radio 单选框 get()方法 从HTML中提取发过来的数据 1. 2. 3. 4. 2.request.POS ...
- LeetCode 1216. Valid Palindrome III
原题链接在这里:https://leetcode.com/problems/valid-palindrome-iii/ 题目: Given a string s and an integer k, f ...
- 算法——回文(palindrome)
回文(palindrome):指的是从头读到尾与从尾读到头一模一样的字符串. 分别在C.Java与Python实现回文检测: C: #include <stdio.h> #include ...
- 为什么要使用 Go 语言?Go 语言的优势在哪里?
golang主要特性 1.语法简单 舍弃语法糖,严格控制关键字 C++语法糖之多,令人发指,而C又太过于底层,容易出现自己造轮子的情况,如何在两者之间取舍,是每一个转向golang的工程师曾经思考过的 ...
- Qt常用类——QFrame类与QWidge类
QFrame与QWidget的区别: QFrame是基本控件的基类,QWidget是QFrame基类. QWidget类是所有用户界面对象的基类. Widget是用户界面的基本单元:它从窗口系统接收鼠 ...
- Kafka Rebalance机制分析
什么是 Rebalance Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 consumer 如何达成一致,来分配订阅 Topic 的每个分区. 例如:某 G ...
- cad.net 2008使用WPF(摘录山人)
由于WPF的优点多多,而且在大量的winform的操作下感觉到数据操作的麻烦....推荐大家看杨中科WPF数据绑定教程 https://www.bilibili.com/video/av3388348 ...
- Alpha冲刺——总结篇
课程信息 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺 团队目标 切实可行的计算机协会维修预约平台 团队信息 队员学号 队员姓名 个人博客地址 备注 22 ...
- Jmeter接口测试【1】_安装配置教程
一.安装Java环境 1.下载JDK JDK 可以到官网选择windows系统版本(32位/64位)下载http://www.oracle.com/technetwork/java/javase/do ...
- antdpro 打包部署后访问路由刷新后404
antdpro build 后访问路由刷新后 404? 解决方法有三种: 1. 改用 hashHistory,在 .umirc.js或者是config.js 里配 history: 'hash' 2. ...