从底层开始带你了解并发编程,五步搞定Java开发环境部署,

爱写代码的潇 2021-09-15 04:50:33
java 后端 程序员


第一次压测

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_Java

惨不忍睹,平均响应时间150ms,而且在这次压测过程中还发现其它的问题,后台报错,经查是OpenSearch每秒查询次数限制

优化代码与配置

1、修改OpenSearch配置,并且将压测环境中的OpenSearch连接地址改为内网地址。2、将代码中循环查询缓存的地方改为一次性批量查询返回。3、和相关同学确认后去掉项目中无用的代码。

第二次压测

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_02

虽然优化了代码,修改了配置,但是情况更糟糕了,而且还改出了新的问题。当时,反复检查了代码,确定查询缓存的次数已经是最少了,而且连接线程池相关参数也调到一个相对较大且合理的值了。如果,再压测还是无法达到要求的话,只有出最后一招了:缓存结果集。即,以用户ID和用户搜索的关键词为key,查询的结果为value,缓存5分钟。

第三次压测

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_程序员_03

总算符合要求了,并发60的时候响应时间达到32ms,而我又发现了新的优化点。

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_Java_04

接口中居然还有查数据库的操作,这可不能忍,排查之后去掉了一些不必要的依赖。

成长

学会了使用RedisTemplate的executePipelined进行redis批量查询

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_程序员_05

针对本次优化的总结

1、一定要绝对避免循环查数据库和缓存(PS:循环里面就不能有查询缓存,更不能有查询数据库的操作,因为循环的次数没法控制);

2、对于API接口的话,一般都是直接查缓存的,没有查数据库的;

3、多用批量查询,少用单条查询,尽量一次查出来;

4、对于使用阿里云,要留意一下相应产品的配置,该花的钱还是得花,同时,千万要记得正式环境中使用相应产品的内网地址;

5、注意连接池大小(包括数据库连接池、Redis缓存连接池、线程池);

6、压测的机器上不要部署其它的服务,只跑待压测的服务,避免受其它项目影响;对于线上环境,最好一台机器上只部署一个重要的服务;

7、没有用的以及被注释掉的代码,没有用的依赖最好及时清理掉;

8、集群自不用说;

9、一些监控类的工具工具可以帮助我们更好的定位问题,比如链路跟踪,这次项目中使用了PinPoint;

10、如果技术上优化的空间已经非常小了,可以试着从业务上着手,用实际的数据说话,可以从日常的访问量,历史访问量数据来说服测试;

11、每一次代码改动都有可能引入新的问题,因此,每次修改代码后都要回归测试一下(PS:每次修改完以后,我都会用几组不同的关键词搜索,然后比对修改前和修改后返回的数据是否一致,这个时候postman,以及Beyond compare就派上用场了);

12、关键的地方一定要多加点儿日志,方便以后排除问题,因为排查线上问题最主要还是靠日志;

复习的面试资料

这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)

 CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

  • 第一部分:Java基础-中级-高级

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_06

  • 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_程序员_07

  • 第三部分:性能调优(JVM+MySQL+Tomcat)

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_08

  • 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_Java_09

  • 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_10

  • 第六部分:其他:并发编程+设计模式+数据结构与算法+网络

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_11

进阶学习笔记pdf

  • Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_程序员_12

  • Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_程序员_13

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_14

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_15

  • Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka)

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_Java_16

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_Java_17

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_18

  • Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_19

从底层开始带你了解并发编程,五步搞定Java开发环境部署,_后端_20

