微服务是一种分布式系统架构,是近年来备受关注的话题。它是大型互联网公司系统架构发展到一定程度的产物。它建议我们将业务切分为更加细粒度的服务,并使每个服务的职责单一且可独立部署,服务内部高内聚,服务之间低耦合,彼此相互隔离。分布式微服务架构在大型互联网公司是一把利剑,但并非适合所有企业,比如传统IT企业。因为分布式微服务架构对技术要求高,需要我们有一个自动化部署系统、分布式微服务日志中心以及完善的服务监控和告警平台,对公司的运维人员要求更高,需要投入更多的人力和物力,只有大公司或者一流的技术团队才能真正玩得起微服务架构。所以,我们不能为了微服务而去微服务,需要根据企业自身的情况选择适合自己公司的系统架构。
本书是一本理论和实践相结合的图书,将非常完善地介绍分布式微服务所涵盖的方方面面的知识,并通过大量生动形象的原理图以及实战案例加深读者对微服务架构的理解,相信读者必会受益匪浅。
让我们开始分布式微服务架构的探险之旅吧!
本书共18章,以下是各章节的内容概要。
第1章主要介绍系统架构的发展历程和架构演变:单体架构、垂直MVC架构、SOA面向服务架构、分布式系统架构、分布式微服务架构。
第2章主要介绍开始学习分布式微服务架构之前的环境准备,包括JDK安装、Intellij IDEA安装、Maven安装、快速搭建Spring Boot项目以及Spring Boot核心功能及生产级特性。
第3章主要介绍微服务之间如何通过RPC相互调用、RPC核心组件、RPC调用过程、RPC框架的性能以及目前流行的RPC框架等。
第4章主要介绍微服务之间调用时,数据如何进行序列化与反序列化,以及目前主流的序列化框架和实战。
第5章主要介绍回顾Java网络通信,包括传统BIO编程、伪异步I/O编程、NIO编程,介绍目前非常流行的通信框架Netty,以及如何通过Netty开发具体实例。最后,介绍分布式服务框架使用的私有协议和公有协议,设计自定义私有协议需要注意的问题。
第6章主要介绍微服务路由、服务信息存放方式、负载均衡的实现以及负载均衡算法。
第7章主要介绍微服务注册中心的概念、ZooKeeper的概念、ZooKeeper的原理、ZooKeeper的安装、ZooKeeper搭建集群环境、命令行客户端ZkClient以及ZooKeeper实现服务注册与发现。
第8章主要介绍服务调用的方式:同步调用、异步调用、并行调用、泛化调用等。
第9章主要回顾Docker容器化技术,包括Docker的基本概念、Docker的架构、Docker的安装、Docker常用命令、Docker构建镜像以及如何通过Docker技术将Spring Boot应用容器化。最后,介绍微服务部署的几种方式:蓝绿部署、滚动发布以及灰度发布/金丝雀部署等。
第10章主要介绍服务限流定义、服务限流算法、限流设计以及分级限流。
第11章主要介绍服务降级原因、服务降级开关、自动降级、读服务降级、写服务降级、服务容错策略、Hystrix降级与熔断、服务优先级设计等。
第12章主要介绍服务版本和服务发布的三种方式:注解方式、XML配置化方式、API调用方式。
第13章主要介绍分布式日志、日志类型、日志结构、常用的日志框架以及如何搭建ELK日志中心。
第14章主要介绍分布式微服务架构监控,包括:监控价值、监控的完整体系、微服务监控的类型、Spring Boot应用监控、Spring Boot Admin监控系统以及如何集成InfluxDB+cAdvisor+Grafana搭建监控系统等。
第15章主要介绍配置中心的演化、配置中心的原理以及如何使用Spring Cloud Config搭建配置中心。
第16章主要介绍分布式数据库架构与原理、分布式事务理论、分布式缓存架构与原理、分布式Session架构与原理以及微服务之间的解耦。
第17章主要介绍微服务测试,包括:Spring Boot单元测试、Mockito/PowerMockito测试框架、H2内存型数据库、REST API测试以及性能测试等。
第18章主要介绍微服务架构案例:分布式微服务框架Dubbo、Spring Boot+Spring Cloud解决方案、Spring Boot+Kubernetes+Docker解决方案等,同时介绍Spring Cloud的概念、Spring Cloud生态、Dubbo的原理、Kubernetes的概念、Kubernetes的原理与使用等。
读者需要掌握J2SE基础知识,这是最基本的,也是最重要的。
在项目实战中需要用到Java Web的相关技术,比如:Spring、Spring MVC、Tomcat等技术。
本书的很多内容都是建立在读者了解Spring Boot的基础上展开的,读者需要对微服务脚手架Spring Boot的基础知识和功能特性有一定的了解。
读者需要了解目前主流的技术,比如数据库MySQL、缓存Redis、消息中间件Kafka、容器技术Docker等。
本书项目实战开发环境为:
本书GitHub源代码下载地址:
https://github.com/huangwenyi10/distributed-service-architecture-book.git。
本书能够顺利出版,首先感谢清华大学出版社的王金柱老师及背后的团队对本书的辛勤付出,这是我第四次和王金柱老师合作,每次合作都能让我感到轻松和快乐,也让我体会到写作是一件快乐的事情,我很享受这个过程。
感谢厦门美图之家科技有限公司,书中很多的知识点和项目实战经验都来源于贵公司,如果没有贵公司提供的实战案例,这本书就不可能问世。感谢主管黄及峰,导师阮龙生和吴超群,同事张汉铮、兰可成、彭阳坤、黄灿槟、王怀宗、许巡枝、吴旭星,项目管理张春宇等在学习和生活上对我的照顾。
感谢笔者的女朋友郭雅苹,感谢她一路不离不弃地陪伴和督促,感谢她对我工作的理解和支持,感谢她对我生活无微不至的照顾,使我没有后顾之忧,全身心投入本书的写作中。
限于笔者水平和写作时间有限,书中肯定存在不妥之处,欢迎读者批评指正(邮箱:huangwenyi10@163.com)。
黄文毅
2019年5月31日