随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务架构逐渐成为系统架构的一个代名词。本书首先从理论出发,介绍了微服务架构的概念、诞生背景、本质特征以及优缺点;然后基于实践,探讨了如何从零开始构建第一个微服务,包括Hello World API、Docker 映像构建与部署、日志聚合、监控告警、持续交付流水线等;最后,在进阶部分讨论了微服务的轻量级通信、消费者驱动的契约测试,并通过一个真实的案例描述了如何使用微服务架构改造遗留系统。全书内容丰富,条理清晰,通俗易懂,是一本理论结合实践的微服务架构的实用书籍。
本书不仅适合架构师、开发人员、测试人员以及运维人员阅读,也适合正在尝试使用微服务架构解耦历史遗留系统的团队或者个人参考,希望本书能在实际工作中对读者有所帮助。
与Google|FaceBook|Amazon|Netflix同路 为容器|云|DevOps|大数据架构
前言
一直以来,系统的架构设计就是 IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效地构建。系统架构设计描述了在应用系统内部,如何根据业务、技术、组织、灵活性、可扩展性以及可维护性等多种因素,将应用系统划分成不同的部分,并使这些部分之间相互分工、相互协作,从而为用户提供某种特定的价值。多年来,我们一直在技术的浪潮中乘风破浪,扬帆奋进,寻找更优秀的系统架构设计方式来构建系统。
由来
随着 RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务架构逐渐成为系统架构的一个代名词。那么微服务是否是业界期待已久的企业架构解决方案呢?在微服务架构的实施过程中存在着怎样的困难和挑战呢?
在过去两年多的时间里,笔者一直在探索和实践,并助力国外某房地产互联网门户,将其复杂的业务支撑系统逐渐演进为基于微服务架构的系统。
这期间也经历了从微服务的理论认识,到小范围实践、迭代,再到多个基于微服务构建的项目已经成功上线的过程。在感受微服务为开发实践、测试策略、部署、运维等带来改变的同时,也切身体会到使用微服务架构,对系统灵活性、可伸缩性方面的提升,以及对团队应对变化能力的提升。
结构
鉴于此,本书从笔者实践的角度出发,首先阐述了单块架构存在的弊端以及微服务的理论基础。接着通过实践部分,让读者能够体验从零开始搭建第一个微服务的过程,包括代码静态检查、AWS基础设施构建、 Docker映像构建及部署、持续交付流水线、服务的日志聚合以及监控和告警。随后,探讨了笔者在微服务的实践过程中所积累的经验,包括基于 HAL的通信机制、消费者驱动的测试,并通过一个真实的案例,帮助读者更好地理解微服务架构所带来的灵活性、易扩展性和独立性。
全书分成 3部分,共 14章。
第 1部分为基础部分。包括第 1章和第 2章,概述了三层应用架构以及微服务架构。
第 2部分为实践部分。包括第 3章至第 10章,通过一个具体的实例,从头到尾介绍了一个服务从需求到实现,再到构建、部署以及运维的整个过程。
第 3部分为进阶部分。包括第 11章至第 14章,讨论了微服务的持续交付、测试策略、通信机制,并描述了一个使用微服务改造遗留系统的真实案例。
部分和部分之间几乎是相互独立的,没有必然的前后依赖关系,因此,读者可以从任何一个感兴趣的部分开始阅读。但是,每部分中的各章节之间的内容是相互关联的,建议按照章节的顺序阅读。
结合作者本人的工作经验和使用习惯,书中的大部分案例代码均采用 Ruby编写,并且运行在 Mac OS环境上。因此,读者最好对 Ruby语言有一定了解,并且熟悉 Mac OS或者 Linux环境下的基本操作,以便能够更加顺利地阅读本书。
感悟
2014年 10月,我在 InfoQ上发表了一篇题为《使用微服务架构改造遗留系统》的文章,收到了很多朋友的反馈与建议,并有一些朋友和我积极探讨微服务架构的实践与心得。2015年初,基于在项目中积累的经验,我开始在博客上连载《解析微服务架构》系列的文章。机缘巧合,认识了电子工业出版社计算机出版分社的张春雨编辑,并在他的建议下,开始构思如何将自己在微服务实践中积累的经验以书的方式展现出来。但由于工作项目进度一直很紧,直到 2015年 4月,参加完北京 QCon会议后,才开始真正动笔。
当时,自己曾信心满满地认为,应该能够比较顺利地完成这本书,因为大部分内容都比较熟悉,而且平时工作中也有笔记和积累。但当真正动笔之后才发现,理解领悟和用文字表述清楚是截然不同的两件事。有时候看似很容易的知识点,用文字解释清楚却并非易事。有时候工作中天天遵循的实践,总结清楚却需要花些工夫。当然,整个写作的过程,也是自己将微服务的相关知识点以及积累的经验从头到尾梳理的过程。通过编写本书,使得自己对这些知识的认识和理解更加深入和全面,受益匪浅。每次重新回过头来审阅书稿时,总会觉得某些知识点讲述得不够透彻,需要进行补充,或者应该用更好的方式将其展示出来。
微服务作为当下热门的话题之一,其涉及的部分已经不仅仅局限在技术层面,而是关注整个产品或者组织的价值。因此,它不仅涉及技术选择、服务划分、服务注册、服务安全、服务测试、服务运维,也包括微服务下团队组织架构的变化,全功能团队的构建,可靠的持续交付流水线,DevOps文化等。作为一本微服务架构的书,很难做到面面俱到。另外,由于时间仓促以及作者自身水平有限,书中难免有疏漏之处,在此敬请广大读者批评指正。在阅读本书的过程中,如有任何问题,可通过微信号:5109343或邮箱:wldandan@gmail.com与我联系。
最后,希望读者能享受微服务架构的实践之路。
王磊 2015年 10月 7日于西安
致谢
首先,要感谢我的家人,特别是我的妻子。在我占用大量周末、休假的时间进行写作的时候,她给予了极大的宽容、支持和理解,并对我悉心照顾且承担了全部的家务,让我能够全身心地投入到写作之中,而无须操心家庭琐事。没有她的支持和鼓励,这本书是无法完成的。
同时,要感谢 ThoughtWorks提供了优秀的环境和平台,使我的技能能够得以施展,并且身处一群技术牛人中间,也得到了很多学习和成长的机会。
另外,感谢我的同事赵国庆和陈熙,他们为本书“Pact实现契约测试”小节提供了示例代码。也要感谢我所在的团队对我一直以来的鼓励与支持,并在日常的工作中给予了我很多帮助。同时,感谢张凯峰、吕健、崔福罡、周星、邱俊涛(排名不分先后)等同事的帮助,在我写书的过程中,他们提出了很多宝贵的建议。谢谢各位!
最后,还要感谢电子工业出版社计算机出版分社的张春雨编辑和刘舫编辑,在我写作期间给予了很多指导和帮助。根据他们的建议,我对本书的内容做了很多修正,使内容更加充实,也更加易懂,本书能够出版,离不开他们的敬业精神和一丝不苟的工作态度。