1.3 为什么要学习Spring Boot

为什么要学习Spring Boot呢?这可能是很多读者心中的疑惑。在1.2节,我们通过了解Spring Boot的特点应该已经对Spring Boot框架产生了一定的兴趣,接下来笔者将从几个方面来整体阐述学习Spring Boot框架的理由。

1.3.1 简化工作

Spring Boot最大的优点是在一定程度上简化了我们的工作,大致分为以下几个角度对工作进行简化。

• 依赖简化:Spring Boot自有的starter中提供了一些可以快捷使用的依赖,让整合或集成一些常用的功能更便捷。

• 配置简化:在配置方法中,如果没有特殊情况,Spring Boot为我们提供了一些默认的配置,比如端口号默认为8080等。

• 部署简化:正如前面介绍的可执行JAR部署,与传统服务的Web模式部署(打WAR包部署)相比,连安装Web容器的时间都节省了,不只是开发者,对运维人员也是福音。

• 监控简化:可以通过引用Spring Boot依赖的方式快捷提供监控端点,无代码侵入,十分便捷。

1.3.2 微服务时代

“微服务”一词最早是由Martin Fowler的《Microservices》一文(原文链接为https://martinfowler.com/articles/microservices.html)提出的,其核心思想是将一个单体应用根据业务功能拆分成为多个服务,使业务代码之间不再耦合。接下来,我们介绍一下由单体应用转变为微服务应用的好处。

1. 微服务的优势

• 服务解耦:将单体应用转变为多个服务,服务与服务之间通过HTTP协议或其他约定好的协议等进行网络通信。

• 技术选型广泛:微服务不需要局限于固定的技术栈,各个服务的开发团队可以根据场景自由选择开发技术,如Java、PHP、Node.Js等。

• 服务并行开发:可以多个团队分别开发不同的模块,每个团队负责一个或者几个服务,相互不受影响。

• 单一职责:不同服务的团队只需要关注自己团队的业务,无须经常为了熟悉业务而耽误时间。

• 独立部署:由于每个服务都是独立的项目,因此当服务开发完成后,可以直接独立部署。

• 敏捷开发:每个服务的业务迭代只需要更新对应服务的功能即可,支持快速迭代。

• 故障隔离:在传统单体项目中,如果某个功能发生故障,就可能导致整个服务发生宕机,但是在微服务中,一个服务发生宕机,其他服务仍然可以继续工作。

2. 微服务的劣势

• 部署需要花费更多的精力:当服务拆分得非常多的时候,可能需要消耗更多的精力去运维管理这些应用。传统的单体应用下,运维人员只需要保证一个服务正常运行即可,但是拆分微服务后,可能需要保持几十,甚至上百、上千的服务高效运行,这对运维人员来说是一个很大的挑战。

• 服务间的接口问题:正因为拆分了微服务,服务与服务间使用接口进行相互调用,当一个接口需要改变格式或者增减数据时,所有调用这个接口的服务都需要做出相应的调整才能正确地使用。

• 高可用:拆分微服务后,可能有很多服务需要调用同一个服务或者接口,这个服务的可用性就需要让我们更加注意。

• 分布式事务:微服务系统各个服务间可能使用不同的数据库,比如搜索服务使用Elasticsearch、基础服务使用MySQL、评论服务使用MongoDB,对于不同数据库间数据的一致性将是我们面临的重大挑战。

• 网络复杂性:由于各个服务间使用接口调用,因此系统间需要考虑很多网络延迟等客观因素来保证服务间的正常运转。

• 测试的复杂性:在测试方面,服务间的接口调用、服务间的测试需要一套整体的测试方案,自动化测试就显得必不可少。

由于Spring Boot项目可以提供快速开发、测试、部署,因此Spring Boot是微服务应用的不二选择。

1.3.3 社区背景强大

社区背景强大其实是Spring Boot如今盛行的原因。众所周知,Spring家族对于开发者提供了无尽的便利,而作为Spring的亲儿子“Spring Boot”则继承了一切Spring的优点,并且规避了很多Spring框架臃肿的缺点,而后续Spring家族的分布式框架Spring Cloud也是基于Spring Boot框架实现的框架,所以作为Spring的爱好者,或者将要学习Spring Cloud框架的开发者,Spring Boot是必须要学习的。

1.3.4 市场需求

在写这本书之前,笔者游历于各大国内、国外技术论坛,无论是在国内还是在国外,Spring Boot的呼声都特别高,而且框架的更新频率特别快。如图1-3所示是从2014年到2018年Spring Boot的百度搜索指数。

图1-3 Spring Boot百度搜索指数(图片来源于百度搜索指数)

从搜索指数可以看出,Spring Boot的搜索值日趋增长,关注度特别高。

另外,我们从互联网招聘网站上来看,已经有超过7成以上的公司将Spring Boot框架作为筛选人员的必要条件,所以无论是从个人提升,还是比较实际的跳槽、涨薪等,学习Spring Boot都会为你的技术栈增光添彩。