本书将重点关注微服务基础设施方面,其中大部分内容涉及微服务运维相关技术。全书以实践的角度进行编写,读者首先将学习到轻量级微服务架构的全景视图,随后的各个章节将围绕微服务的日志、监控、通信、解耦、测试、配置等六大方面进行展开。读者可亲自动手,从零开始搭建轻量级微服务架构,充分享受架构探险的乐趣。
架构犹如探险,踩坑在所难免。技术不能肤浅,眼界必须超前。
现任上海特赞科技CTO,曾任阿里巴巴公司系统架构师。具有丰富的互联网产品架构经验与技术管理经验,擅长敏捷开发模式,推崇“轻量级”系统架构。国内开源软件推动者,Smart开源框架创始人,图书《架构探险:从零开始写Java Web框架》作者。技术大会讲师、培训师、咨询师。热爱技术交流,乐于分享自己的成长经验。
前言
2017年,微服务三岁了。我们一直期盼它能快速长大,希望微服务技术社区能推出更多框架与工具,可以帮助我们更好地落地微服务,并从中获得微服务给我们带来的甜头,但实际情况却让我们感到有些失望。我们至今还在寻找适合自身技术需求的微服务架构,甚至仍然觉得微服务离自己有些距离。
因此我们更多的是在观望,希望看到有成功实践微服务的企业能够将自己的技术分享出来,以供更多的企业来使用,但实际情况仍然让我们感到失望。我们不得不选择Spring Cloud这样的“全家桶”式的微服务框架来实现微服务架构,此时我们就需要基于Spring Boot来开发微服务,Spring Cloud提供的大量基础设施虽然可与Spring Boot进行无缝整合,但这样的架构给微服务的技术选型带来了一定的局限性。此外,Spring Cloud包含了大量的Spring官方所提供的开源项目,目前不同的版本在兼容性方面也存在一些不稳定现象。
我们认为,微服务是一个灵活的技术架构,它不能绑定在特定的技术平台上,微服务不应该存在任何的局限性,同时还要确保有较强的兼容性。比如,虽然我们也使用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与RabbitMQ,它们是两款经典的开源消息队列。随后我们将使用RabbitMQ来实现请求应答模式,并通过RabbitMQ来实现RPC同步调用。最后我们将使用Event-Sourcing与MQ相结合,巧妙地解决分布式事务问题。
第6章:微服务测试。
本章将聚焦在微服务测试方面。首先我们将以Spring Boot应用程序为例,分别针对Service层与REST API进行单元测试。随后我们将使用Postman来充当REST API的测试工具,并结合Jenkins与Newman搭建一款REST API的自动化测试框架。最后我们将分别使用Swagger与apiDoc工具来自动生成REST API文档,并比较这两款工具的优缺点。
第7章:微服务配置。
本章将解决微服务的配置参数问题。首先我们将通过一些实例,快速学习Ansible自动化运维工具的使用方法。随后将Ansible作为微服务的配置中心,并将Jenkins与Ansible相结合,可用于优化我们现有的微服务部署框架。最后我们将使用Registrator所提供的自注册特性,实现微服务的平滑升级目标。
如何获取本书源码?
可通过以下链接下载本书源码。
http://git.oschina.net/huangyong/msa-book-2
如何参与线上互动?
欢迎加入“轻量级微服务架构”QQ群,申请加入时请注明“架构探险”。
群号:528265294
此外,请关注“架构探险图书”微信公众号,可免费获取关于本书后续的更多内容。
致谢
首先需要感谢的是我们的技术团队,如果没有你们所提供的实践经验,这本书也不可能问世。我很庆幸自己能加入特赞技术团队,也很感激你们对我一如既往的支持与鼓励。在微服务实践这条路上,你们才是专家,我只是把你们的宝贵经验整理出来,希望能让更多的人从中受益,我想这也是我们特赞技术团队的共同理想。
自从去年9月上册出版以后,很多读者都在问“下册什么时候出版?”,我原本以为是今年上半年就能完成的事情,没想到计划不如变化,公司有更加重要的工作需要我去完成,因此写书的计划也被频繁打断。直到一年后的今天,下册才能与你们见面。在此,我先对你们说声抱歉,也感谢你们一直对我的关注与等待,希望下册能给你们带来更多的帮助。
最近这一年中,我在很多公开场合下分享过关于微服务的话题,在此向曾经帮助我的技术专家们致谢,和你们聊技术是一件兴奋的事情,让我更加深刻地认识到微服务的本质,也让我对我们技术团队现在搭建的微服务架构更有信心了。同时也感谢你们对这本书所做的推荐,希望我的全力以赴能够配得上你们的称赞。
如果说写完一本书全是作者的功劳,那就大错特错了。没有好的出版社,没有优秀的编辑,我想再好的书也会让大家失望。感谢本书编辑陈晓猛先生对本书的辛勤付出,我在晓猛身上学会了谨慎与专注,这是我和晓猛第三次合作,每次合作都能让我感到,写书其实是一件快乐的事情,我很享受这个过程。
最后我想把感谢的话留给我的妻子和女儿,感谢你们一路陪伴着我,我们共同见证着对方的成长。这本书能够顺利完成,绝对离不开你们努力,因为你们给了我一个幸福而美满的家庭,让我能够将心思沉醉在写作之中。虽然最后我才感谢你们,但你们在我心中永远是最重要的人,永远无法取代。
黄勇
2017年7月18日于上海
图1-10修改为如下

图1-12修改为下图
