【怎么提高性能和解决高并发】

提高性能解决高并发

怎么解决高并发

解决高并发的整体流程大概是:

  1. 先进行性能评估、
  2. 再进行性能测试、
  3. 然后找到程序可以承受的临界点、最后针对出问题的地方,进行优化。
  4. 当然硬件设置对高并发的影响也很重要,如果达到硬件天花板,那么再怎么优化程序都是没有用的。

一:压力测试

  1. 会找一个时间对项目进行压测,直到压崩,找到系统最高承受压力的临界点。
  2. 整个过程产品、测试、开发、运维需要全程盯着。
  3. 每个开发都盯着自己的接口,具体分析吞吐量和响应时间。
  4. 找到系统的短板,进行优化。
  5. 最后针对每个接口做限制,设置最多可以支持多少人同时访问,多余的用户则排队等候。

二:降低峰值带宽

减少单次请求的数据量,按需拿取数据。即先加载首屏数据条数,根据用户手势滑动行为,预加载后面数据。

三:负载均衡

把任务拆分到多个单元进行执行,共同完成工作任务。
拿今日头条作为例子分析:

  1. 可以把评论、文章、用户信息、视频分别写一个管理系统,单独进行管理。
  2. 像后续添加的放映厅和西瓜视频这个模块,也单独开发一个系统,其中需要的文章、视频,用户信息这一块从对应的系统调接口获取信息。
  3. 像一个经常要用到的接口,比如获取用户信息这个接口,可以单独封装到一个服务里面,每次都从这个服务调接口。
  4. 每一个模块都在k8s上建立多个结点,分摊访问压力。

四:缓存的使用

  1. 前端可以把后续经常用到的信息临时保存下,等到用户下次访问时,不需要再调接口。
  2. 把经常需要显示的信息,存到redis中。调接口时,先查询redis中的值,如果redis中没有,再查库,然后将对应信息给存到redis上。
  3. 像点赞量、访问量这种经常需要计算的数据。如果有大数据相关人员,则大数据负责提供。如果没有可以写个定时任务,每隔五分钟计算一下,存到数据库中,需要信息时,直接查库就行。
  4. 图片、视频、一些静态资源和大文件,都先存到cdn中,可以极大的加快访问速度,节省服务器带宽。(这一块是运维组负责的,具体的我不太了解,可百度cdn缓存进行学习)

五:数据库

读写分离、分库分表

六:接口提高性能

  1. for循环和if判断最多不超多三层。

  2. 查询接口,就只做查询,不要牵扯其他操作。

  3. 需要大量显示的信息,接口设计输入参数为list集合,查询也用这种方式进行查询,效率比较快。
    列表查询示例

  4. 代码避免重复计算。

  5. 避免频繁创建对象,及时释放不再使用的对象。

七:分布式可以用来解决高并发吗

分布式可以用来解决高并发。所谓分布式就是把整个项目拆分成微服务,然后按需进行扩容。

八:SpringCloud Dubbo Redis Cluster ES这些是怎么解决高并发的

SpringCloud: 把服务按模块拆分开,按照每个模块评估性能,按需扩容。
Dubbo: 把服务按模块拆分开,按照每个模块评估性能,按需扩容。
Elastic Search: 简单来说,就是把数据库的数据放到内存里,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java gc分析

使用工具转换:https://ctbots.com/#/ 通用GC分析 jstat -gc -t pid堆内存分析 jstat -gccapacity -t pid年轻代GC分析 jstat -gcnew -t pid年轻代内存分析 jstat -gcnewcapacity -t pid老年代GC分析 jstat -gcold -t pid老年代内存分析 jstat -gcoldcapacity…

Ubuntu18.04 安装opencv 4.8.0教程(亲测可用)

1. 安装准备 安装前需要下载一些必须的依赖项。 不同版本opencv依赖会有不同,具体见官网opencv安装 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-…

Spring使用P命名空间实现注入数值信息-----Spring框架

<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"x…

AI大模型之花,绽放在鸿蒙沃土

随着生成式AI日益火爆&#xff0c;大语言模型能力引发了越来越多对于智慧语音助手的期待。 我们相信&#xff0c;AI大模型能力加持下的智慧语音助手一定会很快落地&#xff0c;这个预判不仅来自对AI大模型的观察&#xff0c;更来自对鸿蒙的了解。鸿蒙一定会很快升级大模型能力&…

python提取字符串中的中文和阿拉伯数字,包括小数

项目地址 用来提取字符串中的中文和阿拉伯数字&#xff0c;包括小数 GetNumber 演示效果 #代码r extract_number_with_units("htis 10.2人次。")print(r) ########################### #输出&#xff1a; 10.2#代码r extract_number_with_units("htis 10.2万…

分数线划定(c++题解)

题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才&#xff0c;A 市对所有报名的选手进行了笔试&#xff0c;笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的 150% 划定&#xff0c;即如果计划录取 m 名志愿者&#xf…

拥抱创新:用Kotlin开发高效Android应用

