Spring微服务之我见
文彦峰,彭艳飞
微服务正被越来越多的组织和团体关注。微服务架构有很多好处,它通过分解巨大单体式应用为多个服务方法解决了复杂性问题。在功能不变的情况下,应用被分解为多个可管理的分支或服务。每个服务都有一个API定义清楚的边界。微服务架构模式给采用单体式编码方式很难实现的功能提供了模块化的解决方案。由此,单个服务很容易开发、理解和维护。这种架构使得每个服务都可以由专门开发团队来开发,并且每个微服务都可以独立部署。
但是,微服务架构也有它的不足。微服务是一个分布式的系统架构,由此会带来固有的复杂性,开发者需要了解RPC或者RESTful接口之间的消息传递内容,甚至协议。如果是单体式开发,开发者就不需要过多地关注接口,只需要关注本身的业务内容的开发即可。
在微服务架构应用中,需要更新不同服务所使用的数据库,甚至是不同的数据库类型。这就需要我们了解分布式事务,或者定义一个□终一致的方法,从而对开发者提出更高的要求和挑战。
另外一个挑战在于,微服务架构模式应用的改变将会波及多个服务。例如,完成一个案例,需要修改服务A、B、C,而A依赖B,B依赖C。在单体式应用中,只需要改变相关模块,整合变化,部署就可以了。相比之下,微服务架构模式就需要考虑相关改变对不同服务的影响。
测试一个基于微服务架构的应用也是很复杂的任务。例如,测试一个单体式Web应用的REST API是很容易的事情;反过来,采用流行的Spring Boot架构,同样的服务测试需要启动与其有关的所有服务,这样就给测试带来了一定的复杂性。
部署一个微服务应用也很复杂,而一个单体式应用只要简单地在网关后面部署各自的服务即可。相比之下,一个微服务应用一般由大批服务构成,如果互相依赖,需要全部部署起来,它们才能通信并完结一个业务流程。除此之外,还需要一个服务发现机制,用来发现与其进行通信服务的地址。
本书由浅入深的介绍了基于Spring Boot的微服务开发,可以帮助读者了解Spring Boot、Spring Cloud、Docker、Mesos和Marathon的使用,详细介绍了Spring Cloud各种能力的实现。同时也讲述了微服务的自动化扩缩容,以及服务的日志记录和微服务的监控。读完本书,你能够很容易的搭建一套基于Spring Boot的微服务系统。
本书的翻译经历了很多困难,能够顺利完成,特别需要感谢吴疆、刘子豪、宋达彬、陈灿、叶东林、张凯旋、何文雅等人的大力协助。
前言
微服务是一种架构风格和模式,通过将复杂系统分解成更小的、彼此协同工作的服务,形成大规模的商业服务。微服务是自主的、自包含的和可独立部署的服务。在当今世界,许多企业构建大型的、面向服务的企业应用程序时,都默认将微服务作为标准。
Spring框架是多年以来开发社区流行的编程框架。Spring Boot取消了重量级的应用容器,并提供了轻量级部署,Serverless架构应用。Spring Cloud结合了许多Netflix OSS组件,并提供了一个生态系统来运行和管理大型微服务。它提供了负载均衡、服务注册、服务监控、服务网关等能力。
然而,微服务也面临着许多挑战,如监控、管理、分发、扩容、服务发现等,特别是在大规模部署的时候。单纯使用微服务而不解决这些常见的微服务问题,会导致灾难性的后果。这本书□重要的部分是一个与技术无关的微服务能力模型,有助于解决常见的微服务挑战。
本书的目标是以务实的方式指导读者实现大规模实施响应式微服务,帮助读者深入了解Spring Boot、Spring Cloud、Docker、Mesos和Marathon。读者将会理解Spring Boot如何通过去除重量级应用服务器,来实现自主、无须服务器的部署。读者将学习Spring Cloud各种能力的实现,集装箱化的Docker、Mesos和Marathon的使用,并学会抽象计算资源和控制集群范围。
我相信读者会喜欢这本书的每一章节。本书通过成功构思微服务,可以为你的生意增加巨大的价值。本书通过列举一些例子来体现微服务的实践能力,包括一个旅游领域的研究案例。□后,你将学会如何使用Spring框架、Spring Boot和Spring Cloud实现微服务的体系结构。它们是经过测试的、具有强大功能的工具,可以开发和部署可扩展的微服务。在本书的帮助下,你可以使用Spring的□新规范来构建现代的、互联网规模的Java应用程序。
章节概要
□□章“解密微服务”,涵盖了微服务的基本概念、演变过程,以及他们与面向服务的架构的关系,并且介绍了云原生和十二要素应用程序的概念。
第2章“用Spring Boot构建微服务”,介绍了使用Spring框架构建REST-和基于消息的微服务及如何用Spring Boot包装它们。另外,我们还将探索Spring Boot的一些核心功能。
第3章“微服务概念的应用”,通过详细描述开发人员在企业级微服务中所面临的挑战,来阐述微服务的实践性。并且会总结成功管理微服务生态系统所需的能力。
第4章“微服务的演变——一个案例的学习”,通过研究BrownField航空公司的微服务演变案例,向读者展示如何应用前面章节所学的微服务概念。
第5章“通过Spring Cloud对微服务进行扩(缩)容”,展示了如何使用Spring Cloud堆栈功能扩容之前构建的微服务。本章详细介绍了Spring Cloud的架构和组件,以及它们是如何整合在一起的。
第6章“自动化扩(缩)容微服务”,演示了使用服务网关和简单的生命周期管理器,来实现微服务的弹性化和自我管理。本章向读者展示了在现实世界中,可以让服务网关变得更加智能化。
第7章“日志记录和监控微服务”,涵盖了日志在开发和监控微服务中的重要性。在这里,我们将详细介绍使用开源工具进行集中式日志记录和监控的□佳实践,以及如何将它们与Spring项目集成。
第8章“用Docker实现容器化微服务”,解释容器化在微服务环境中的概念。本章通过Mesos和Marathon演示了如何大规模部署微服务,来替换自定义生命周期管理器的实现方式。
第9章“使用Mesos和Marathon管理Dockerized微服务”,介绍了微服务的自动配置和部署。本章你也将学习如何使用Docker容器将前面构建的微服务进行大规模部署。
准备工作
第2章“用Spring Boot构建微服务”,需要下列软件来运行代码:
? JDK 1.8
? Spring Tool Suite 3.7.2 (STS)
? Maven 3.3.1
? Spring Framework 4.2.6.RELEASE
? Spring Boot 1.3.5.RELEASE
? spring-boot-cli-1.3.5.RELEASE-bin.zip
? RabbitMQ 3.5.6
? FakeSMTP
第5章“通过Spring Cloud对微服务进行扩(缩)容”,除了上述软件之外还需要:
? Spring Cloud Brixton.RELEASE
在第7章“日志记录和监控微服务”中,我们将介绍集中式日志如何在微服务中实现,这需要以下软件堆栈:
? Elasticsearch 1.5.2
? kibana-4.0.2-darwin-x64
? Logstash 2.1.2
第8章“用Docker实现容器化微服务”将演示如何使用Docker进行微服务部署,这需要以下软件组件:
? Docker version 1.10.1
? Docker Hub
第9章“使用Mesos和Marathon管理Dockerized微服务”使用Mesos和Marathon将Dockerized微服务部署到可自动扩展的云中。需要使用下列软件组件:
? Mesos version 0.27.1
? Docker version 1.6.2
? Marathon version 0.15.3
读者对象
本书主要针对Spring开发人员,他们希望构建互联网规模应用程序以满足现代业务需求。本书通过检验一些真实的用例和实践代码实例,来帮助开发人员了解究竟什么是微服务,以及当今社会微服务为什么如此重要。开发人员将懂得如何构建简单的RESTful服务,并将其有机地发展成为真正的企业级微服务生态系统。
对架构师而言,他们使用Spring框架、Spring Boot、Spring Cloud设计强大的互联网规模微服务,并用Docker、Mesos与Marathon进行管理。当他们需要在这方面寻求帮助时,本书中的能力模型将帮助架构师设计出超出本书所讨论的工具和技术的方案。
约定
在本书中,你会发现很多区分多种不同信息的文本样式。这里是一些样式的例子及其解释。
文本中的代码、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟URLs、用户输入和Twitter句柄等如下所示:
“下列属性可以在application.properties进行自定义应用程序相关信息。”
代码块设置如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.4.RELEASE</version>
</parent>
任何命令行输入或输出的写法如下:
$ java -jar fakeSMTP-2.0.jar
提示和技巧显示如下:
提示
使用AWS Lambda,研发人员可以将应用托管到云服务平台。
下载代码文件
本书的代码文件托管在GitHub上,你可以通过https://github.com/369945969/Spring-Microservices下载代码文件。
文件下载完成后,请确保你的解压缩或解压缩