高性能Java架构:核心原理与案例实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

为什么写这本书

市面上讲Java框架的书很多,包括Sping Boot、Spring Cloud、Kafka等,但这些书通常只会让你技术的“量”增长,而“质”仍处于SSM的阶段。而且互联网上并没有体系化、结构化的提升技术的“质”的教材,于是我行动了起来,将我所学的架构思想与实现方式都放入本书中,将提升技术的“质”的方式分享给大家。

本书特色

本书先系统总结出在程序设计过程中各个阶段会出现的问题,然后通过对问题的分析找出解决方案,最后通过实战巩固学习成果。

通过阅读本书,读者不仅可以从架构的角度全方位地了解在Java编程过程中各阶段会出现的典型问题,从底层了解问题出现的原因,还可以跟着书中的解决方案和相关实战章节实现学习的闭环。除此之外,本书还可以帮助读者养成在编写代码的过程中对代码进行测试的习惯,时刻观察CPU与内存,从而更加深入地了解系统,掌控自己编写的代码。本书内容会对普通程序员晋升中间件研发工程师、架构工程师、游戏服务器主程等有所帮助。

本书内容安排

本书是按照程序设计与架构的顺序编写的,具体如下。

1. 在编写代码之前,应先创建表结构,然后填充亿级数据,做基准测试,即在还没开始编写代码的时候了解当前设计的数据格式和表结构的性能基准是怎样的,以便在之后编程时有所比较,并且可以在此时优化设计的数据格式、表结构、MySQL配置等内容。具体内容见第2章和第3章。

2. 在编写代码的过程中,程序中通常会有许多函数和接口,此时需要对函数和接口进行单元测试,以便了解函数或接口的性能,并与函数基准或数据库基准的数据进行对比,知道差异大概有多少。当差异过大时,需要进行优化。除此之外,当函数的多种写法语义结果相同时,也可对比出哪种性能更好。具体内容见第4章。

3. 在写好代码之后,需要对场景进行性能测试,例如购买商品场景、登录场景、支付场景等。之前在单元测试时,通常使用一个接口一项测试或一个函数一项测试的方式,但在场景中很可能会调用多个接口,例如,在登录场景中有账号和密码验证接口、用户数据接口、历史数据接口、短信提醒接口、信息推送接口等,此时需要对整体的场景进行测试。每个场景都有多个接口,并且很可能附带接口执行顺序、if-else判断(true与false须执行不同函数)、for/while循环(若调用失败则重新进行调用)等内容,此时JMH已无法满足场景类性能测试的需要,需要通过JMeter对场景进行性能测试。具体内容见第5章。

4. 在场景性能测试过程中,许多场景下的响应速度可能不如人意,此时既可以通过增加缓存提升MySQL执行效率的方式,也可以通过优化SQL的方式,对场景性能测试的函数与接口进行优化,以缩短响应时间。具体内容见第6章。

5. 在程序上线并执行一段时间之后,随着用户量的逐渐增多,单台MySQL服务器开始无法承受所有的压力,为了承载更大的数据库并发,防止单台MySQL服务器出现宕机且无法正常提供服务等问题,导致整体应用程序崩溃,需要使用MySQL集群。具体内容见第7章。

6. 随着数据库存储的内容越来越多,通过MySQL主从复制也无法存储更多的数据,此时就需要切割表,把一张过大的表切割后分别存储在不同的MySQL数据库中,这样就可以存储更多的内容。承载更多的用户。具体内容见第8章。

7. 在对MySQL进行主从复制、分库分表等之后,MySQL的节点数变得越来越多,此时可以使用性能监控的方式查看MySQL的实际使用情况。当MySQL节点发生宕机、无法响应、CPU内存过载、连接数突然过多等问题时,性能监控可及时将消息推送给相关管理人员,即可省时省力、掌控全局。具体内容见第9章。

8. 当数据库臃肿、性能不佳时,需要通过多层缓存的方式,在不同层级上设置缓存,减少数据库的连接次数与查询次数。具体内容见第10章和第11章。

9. 通常来说,秒杀系统在活动期间都需要极高的性能,为了防止超买或超卖,此时需要使用分布式锁解决数据的一致性问题。具体内容见第12章。

10. 针对不同的场景需要用不同的架构,如高并发架构、负载均衡架构等。具体内容见第13章。

本书读者对象

本书不仅适合Java初学者、刚入行的编程人员,也适合对高性能、高并发感兴趣的程序员。

致谢

感谢我的领导杨仪,你给了我许多计算机思想和思路上的指导。

张方兴