适读人群 :对建立大规模的云应用有需求的技术人员、Go语言开发人员
适读人群 :云计算从业人员、Go语言开发人员。
1.云原生是云计算时代的发展趋势和必然结果
《Cloud Native Go:构建基于Go和React的云原生Web应用与微服务》通过一个云原生应用项目的构建,为大家介绍了云原生的道与术,引导读者了解云原生理念的产生、应用场景、优势。
2.集现今诸多热点技术之大成
《Cloud Native Go:构建基于Go和React的云原生Web应用与微服务》在构建云原生项目时,涉及Docker、持续集成、微服务、DevOps、事件溯源与CQRS等众多备受关注的技术热点,无疑会让读者受益匪浅。
3.Go语言助理云开发完美实现
Go语言以其简单优雅、快速安全、支持高并发等特性,成为云计算时代的zui优语言。《Cloud Native Go:构建基于Go和React的云原生Web应用与微服务》将带领读者正确认识Go语言,掌握用Go构建应用程序的方法。
4.流程完整,示例具体详细
《Cloud Native Go:构建基于Go和React的云原生Web应用与微服务》从搭建平台开始,逐步带领读者开发一个完整的云上项目。其中的每一环节都有详细讲解。示例具有代表性,代码详细,帮助读者轻松掌握云原生开发的关键。
当Dan和我开始写这本书时,我们不希望它成为一本参考书或“一本语法书”。相反,我们希望能够充分利用自己为Pivotal客户构建云原生解决方案的经验,以及近一生的综合经验来为各种规模、形态和行业的公司构建软件。
这本书从一个哲学章节“云之道”开始,因为我们坚信构建良好软件的秘诀在于开发人员的心态和纪律,而不是工具或语言。
在本书中,我们将按照测试驱动和高度自动化的方式逐步实现云之道,通过一系列章节提高大家在Go中构建云原生服务的能力。本书涵盖构建服务的基本原理,中间件技术,Git、Docker和Wercker等工具的使用,还包括云基础设施的相关内容,如基于环境的配置、服务发现以及基于响应和推送式的应用程序。本书涵盖了事件溯源和CQRS等模式,书中的所有内容组合成最终的示例,相信可以为大家的项目构建提供灵感。
我们始终秉承着一个坚定的信念——构建软件应该像使用它一样有趣(或更有趣)。如果没有乐趣,那么一定是你做错了。我们希望在使用Go构建服务时获得的快乐可以感染读者,希望你在阅读本书时能像我们在写作它时一样,获得更多的乐趣。
关于作者
KevinHoffman通过现代化和以多种不同语言构建云原生服务的方式帮助企业将其应用程序引入云端。他10岁时开始编程,在重新组装的CommodoreVIC-20上自习BASIC。从那时起,他已经沉迷于构建软件,并花了很多时间学习语言、框架和模式。他已经构建了从遥控摄影无人机、仿生性安全系统、超低延迟金融应用程序到移动应用程序等一系列软件。他在构建需要与PivotalCloudFoundry配合使用的自定义组件时爱上了Go语言。
Kevin是流行的系列幻想书TheSigilordChronicles(http://amzn.to/2fc8iES)的作者,他热切地期盼着最终能够将自己对构建软件的热爱与对构建幻想世界的热爱结合起来。
DanNemeth目前在Pivotal担任咨询解决方案架构师,负责支持PivotalCloudFoundry。他从Commodore64开始就一直在开发软件,从1995年开始从事专业编码,使用ANSIC编写了用于本地ISP的CGI脚本。从那时起,他职业生涯的大部分时间都是作为独立顾问为金融、制药等各个行业提供解决方案,其间不断使用当时流行的各种语言和框架。Dan最近接受了Go作为自己的“归宿”,其间不断热情地将它用于所有的项目。
如果你发现Dan没在电脑前,他很可能就是在靠近安纳波利斯的水域玩帆船或飞钓。
致谢
这本书能够诞生要感谢我的家人,特别是我的妻子,她给予了我无限的耐心。尽管我在过去曾多次说过,我不会再写技术书,但事实上目前我正在写另一本技术书。她们忍受了漫长的夜晚,忍受我在家里的地板上迁思回虑,以及为了保证这本书的质量带来的巨大时间消耗。完成这本书比过去完成任何其他工作都让我感到更加自豪,这本书是家人、朋友和杰出的合著者给我的宝贵支持的结晶。
——KevinHoffman
这本书献给A-Team:四个在Pivotal工作的人。他们现在正在寻找需要指导的开发人员。如果你需要将软件迁移到云上,他们一定会找到你。
没有这些勇敢的人,编写软件的过程将变得非常无聊和难以忍受,也许永远不会有这本书。事实上,作者们可能已经放弃了他们一直以来所致力的云服务,而是希望余生能在咖啡店当一名咖啡师。
A-Team成员有:
Dan“Hannibal”Nemeth
Chris“Murdock”Umbel
Tom“Face”Collings
Kevin“B.A.”Hoffman
Kevin Hoffman通过现代化和以多种不同语言构建云原生服务的方式帮助企业将其应用程序引入云端。他10岁时开始编程,从那时起便已经沉迷于构建软件,并花了很多时间学习语言、框架和模式。他已经构建了从遥控摄影无人机、仿生性安全系统、超低延迟金融应用程序到移动应用程序等一系列软件,并且在构建需要与Pivotal Cloud Foundry配合使用的自定义组件时爱上了Go语言。
Dan Nemeth目前在Pivotal担任咨询解决方案架构师,负责支持Pivotal Cloud Foundry。他从1995年开始从事专业编码,使用ANSI C编写了用于本地ISP的CGI脚本。他职业生涯的大部分时间都是作为独立顾问为金融、制药等各个行业提供解决方案,其间不断使用当时流行的各种语言和框架。Dan最近接受了Go作为自己的“归宿”,其间不断热情地将它用于所有的项目。
译者简介
宋净超,TalkingData技术运营团队工程师。拥有多年的Hadoop大数据平台运维管理经验,熟悉Hadoop技术、Docker生态系统以及PaaS平台,主导了 TalkingData的Yarn on Docker项目改造和微服务落地,关注开源软件及Docker、Kubernetes的前沿发展,关注Kubernetes和TensorFlow的实践。多次在全球架构师峰会、QCon 、CNUTCon、云栖大会等技术会议上作为讲师进行技术分享,博客地址:http://rootsongjc.github.io/。
推荐序1
作为一个在IT行业摸爬滚打20余年的老程序员,我一直认为程序员的工作不仅仅是进行代码编写。很多情况下,程序员的工作和作家类似,都是在进行创作。很多非常出色的程序员同时也是出色的作家,比如程序员王小波除了是一个C语言和汇编语言高手,同时还创作了《时代三部曲》,进而成为知名的作家。当然,大部分程序员没有王小波那份驾驭文字的功力,没办法跨界写小说。不过,总结日常的一些技术点滴使其成为文章或者翻译国外的博客、技术书籍,这些对于大部分程序员来讲还是不难做到的,因此这也成为我们团队所有程序员的OKR。
最近几个月的周六,我经常看到宋净超同学静坐在自己的工位上,或若有所思,或埋头打字,屏幕上闪烁的不是编程的IDE,倒像是码字的word文档。经过几个月的辛苦努力,终于,由宋净超、吴迎松、徐蓓、马超几位技术运营团队的同学翻译的这本《CloudNativeGo:构建基于Go和React的云原生Web应用与微服务》摆在了我的面前。
CloudNative的概念来自Pivotal的MattStine,是面向现代DevOps、微服务、持续集成等技术的一种思想,其本身并不是某一种具体的技术。顾名思义,这本书就是将这种思想利用Go语言进行实践和落地。结合我们技术运营团队过去两年的工作,我深刻地理解他们为什么要翻译这本书,因为这本书中的很多思想正是我们技术运营团队在过去两年中一直践行的。对于在实践的路上苦苦前行的程序员来讲,看到一本与自己的技术理念非常一致的书,内心的激动可想而知,我相信这也是他们要加班加点将这本书翻译出来并介绍给国内广大同行的重要原因。
从一个经常阅读技术书籍的读者角度来看,本书是一本很贴近实战的技术书籍。对于没有Go语言开发经验的读者来讲,这本书介绍了Go语言的基础知识,并且指导读者去实践,从而为掌握书中的其他内容打下基础。不过,这毕竟不是一本Go语言专著,如果想了解更多Go语言的特性和高级用法,还需要查阅专门讲解Go语言的书籍或访问Go语言技术社区。既然这本书是面向CloudNative的,那么关于CloudNative的概念无疑才是本书的核心内容。在这本书中,大家除了可以了解到持续交付、测试优先、微服务、服务治理、数据服务、CQRS、云安全等概念,同时还可以通过书中的示例一步步地实践,最终完成一个真实的WorldofFluxCraft项目。一本优秀的技术书籍应该能够在理念上给人以启迪,让人产生思考和共鸣,同时又能够真正落到实地,让技术人员可以亲自去探索和验证,而这本书无疑是优秀书籍的代表。
工作多年,我阅读过很多由国内技术人员翻译的计算机方面的书籍,体验不尽相同。很多技术书籍的翻译水准欠佳,且不说能否达到信、达、雅的境界,能够满足没有常识性错误和语句通顺这两个基本要求就已经很难得了,因此,有的时候我宁愿去读英文原版。刚刚拿到这本书的翻译稿时,老实讲,我十分担心翻译质量,在这个AI逐渐取代人类工作的时代,如果翻译质量不高,不如使用谷歌翻译更为合适。然而通篇读下来,整本书的翻译质量出乎我的意料!虽然是翻译稿,但是整本书的语言风格非常本土化,并且能看出译者的文字功底非常深厚。无数个周末的无休,只是为了能够给大家带来一部高质量的技术书籍,也不枉原作者辛苦创作,我觉得技术运营团队的同学们的这种态度非常难得!
由于负责TalkingData的主要线上业务和数据业务的技术研发工作,因此我每天都会面临着如何能够使线上系统在并发压力和数据规模持续增加的情况下还能保证稳定和快速迭代的挑战。为了应对这些挑战,我们在几年前就开始尝试将DevOps的理念引入团队中,开发并开源监控报警系统OWL,这让我们能够全天候、多通道地支持系统报警。同时我们也将微服务化、灰度上线、端到端自动测试等应用于日常工作中。
这本书中的很多理念给了我深刻启发,也让我坚信我们正走在一条正确的路上。相信国内和我们面临同样挑战的团队还有很多,这本书无疑可以给面临类似问题的团队带来很大的帮助。同时,我也衷心希望我们的技术团队未来能够将自己的经验和教训积累下来,出版我们自己的原创技术书籍。
阎志涛
TalkingData副总裁
2016年6月
推荐序2
很多年以前,我便听说过Go语言的大名,因为它的创始人中有大名鼎鼎的KenThompson以及RobPike。年轻一代的程序员或许不了解这两位“爷爷”辈的程序员,但在我学习计算机的年代,这两位大师非常受人崇敬,他们参与开发的Unix、Plan9、UTF-8等也都是可以载入史册的伟大产品。尤其是Thompson,他早在1983年就因对Unix以及C语言做出卓越贡献而获得了图灵奖。不过当我第一次听到Go这个新的程序语言时,多少还是有些怀疑,Go究竟能不能被程序员所接受呢?毕竟现在的开发者可以选择的语言工具已经极其丰富,无论在哪一种场景下,都已经存在太多的选择。
几年过去了,随着Docker的大热,我才突然意识到其背后的开发语言竟然就是这个新生不久的Go。随之而来的是,越来越多的企业和产品开发项目开始采用Go。这个名单很长,其中包括Kubernetes、OpenShift、CoreOS、MongoDB、Twitch以及Uber等。尤其让我感到惊讶的是,以全面采用Python语言著称的Dropbox居然也将核心的组件从Python迁移到了Go上面,原因在于程序语言的性能不同。受到这个事件的影响,我开始将Go语言加入到我的学习清单里面。
众所周知,云计算已经成为了这个时代中IT技术发展最重要的方向,同时因为我所任职的企业AWS在云计算领域拥有巨大的影响力,于是我就会特别留心一切与云计算开发相关的话题。自从2015年AWS发布了针对Go语言的SDK,越来越多的开发者开始了Go语言的云计算开发之旅。我相信许多开发者在学习的过程中需要的不仅仅是一门讲解程序语言语法的教程,他们更希望的是拥有一本针对云计算的Go实践开发手册。《CloudNativeGo:构建基于Go和React的云原生Web应用与微服务》应该就是这样的一本书,书中的一切内容都围绕着云计算的实践来展开,当中每一段代码示例都可以被应用到实践中。
写一本书是很辛苦的,而高质量的翻译无疑是使这样一本书能够被广泛接受的关键所在。感谢作者和译者们为此而付出的辛苦努力,也希望所有开发者能够在云计算的时代因此而受益。
古人云:理无专在,而学无止境也。是以为记。
费良宏
AWS首席布道师
2017年6月
译者序
Go语言起源于Google,集中进入大家视线是由于一款革命性的产品——Docker的发布。从Go开始流行,直到其位列TIOBE榜单的前20名,我们都一直关注着这门语言的发展。近两年来,一批批优秀的基于Go语言的开源软件涌现出来,例如etcd、Kubernetes、Prometheus等,这些开源软件被广泛应用于我们的生产环境中。
因为Go语言非常简洁且功能强大,加之其能够充分利用系统的多个核心组件,实现高性能的网络服务,因此我们于2014年将Go语言引入了我们的公司TalkingData,并使用它构建了自己的开源监控系统——OWL(https://github.com/TalkingData/owl),也基于它实现了对Hadoop集群虚拟化的探索magpie(https://github.com/rootosngjc/magpie)。
刚开始接触到本书时,我们看到书中提到的那些熟悉的技术和理念后感到非常兴奋,通过这本书,我们可以有机会用一种体系化、结构化的方式与大家交流书中的知识和技术。因此我们决定翻译这本书,并且牺牲了许多工作之余的时间来研究书中的内容和细节,除了出于对技术分享始终保有热情,更是因为想要让各位读者早日看到这本关于Go语言和云原生技术的好书。
CloudNativeGo是一本很好的云原生应用实践手册,全书基于微服务理念编写,书中有丰富的示例和代码,这些代码托管在GitHub上,读者可以很轻松地获取到。另外,书中还介绍了很多不错的工具的最佳实践,这些工具都是免费的,不需要绑定信用卡,大家可以放心使用。而且,原作者风趣幽默的行文非常有吸引力,不会让大家阅读时感到乏味。
这本书涉及的内容非常广泛,读完本书,读者会对云原生应用的构建规则、微服务划分、测试驱动开发、CQRS和事件溯源、持续发布流程、安全、故障排查等整个软件开发生命周期中的重要环节有一个较好的了解,也会对前端开发、前端框架、UI设计有一定的认识,从而在实际的程序开发过程中更加得心应手。
当然,这本书不是一本专门讲解Go语言的书籍,它适用于有一定Go语言基础的读者。阅读关于创建Web应用的部分时,还需要读者对Web应用开发流程有所了解,这对于长期从事后端开发的读者来说可能会比较困难。
除我以外,还有三位TalkingData的同事徐蓓、马超、吴迎松参与了本书的翻译。其中,徐蓓翻译了1~5章,马超翻译了6~8章,吴迎松翻译了9~12章,其余的章节由我翻译,同时我也承担了全书译文的审校工作。
本书能够顺利出版并及时与读者见面,要感谢很多人的帮助。感谢公司的大力支持;感谢电子工业出版社的编辑孙奇俏对本书的大力协助和专业指导;感谢在本书的翻译过程中所有通过朋友圈和https://rootsongjc.github.io/cloud-native-go/网站关注和支持我们的朋友们;最后再次感谢所有译者。希望每一位读者都能从本书中获得想要的知识,希望你们喜欢这本书,衷心感谢大家!
宋净超
2017年6月
……