序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的码云网站上开源分享了出去(具体网址见<http://git.oschina.net/darkranger/spring-cloud-books>)。而无巧不巧,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日