我们认为, 微服务是一个灵活的技术架构,它不能绑定在特定的技术平台上,微服务不应该存在任何的局限性,同时还要确保有较强的兼容性。
比如,虽然我们也使用Spring Boot开发微服务,但也允许使用其他更适合的开发框架或编程语言来实现微服务。再比如,我们目前通过ZooKeeper来实现服务注册,但也能轻松地切换为其他技术选型,对于整个应用程序而言,这些都是无感知的。微服务所提倡的理念就是,用最合适的技术以最高效的方式来解决实际应用中的问题。
经过两年多的实践过程,我们找到了一款 能让微服务架构快速且稳定落地的解决方案 ,并将此方案的核心内容汇集成本书,希望该方案能给微服务世界带一点新的能量。本书将重点关注微服务基础设施方面,其中大部分内容涉及微服务运维相关技术。全书以实践的角度进行编写,读者首先将学习轻量级微服务架构的全景视图,随后的各个章节将围绕微服务的日志、监控、通信、解耦、测试、配置六大方面进行展开。读者可亲自动手, 从零开始搭建轻量级微服务架构 ,充分享受架构探险的乐趣。
第1章:轻量级的微服务
本章将从宏观上描述轻量级微服务架构。首先我们将从架构与架构师开始讲起,简单回顾架构演进的过程与微服务的发展趋势。随后我们将探讨在搭建微服务架构之前需要准备的工作,认识微服务架构的“冰山模型”,介绍切分微服务边界的方法和技巧。最后我们将从部署与运行两个角度来观察微服务架构,并以一幅架构全景图来结束本章。
第2章:微服务日志
本章将关注点放在微服务日志上。首先我们将从Spring Boot日志框架入手,使应用日志可以输出到Docker容器外部,以便我们可随时查看日志文件。随后我们将学习Docker日志驱动,使日志信息输出到Linux的Syslog 中。最后我们将Syslog 与ELK技术栈整合,搭建一款微服务的日志中心。
第3章:微服务监控
本章将视角放在微服务监控方面。首先我们将学习Spring Boot应用程序自带的监控特性,接着将介绍Spring Boot Admin开源监控系统的使用方法。随后我们将集成InfluxDB、cAdvisor、Grafana等开源工具,搭建一款微服务的监控中心。最后我们将学习Zipkin 工具的使用方法,将其用于微服务的追踪中心。
第4章:微服务通信
本章将围绕微服务之间的通信来展开。首先我们将在Spring Boot 应用程序中实现基于HTTP的同步调用,同时我们也会对比Spring RestTemplate、 OkHttp、 Retrofit 等工具的使用方法。随后我们将使用gRPC框架实现基于RPC的同步调用,并将gRPC与Spring Boot进行整合。最后我们将亲自动手,搭建一款轻量级分布式RPC框架。
第5章:微服务解耦
本章将使用消息队列的异步方式来解耦微服务调用问题。首先我们将对比ActiveMQ与RabitMQ,它们是两款经典的开源消息队列。随后我们将使用RabbitMQ来实现请求应答模式,并通过RabbitMQ来实现RPC同步调用。最后我们将使用Event-Sourcing 与MQ相结合,巧妙地解决分布式事务问题。
第6章:微服务测试
本章将聚焦在微服务测试方面。首先我们将以Spring Boot应用程序为例,分别针对Service层与REST API进行单元测试。随后我们将使用Postman来充当REST API的测试工具,并结合Jenkins与Newman搭建一款REST API的自动化测试框架。最后我们将分别使用Swagger与.apiDoc工具来自动生成RESTAPI文档,并比较这两款工具的优缺点。
第7章:微服务配置
本章将解决微服务的配置参数问题。首先我们将通过- -些实例,快速学习Ansible 自动化运维工具的使用方法。随后将Ansible作为微服务的配置中心,并将Jenkins与Ansible相结合,可用于优化我们现有的微服务部署框架。最后我们将使用Registrator 所提供的自注册特性,实现微服务的平滑升级目标。