作为一部帮助大家实现微服务架构落地的作品,《Spring Cloud与Docker微服务架构实战(第2版)》覆盖了微服务理论、微服务开发框架(Spring Cloud)以及运行平台(Docker)三大主题。全书可分为三部分,第1章对微服务架构进行了系统的介绍;第2-11章使用Spring Cloud开发框架编写了一个"电影售票系统”;第12-14章则讲解了如何将微服务应用运行在Docker之上。全书Demo驱动学习,以连贯的场景、具体的代码示例来引导读者学习相关知识,最终使用特定的技术栈实现微服务架构的落地。
完整解决方案 全流程分布式系统搭建
序1
===
16年国庆假期之后,我所在的公司因为业务需要,想搭建一个API网关来综合治理已有业务调用服务(我司之前采用的是当当的Dubbo扩展框架Dubbox)。前期,我和同事们在技术选型环节,讨论了诸多目前比较红火的技术框架和工具。最后达成一致,采用微服务,来重构和调整原先这些Dubbox服务,并决定使用Spring Cloud(以下简称sc)来实现API网关,争取在17年能顺利平滑地从Dubbox过度到sc。而具体的API网关demo研发工作就落实到我这里。
在开始研发工作之前,我参阅了包括官网在内很多sc研发资料,也去全球最大的同性技术交友网站GitHub上找了很多代码来仔细研读。但感觉老外的这些Guide(指南)总是讲的不是很通透。也许是有些概念他们觉得太基础了,就直接略过不表。因此我也感到很迷茫,老是问自己,到底应该如何去实现这个API网关,完成公司指派给我的研发任务呢?
幸好,某一天我看到《Spring Cloud与Docker实战微服务》这本开源书。根据书中例子,我几乎没有费什么大工夫就搭建了一个API网关的demo。甚至其中某些讲解点,看了之后能让我一下子恍然大悟,回头再看那些老外的Guide,我终于明白了其中的“奥秘”。我真的非常感激这位开源书作者,他深入浅出地将sc所涉及的各种知识点和工具的使用做了完整和详细的叙述。从此,我也记住了此书作者的网名itmuch。
几天后,我将demo做了细化和扩展,并在oschina的码云网站上开源分享了出去(具体网址见)。而无巧不巧,itmuch居然在我项目下的评论区留言了。经过加QQ,加微信一系列同性技术交友过程(你们懂的)取得了联系,也终于知道了这位itmuch的真名,那就是此书作者周立同学。在闲聊过程中,他透露了自己正在以那本《Spring Cloud与Docker实战微服务》开源书为基础,继续扩展和具体深入sc这套微服务开发体系所包含的所有技术点,准备出版成册,让更多的朋友和企业能学习和借鉴sc这套东西开发符合自己业务场景的微服务框架。并邀请我为新书做校对和修正工作。正巧,我也越来越喜欢钻研sc,也希望对自己碰到的一些问题向他指教,所以就答应了下来。这其中的过程真的一言难叙,总算最后我也不辱使命地完成了这本书的校对工作。
我可以很负责的说,本书是周立同学本人在工作和学习sc后总结出的精华,书中每段代码,每个字都是他自己写的,绝无任何抄袭之举。完全可以说是一个努力勤奋、能独立思考、认真做事的同学的良心之作。这样的“业界良心”在如今这个充满浮躁的社会中已不多见。希望有更多的读者能珍惜此书,感谢周立同学给我们的帮助。除此之外,我也希望读者能在阅读完此书后,可以自己写点代码,亲身去实践一把,感受sc的精妙之处。
最后,在草促完成本文之前,值此新春佳节之际,我也祝大家新年快乐,家庭安康,财源滚滚,爱情事业双丰收。
2017年1月25日
农历丙申年腊月二十八
吴峻申 青客机器人有限公司架构师
序2
===
2013年,我在EMC听了一个关于Docker与测试的分享,才第一次近距离认识Docker。在2014年底时,在项目上开始接触Docker。2015年上半年,我读了两本书:*The Phoenix Project*和*Migrating to Cloud-Native Application Architectures*。这两本书让我对DevOps、微服务和云原生架构有了初步的认识。
2015年9月,我以首席架构师的身份加入麻袋理财,当时第一件事情就是就借助DaoCloud在公司内部推行基于Docker的基础落地的方案。花了三个月,一个简易的方案就已经可以正常运作。但是在这个过程中,却发现和应用的契合度不是太高,需要对应用的架构做改造。
2016年年初,当时正好有一个项目要做2.0,之前是一个典型的单体应用(使用Spring MVC),这次准备做微服务改造,以满足业务对技术快速迭代、横向扩展的要求。我当时对Spring Boot和Spring Cloud已经有所耳闻,但是还停留于Demo的地步。正好借着这个机会,准备推广Spring Boot。之后有个全新的项目,我们完全按照微服务架构,使用Spring Boot和Cloud进行开发,并采用CI/CD自动化流程和容器化部署。
2016年10月份时,一次偶然的计划,Spring Cloud中国社区的许进找到了我,让我把团队在实践过程中的经验总结在社区做了分享,从而认识了本书的作者周立。当时周立正好在写一本书,他希望我能够帮他进行review,我就欣然答应了。
看到了书的标题《Spring Cloud与Docker微服务实战》,这不就是我一直在做的工作吗?于是我连夜把这本书读了一遍,感觉相见恨晚,如果一年前有这本书,那我就可以少走很多弯路了。
本书用一个例子贯穿始终,讲解了Spring Cloud的经典组件、微服务架构,以及与Docker的集成。书中提供了详细的代码,可以让读者在了解基础概念的同时,可以马上脚踏实地的撸起袖子写代码。
王天青 DaoCloud 首席架构师
2017年3月
序 3
====
最近几年,微服务的概念非常火爆,由于它确实能解决传统单体应用所带来的种种问题(比如代码可维护性低、部署不灵活、不够稳定、不易扩展,等等),所以大家对“如何成功实施微服务架构”越来越感兴趣。在Java技术栈中,SpringCloud独树一帜,提供了一整套微服务解决方案,它基于SpringBoot而构建,延续了Spring体系一贯的“简单可依赖”,但是由于微服务本身涉及到的技术或概念比较广,所以在正式“入坑”之前,最好能有一本实战性强的书籍作为参考。但是很遗憾,SpringCloud太新了,国内几乎没有一本完整讲解其用法的新书。
今年年初,我偶然得知周立兄在编写SpringCloud相关的书籍,感到非常惊喜,在和他交流的过程中,我能感觉到他对技术的把控力以及对知识分享的热情! 阅读这本书的过程是非常愉悦的,不仅仅是因为它结构之清晰,文风之流畅,更重要的是实战型极强,相信大家能在本书的指导下,顺利地基于SpringCloud&Docker打造出自己的微服务应用。
杜云飞 上海小虫数据技术合伙人,风控大数据负责人
序4
===
在Spring尚未出现的“蛮荒”时代,Java程序员们还在迷茫地创造着各种“语法糖”来试图提高生产效率。然而无论怎么努力,Java语言仍被许多人冠以“裹脚布”的名号——毕竟你一不小心就会把它写的又臭又长。
随着Spring体系的出现与逐步完善,似乎有一种经历着Java工业革命的感觉。的确,任何事物都各有利弊,但我仍然想说,Spring团队给Java程序员们带来了春天(就像它的名字一样),它神奇地把“裹脚布”变成了“丝绸”,因为它最大的特质可以用两个字来形容——优雅。相信你如果使用过Spring Framework、Spring MVC、Spring Data、Spring Boot或Spring Cloud等一系列框架,并研读过它们的源代码,就一定能够体会到“优雅”二字的含义。
尽管Spring家族拥有如此多而美好的大块“语法糖”,但它们过去在国内的传播似乎都不怎么顺利。我经常说,国内对新技术的广泛应用一般比国外要晚三到五年,无论后端、前端还是架构理念。这是许多因素导致的,比如信息闭塞、语言不通、甚至固步自封。我相信随着国内互联网人才越来越多,新技术应用的延时一定会越来越短。或许很多人为了旧系统的稳定而不愿升级,这可以理解,但我希望人们可以拥抱新的事物,而不是排斥。现如今微服务架构理念兴起,人们急需一个快捷、稳定、一站式的分布式微服务解决方案,Spring Cloud正是为此而诞生。可国内熟知Spring Cloud的人目前仍寥寥无几,大部分人从未听说过,想要学习的人不知从何开始,对官方的英文文档也一知半解。人们需要一本能把他们领进Spring Cloud这扇门的“红宝书”,这便是本书的目的,也是本书作者周立的初衷——希望能够为减少国内新技术的延时而出一份力。
我与周立在2016年相识,在短暂的交流后我们都产生了相见恨晚的感觉。遇见志同道合的人并不容易,我们的技术理念很相似。他有着对技术的热忱、灵活的头脑、以及开源分享技术的无私精神,正是这股精神促使他做了许多分享技术的事情,并且编写了这本书(相信我,写书并不赚钱)。我十分欣赏周立身上的这些特质,因此当他跟我提到想出书并找我帮忙时,我毫不犹豫地答应了他。我相信他未来一定能够成为某一技术领域的专家,这是他的目标,他也具备这样的潜质。
本书的切入点非常好,它并不纠结于冗长的源码解读或原理解释,而是更多地注重实战,这在如今互联网爆炸式发展的时代相当重要。现在人们更倾向于使用敏捷开发尽快做出产品来进行试错,并在后续版本中快速迭代。因此本书的实战经验在软件工程层面上会给予阅读者很大提升,它可以让你更快地搭建分布式微服务架构,然后把精力留在编写业务逻辑上,提高你的生产力,并最终做出更好的产品——这也是Spring团队一直希望达到的效果。
现在,让我们随本书进入Spring Cloud的世界,一起感受它的优雅吧!
张英磊 云账房CTO
2017年3月29日
前言
随着业务的发展,笔者当时所在公司的项目越来越臃肿。随着代码的堆砌,项目变得越来越复杂、开发效率越来越低、越来越难以维护,小伙伴们苦不堪言,毫无幸福感可言。
我们迫切需要能够解放生产力、放飞小伙伴的“良药”,于是,微服务进入视野。然而,微服务究竟是什么,众说纷纭,没有人能说清楚什么是微服务。不仅如此,大家对微服务的态度也是泾渭分明,吹捧者、贬低者比比皆是,在笔者的QQ群、微信群中硝烟四起。笔者参加了不少交流会,感觉许多分享常常停留在理论阶段。一场会下来,觉得似乎懂了,却苦于没有对应的技术栈去实现这些理论。
Docker、Jenkins等工具笔者均有涉猎,然而使用什么技术栈去实践微服务架构,在很长时间内都是笔者心中的疑问。
2015年中,笔者偶然在GitHub上看到一个名为Spring Cloud的框架,它基于Spring Boot,配置简单、设计优雅,并且大多组件经过了生产环境的考验。笔者花1个月左右的时间详细研究了Spring Cloud的相关组件后,体会更深。然而,技术选型必须要进行客观、多维度、全方位的分析,而不应由我个人的主观意见作为决定因素。**文档丰富程度、社区活跃度、技术栈生态、开发效率、运行效率、成功案例**等,都是我们选型的重要因素。经过调研,其他几点都很OK,只缺成功案例——在当时,国内几乎没什么成功案例,甚至连中文的博客、相关资料都没有。
这让笔者陷入两难,在这一过程中,公司一边继续使用阿里巴巴开源的Dubbo(Dubbo虽然在国内非常流行,但毕竟有段时间没有维护了,开源生态也不是很好),一边在笔者的组织下进行一些Spring Cloud相关的技术分享。一方面是希望借此开拓小伙伴们的视野,另一方面也希望能将两者相互印证,看能否在现有平台上借鉴Spring Cloud的设计或使用其部分组件。
2016年8月,笔者有幸代表公司参加了全球微服务架构高峰论坛。会上,Josh Long对Spring Cloud的讲解在现场引起了不小的轰动,也让笔者眼前一亮。会后笔者咨询Josh,Spring Cloud能否用于生产、是否大规模使用、国内是否已有成功案例,对方一一给出了肯定的回答。这一回答消除了笔者最后的一点疑虑,开始考虑从Dubbo逐步迁移至Spring Cloud的规划与方案。会后,笔者心想,不妨将Spring Cloud相关知识总结成一个“系列博客”,一来是加深自己的理解,二来也算是丰富Spring Cloud的中文资料。于是,笔者创建了自己的博客\<(http://www.itmuch.com\>),并开始了系列博客的编写。写了两篇后,笔者将博客链接分享到微信群中,没成想,恰好被Josh Long看到,并引用到Spring官方博客中去了。这让笔者感到无比荣幸的同时,也让自己贡献开源社区的欲望空前强烈,于是乎,一口气又写了两篇。
再后来,笔者成立了微服务/Spring Cloud/Docker相关的QQ群(157525002),在QQ群小伙伴的鼓励下,笔者决定写一本Spring Cloud开源书(,没想到竟然获得开源中国的推荐。再然后,笔者在许进的邀请下,联合创办了Spring Cloud中国社区。最后,在群管理员冯靖的引荐下,认识了网红级的大牛张开涛,开涛帮忙引荐了电子工业出版社编辑侠少。从此,笔者正式撰写实体书。
本以为,有了开源书的撰写经验,实体书应该是较为轻松的一件事。然而,样稿发出后,却被侠少鄙视……主要是语文是体育老师教的,病句满天飞,况且,理论不是我的专长。期间一度想要放弃,多亏了侠少的鼓励,总算坚持写了下去……
仓促完稿之际,感慨万千,激动与感激交织,于是,本段不可免俗,进入老生常谈的“鸣谢”环节——感谢我的家人,写书是个费时费力的活儿,在近半年的时间,我的父母和妻子给予了我极大的支持;感谢电子工业出版社小伙伴们的辛苦工作,没有刘佳禾、孙奇俏、侠少等可爱的朋友们,我的书不可能面世;衷心感谢丁露、冯靖、张英磊、王天青、吴峻申(N本书的作者)在百忙之中帮忙校对;衷心感谢QQ群、微信群的朋友们,你们给了笔者最大的帮助和支持!注:排名不分先后。
特别鸣谢:感谢吴峻申给笔者提出很多中肯实用的建议和意见;感谢张英磊帮忙重绘、美化书中绝大部分架构图。
谨以此书献给想要学习微服务、Spring Cloud、Docker又不知从何开始的读者朋友们。**希望本书能切切实实地帮助你使用特定技术栈实现微服务架构的落地**,也希望本书不会令你失望。本书很多理论性的内容并未展开,例如Cloud Native、12-factor App、DDD等,但笔者都在文中以TIPS、拓展阅读或WARNING的形式进行了标记,这部分内容希望读者能够自行拓展阅读。
周立
// getters and stters
应为
// getters and setters