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

【怎么提高性能和解决高并发】_第1张图片

怎么解决高并发

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

  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集合,查询也用这种方式进行查询,效率比较快。
    【怎么提高性能和解决高并发】_第2张图片

  4. 代码避免重复计算。

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

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

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

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

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

你可能感兴趣的:(工作中遇到的问题,java,spring,java-ee,spring,boot,ide)