拥抱创新&#xff1a;用Kotlin开发高效Android应用 引言 在当今数字时代&#xff0c;移动应用已经成为人们生活中不可或缺的一部分。无论是社交媒体、电子商务还是健康管理&#xff0c;移动应用已经深刻地影响了我们的生活方式。随着移动设备的普及和功能的增强&#xff0c;A…

Android getDrawable()和getColor()

Android getDrawable() 1.过时代码 虽然过时&#xff0c;但是不妨碍使用 context.getResources().getDrawable(R.drawable.xxx) 2.建议代码 context.getDrawable(R.drawable.xxx) 有API限制 3.最新代码 ContextCompat.getDrawable(getContext(), R.drawable.xxx); 有A…

用Rust实现23种设计模式之单例

话不多说&#xff0c;上代码&#xff01; 1. 使用Arc Mutex 在这个例子中&#xff0c;我们使用了 Arc &#xff08;原子引用计数&#xff09;和 Mutex &#xff08;互斥锁&#xff09;来实现线程安全的单例。通过 get_instance 方法&#xff0c;我们可以获取到单例实例&…

安达发|模具制造业对APS软件需求大幅增长

近年来&#xff0c;中国模具工业以每年15%左右的增速速度快速发展。然而&#xff0c;对于大型、精密、复杂及长寿命模具的需求增长将远超过每年15%的增幅。为应对这一挑战&#xff0c;模具制造业对APS软件的需求大幅度增长&#xff0c;助力行业提速发展。 据统计&#xff0c;中…

linuxARM裸机学习笔记(3)----主频和时钟配置实验

引言&#xff1a;本文主要学习当前linux该如何去配置时钟频率&#xff0c;这也是重中之重。 系统时钟来源&#xff1a; 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源&#xff0c; 24MHz 晶振是 I.MX6U 内核 和其它外设的时钟源 1. 7路PLL时钟源【都是从24MHZ的晶振PLL而来…

一个3年Android的找工作记录

作者&#xff1a;Petterp 这是我最近 1个月 的找工作记录&#xff0c;希望这些经历对你会有所帮助。 有时机会就像一阵风&#xff0c;如果没有握住&#xff0c;那下一阵风什么时候吹来&#xff0c;往往是个运气问题。 写在开始 先说背景: 自考本&#xff0c;3年经验&#xff0…

回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-LSTM蛇群算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-LS…

keep-alive组件的作用与原理

什么是keep-alive “keep-alive” 是 Vue.js 中的一个特殊组件&#xff0c;用于缓存组件的状态&#xff0c;以提高应用性能。在 Vue.js 中&#xff0c;组件通常是动态创建和销毁的&#xff0c;当切换到另一个页面或组件时&#xff0c;之前的组件会被销毁&#xff0c;再次进入时…

【直接收藏】前端JavaScript面试100问 (中篇)

31、http 的理解 ? HTTP 协议是超文本传输协议&#xff0c;是客户端浏览器或其他程序“请求”与 Web 服务器响应之间的应用层通信协议。HTTPS主要是由HTTPSSL构建的可进行加密传输、身份认证的一种安全通信通道。 32、http 和 https 的区别 ? 1、https协议需要到ca申请证书…

ASP.NET Core学习路线图

说明 1. 先决条件 - [C#](https://www.pluralsight.com/paths/csharp) - [Entity Framework](https://www.pluralsight.com/search?qentity%20framework%20core) - [ASP.NET Core](https://www.pluralsight.com/search?qasp.net%20core) - SQL基础知识 2. 通用开发技能 -…

多线程编程4:linux线程同步(信号量和读写锁)

信号量 linux信号量API&#xff1a; #include <semaphore.h> // 定义信号量对象sem_t sem; /*初始化信号量- 第一个参数&#xff1a;信号量地址- 第二个参数&#xff1a;线程同步(0),进程同步(非0)- 第三个参数&#xff1a;初始化信号量资源数(>0)&#xff0c;如果设置…

PostgreSQL:string_agg 多列值聚合成一列

PostgreSQL:string_agg 多列值聚合成一列 string_agg是PostgreSQL中的一个聚合函数&#xff0c;用于将一组值连接为一个字符串。它接受两个参数&#xff1a;要连接的值和连接符。 语法如下&#xff1a; string_agg(expression, delimiter)其中&#xff0c;expression是要连接…

uni-app:实现分页功能,单击行获取此行指定数据,更改行样式

效果&#xff1a; 分段解析代码 分页功能实现&#xff1a; 一、标签 1、搜索栏-模糊查询 <!-- 搜索框--><form action"" submit"search_wip_name"><view class"search_position"><view class"search"><…

SpringBoot项目中的web安全防护

最近这个月公司对项目进行了几次安全性扫描&#xff0c;然后扫描出来了一些安全漏洞&#xff0c;所以最近也一直在修复各种安全漏洞&#xff0c;还有就是最近在备考软考高级系统架构设计师&#xff0c;也刚好复习到了网络安全这一个章节&#xff0c;顺便将最近修复的安全漏洞总…