版权声明
本文为[爱写代码的潇]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15298533/3887979

  1. Huawei cloud guassdb (for redis) released a new version: Lua script and SSL connection encryption
  2. Java thread pool - work queue
  3. 一名畢業三年的女程序媛面試頭條經驗,關於Redis主從節點數據過期一致性的思考,
  4. Trois ans d'expérience d'entrevue avec une femme de programmation diplômée, une réflexion sur la cohérence de l'expiration des données de redis Master slave Node,
  5. Un plan de carrière Java correct, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  6. 万字详解微服务的哨兵机制,架构师带你玩转Redis高性能缓存设计实战,
  7. Un article vous a appris à gérer les entrevues sur le Web, à partager 350 vraies questions d'entrevue Java,
  8. Jquery Tools Methodology collation, Sharing a little interview Experience
  9. Tutoriel de développement Java, compétences de base nécessaires pour interviewer un programmeur Java dans une grande usine,
  10. "Anti Mafia storm" has just finished, another criminal investigation play has come, and the supporting actor is more popular than the protagonist
  11. 萬字詳解微服務的哨兵機制,架構師帶你玩轉Redis高性能緩存設計實戰,
  12. L'architecte vous guidera dans la conception de cache haute performance de redis.
  13. Linux驱动开发: 杂项字符设备
  14. Jquery plug - in urianchor, app front end Development
  15. Linux驅動開發: 雜項字符設備
  16. Développement de pilotes Linux: périphériques de caractères divers
  17. Utilisez @ async dans Spring boot pour effectuer des appels asynchrones et accélérer l'exécution des tâches!
  18. $in jquery, Visualized Web Development Tool
  19. Le développement Java doit être fait. Les entrevues https demandent souvent une analyse complète.
  20. 不明白JVM虚拟机还怎么面试,一起刷完了这份1307页的Java面试宝典吧,
  21. 不断提升自己创造溢价的能力,字节跳动 阿里 华为 腾讯等大厂Java面试题,
  22. Jdk's Past Life: The Classic Features of Thin Number - java5 - - - 15 -, webfront Development
  23. Résumé des questions d'entrevue pour les ingénieurs en développement Java, analyse des questions d'entrevue à haute fréquence Dubbo,
  24. Améliorer continuellement leur capacité à créer des primes, et les questions d'entrevue Java d'Alibaba Huawei Tencent et d'autres grandes usines sont sautées en octets.
  25. Install docker YJ version of openSUSE 11.3
  26. Je ne comprends pas comment la machine virtuelle JVM peut encore interviewer, et j'ai terminé ce dictionnaire d'entrevue Java de 1307 pages.
  27. 中软国际Java机试,如何写出高效率的SQL?
  28. 中级Java工程师面试,阿里 头条 腾讯等大厂Java笔试题目分享,
  29. 两年Java开发经验,为什么spring能最好地改变Java?
  30. Echarts realizes the rotation of the moon (super simple, you can see it at a glance)
  31. Deux ans d'expérience dans le développement de Java, pourquoi Spring peut - il le mieux changer Java?
  32. Entretien d'ingénieur Java intermédiaire, partage de sujets d'examen écrit Java de grandes usines comme Alibaba headline Tencent,
  33. Zhongsoft International Java Machine test, comment écrire un SQL efficace?
  34. Reflection type of Java Foundation
  35. Comment gérer efficacement les changements dans les ressources k8s?Analyse du mécanisme de mise en œuvre de k8s informer
  36. Installation de jdk1.8
  37. MySQL column - Linux underlying interaction and RAID storage architecture
  38. Interviewer: do redis transactions satisfy atomicity?
  39. 兩年Java開發經驗,為什麼spring能最好地改變Java?
  40. Migration practice from zookeeper to Nacos
  41. Dubbo's past and present life
  42. Initial experience of Dubbo application level service discovery
  43. Measure the Dubbo function of Tengine open source
  44. Comment envoyer 100 000 requêtes http le plus rapidement possible
  45. Huawei cloud guassdb (for redis) released a new version: Lua script and SSL connection encryption
  46. Mybatis vs hibernate, which performance is better?
  47. Python - Programmation orientée objet - _Rapport()
  48. Python - Programmation orientée objet - _Appel()
  49. JQuery Basics
  50. 五年Java开发经验面试,揭秘今年Java春招面试必问问题有哪些?
  51. 互联网Java工程师面试题,遇到的面试官都是架构师级别,
  52. Python - Programmation orientée objet - _Nouveau() et mode Singleton
  53. Python - Programmation orientée objet - méthode magique (méthode de double soulignement)
  54. Python - Programmation orientée objet - pratique (6)
  55. Python - Programmation orientée objet - réflexion hasattr, GetAttr, GetAttr, delattr
  56. Python - Programmation orientée objet - _Dict
  57. Computer graduation project java + SSM sorting algorithm online reading system
  58. Les questions d'entrevue pour les ingénieurs Java d'Internet, les intervieweurs rencontrés sont tous de niveau architecte,
  59. Cinq ans d'entrevue d'expérience en développement Java, découvrez les questions que vous devez poser lors de l'entrevue d'embauche du printemps Java de cette année.
  60. Java or the king of enterprise software- sivalabs