从性能测试方面学习Java高性能架构
我编写了第二本计算机类书籍《高性能Java架构:核心原理与案例实战》
首先感谢安娜姐,没您的帮助就没有这本书的发行。
在编写这本书的时候,我心里一直有个想法,就是当前市面上的书,在讲性能调优和系统架构的时候有些过于空洞和泛泛了。
可能他讲了一部分底层原理和概念,然后就会带你把整个架构搭建起来,并且告诉你这个架构是好的。
例如Spring Boot + Spring Cloud 微服务分布式架构。
例如Dubbo + Zookeeper分布式服务架构。
他就会告诉你这是好的架构,用了一大堆技术类词汇搞的人特别头疼,其中包括SOA、SOAP、RPC、GRPC、RestFul、WebService、WebSocket。
这些内容似是而非,似乎很像,我花了很长时间全部掌握以后发现一个根本性的弊病。
那就是我似乎一直在扩展自己的框架类知识。
例如用Netty框架进行编写WebSocket的NIO类代码。
例如用Spring Boot框架的@RestController注解编写RestFul风格类接口。
解析WSDL编写WebService代码。
这些架构该如何选择?
关系型数据库有MySQL、Oracle、
时序型数据库有influxDB、OpenTSDB、Prometheus,
连接数据库有JDBC、Spring JDBC、Hibernate、MyBatis、MyBatis-plus,
微服务有Spring Boot、JFinal,
网络框架有Netty、MiNa、IOServer,
页面静态化有FreeMaker、thymeleaf,
文件存储有FastDFS、HDFS、源生FTP,
注册中心有Zookeeper、Consul、nacos、Eureka,
甚至解析JSON都有GSON和FastJSON。
这些框架或工具该如何选择?
你凭什么说哪种框架好哪种差?
甚至你今天写的代码使用的for循环、while循环、do/while循环
代码中用的是if/else还是switch/case,switch/case性能会比if/else性能好么?
代码中到底能不能用i++进行计数?
System.out.println到底耗费多少性能?
这些代码细节该如何选择?
这些宏观上的架构和细节上的代码选择多到让人发指,让人爆炸。
学完Java学Python,学完Python学Golang。到最后发现似乎Java到最后都没有深入。
Spring Boot 普通项目的 HTTP 接口的TPS 能够达到多少?
其实我遇到过很多Spring Boot项目,平均TPS也就是6000。遇到TPS不行就买服务器,用集群的方式硬怼用户量,服务器不够了就申请资金,能用钱解决的事统统不去想用技术解决。
可如果不用任何框架,写套代码可以达到30000TPS,究竟要怎么做?单只用JavaEE的Servlet性能一定比Spring Boot性能差么?
甚至我想问一个最简单的问题,你公司现在的代码能够承受多少用户量而导致不崩溃?你现在可以直接回答实际最大并发数字么?
此时市面上那些个空洞的,讲框架讲原理的书一下似乎都没有用了。不允许你使用框架的时候,自然任何框架都失去了意义。
因为如果没有框架下,回到了大一你曾经第一次在黑窗口中写Hello World的时候,你是否能经过业务逻辑达到30000TPS并发。
曾经我也没有这种思想,也没有人告诉我如何做这种事情。
在后来逐渐工作中我才领悟到了,多线程也好,GC垃圾回收也好,框架也好,中间件也好,数据库也好,都重要,也都不重要。
最重要的是你需要掌握自己编写的系统,毕竟你编写的系统不是功能实现就结束了。
在此之后的事情呢?
你系统现在多少并发?长时间运行或一些特殊步骤是否会引起内存溢出的问题?
如何优化到更高并发?有哪些优化点?
一旦突增用户量,哪怕系统响应缓慢,但是否仍然可以继续排队响应?而不是直接爆炸?
此时我用第二本书去写,就是想告诉大家,所有的代码都是要靠性能测试与性能监控,才能达到理想的性能。
其中包括:
MySQL 基准测试:sysbench 与mysqlslap
代码单元的性能测试与优化JMH
Web 性能测试解决方案:JMeter
除此之外还包括MySQL相关优化、扩展监控等内容如下所示:
SQL 优化与索引优化
MySQL 主从复制
MySQL 分库分表:MyCAT
MySQL 性能监控解决方案:Prometheus+Grafana
除此之外还包括
Java堆原理及堆解决方案
Java堆外缓存原理及堆外缓存方案
Java磁盘缓存原理及磁盘缓存方案
基于Redis 的分布式锁解决方案
最终开头与结尾对市面上近十年的架构进行了轻度讲解,其中包括:
自动化测试架构
自动化持续集成架构
高并发架构
响应式编程架构
负载均衡架构
监控架构等等一系列内容。
书中对很多技术特点进行抛砖引玉式讲解,希望可以让大家有兴趣先把书读厚,而后再把书读薄!
购买链接如下所示。
https://item.jd.com/13387600.html