前言
微服务是一种架构模式,但也不仅仅是一种架构模式,还涵盖了众多的软件开发方法和技术,又代表着敏捷的开发体系,提倡重构和持续演进,对于开发、测试、运维等有着不同的要求。同时,它可能还需要更加复杂的设计方法,更加轻量的协议,甚至还会影响组织或团队的规模和结构,可能给团队带来技术栈的“爆炸”。在这个技术浮躁的年代,对于已经成为主流的微服务架构,我们应该如何面对?
微服务到底是什么,一直众说纷纭,我们只知道各大企业纷纷追捧和实践微服务架构,有的项目可能使用了Spring Cloud就算是使用微服务了,然后说微服务就是Spring Cloud,有的系统可能越做越像SOA,然后说微服务就是SOA的一种,还有的把自己的应用拆分,然后觉得把应用拆分成小块就是微服务。并不是说以上说法都是错的,但行业里确实还没有一个标准的试金石来验证微服务的好与坏,微服务的“酸甜苦辣”可能只有用过了才知道。
其实,每个新概念的出现都填补了一些空白领域,每个新技术的产生都有它擅长解决的问题,每个语言的发明都有它专注处理的场景。软件开发的世界就是这样,我们会遇到各式各样的麻烦,会蹚过数不清的坑,会学习学不完的框架,甚至有的技术还没有搞清楚原理就已经被淘汰了,但我们仍然乐此不疲。
很多年前笔者就听说过“微服务”的概念,但一直没有合适的机会和方法去系统地学习微服务,好在根据多年工作经验的积累,从不同的项目实践中慢慢总结了一些微服务的经验。不敢说全部都是绝对的权威理论,但大多都是从真实的实战场景出发,以解决问题为导向慢慢推演出的架构模式。本书旨在为广大读者介绍一个较为全面的微服务开发体系。
受作者水平和成书时间所限,本书难免存有疏漏和不当之处,敬请指正。
本书特色
1. 内容实用、详略得当,讲授符合初学者的认知规律
本书多采用图例与案例分析,行文深入浅出、图文并茂,以通俗易懂的语言来讲解各种软件知识,每讲到新的概念或有关联的概念时,都会做出解释,软件基础知识薄弱的读者也能够跟随本书的节奏,快速地理解和掌握微服务的相关知识。
2. 不只是开发技术,还包括软件设计、测试及运维等全面的微服务领域的解析
书中除讲解具体的微服务核心开发架构和技术框架以外,还特别强调软件设计、测试及运维等知识点,如契约测试、领域驱动设计、容器化技术、持续集成和持续交付等理论和实战知识,因此特别适合拥有一定基础的中、高级程序员阅读,可以学习和了解到更多纯开发以外需要掌握的知识。
3. 以解决问题为导向,引发架构思考
本书更加注重解决问题的思路引导,通过实际的场景分析,不只是解释了框架和技术概念,还展现了相关技术的由来,正所谓知其然知其所以然,本书也十分适合已经从事架构工作的架构师阅读,能够帮助架构师更好地梳理解决问题的思路和方法。
本书内容及体系结构
第1章 微服务概述
微服务并不是一个新的概念,但从提出至今一直热度不减,而且随着技术的不断创新,不同的技术团队会产生不同的理解,这也导致了好像大家都在做微服务,也都想做好微服务,但具体的软件设计或架构实践会有很多的不同,本章就深入探讨到底什么是微服务。
第2章 微服务架构设计
微服务架构有两个难点:一是微服务架构本身核心组件的落地设计,即技术实现;二是微服务在物理上的层次结构和拆分设计。这两点是实现微服务架构设计成功的关键因素,本章将详细介绍微服务架构的核心架构。
第3章 Spring Cloud相关组件
很多人都觉得使用了Spring Cloud就是用了微服务,虽然Spring Cloud并不能代表微服务的全部,但是通过学习Spring Cloud,确实可以更加深入地了解微服务的理念和实践,如海量服务的容错问题、雪崩问题、配置和监控问题、日志追踪问题等,本章将介绍Spring Cloud的相关微服务组件,学习使用Spring Cloud解决这些问题的方法。
第4章 契约测试
微服务架构中最常见的就是远程调用,如服务和服务之间的远程调用,前端和后端的远程调用,BFF和服务的远程调用,等等。当系统体量越来越大时,如何保证服务间调用关系的正确性?哪个接口会影响到哪个调用者?这就需要一个自动的方法来帮助人们测试接口的可靠性,这就是契约测试。
第5章 API网关
网关的英文是Gateway,翻译为门、方法、通道、途径。网关就是接口的通道或接口的大门,要想访问API,就必须通过API网关,那为什么要有API网关,这么做有什么作用呢?本章将详细介绍微服务架构中API网关的作用和具体用法。
第6章 BFF用于前端的后端
随着前端技术的大爆发,面对逐渐复杂化的前端工程体系,越来越多的企业开始采用前后端分离的开发模式。随着微服务模式的流行,前后端的交互也变得越来越复杂,如大量接口的组合、复杂的配置、重复的代码等问题使前后端的开发者饱受折磨。于是,一个新的模式诞生了,BFF用于前端的后端。越来越多的项目开始采用BFF模式,本章将详细介绍BFF模式的具体实践用法。
第7章 领域驱动设计
近几年来,随着微服务的流行,一个新的软件设计方法逐渐流行起来,这就是领域驱动设计。当我们有了众多的技术框架和架构模式时,具体去落地实施一个微服务项目的难处似乎并不仅仅体现在软件技术上,例如,我们该如何设计微服务的软件模型和划分服务职责?本章将介绍领域驱动设计这一新兴的科学设计方法。
第8章 Docker和K8s
提到微服务,首先想到的是服务很小、职责很小,那如果是一个庞大复杂的系统,我们必然会建立很多的微服务,而且服务都是可以水平扩展的,在一些大型的互联网企业,一个服务的数量可能是成百上千的,那么部署和管理这些服务就成了一个难题。本章将介绍服务容器化部署的相关知识。
第9章 持续集成、部署与交付
虽然第8章中提到了使用容器化技术的部署方式,但似乎和微服务定义中的自动化没什么关系,本章将介绍自动化部署和快速交付的相关概念与方法案例,同时思考微服务项目中需要自动化部署机制的原因。
第10章 任务管理
在软件开发过程中,无论是项目还是产品都有着自己的独特性,不可能所有的项目都千篇一律,我们会遇到各种各样的场景,除了一些宏观的架构和设计,微服务架构在技术细节上也有很多需要注意的地方,如任务管理,当然这可能是一些分布式架构的特性,而不仅限于微服务架构,本章将介绍一些微服务架构下任务管理的实践。
第11章 事务管理
事务管理一直都是软件开发中的难点,即使很多优秀的框架能够帮助我们处理一些简单的逻辑,如在单体式架构中使用AOP的事务管理框架来管理事务,但在微服务架构下,事务管理的需求与复杂度都比单体式架构更高。那么,在微服务中应该如何管理事务呢?本章将介绍事务管理的方式和方法。
第12章 传统架构的微服务转型之路
虽然微服务的浪潮越来越热,但是软件工程这么多年来,还是产生了大量传统架构的系统,面对已经存在了多年的老项目,系统性能越来越差,想要扩展又显得捉襟见肘,想要做微服务架构转型也处处受限,很多项目团队甚至直接选择丢弃老的系统,重新开发新的系统。那么,当我们面对技术陈旧、业务庞杂、技术债众多的老旧系统时,该如何实现微服务的转型呢?本章将告诉大家从现有传统架构向微服务架构转型的思路和过程。
本书读者对象
• 想要学习和了解微服务的人
• 已经了解微服务想要查漏补缺的人
• 初、中、高级程序员
• 软件架构师
• 对软件架构有兴趣的各类人员