本书旨在向开发人员展示如何构建适用于大流量、高并发场景下的云原生Web应用。本书从搭建开发测试环境开始,逐步介绍使用Go语言构建微服务的方法,通过引入CI/CD流程和Wercker、Docker等工具将应用推送到云中。结合微服务构建中的后端服务、数据服务、事件溯源和CQRS模式、基于React和Flux的UI设计等,本书最后构建了一个基于Web的RPG游戏World of FluxCraft,可以作为使用Go构建云原生Web应用的参考,适合于云计算与Go语言编程从业者们阅读。
云原生持续领航云计算时代:
敏捷、可靠、高弹性、故障隔离,轻松应对强需求架构场景,动态扩展大规模用户流量。完美给出传统应用升级缓慢、架构臃肿、迭代迟缓等问题的终极解决方案!
译者序
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语言和云原生技术的好书。
Cloud Native Go是一本很好的云原生应用实践手册,全书基于微服务理念编写,书中有丰富的示例和代码,这些代码托管在GitHub上,读者可以很轻松地获取到。另外,书中还介绍了很多不错的工具的最佳实践,这些工具都是免费的,不需要绑定信用卡,大家可以放心使用。而且,原作者风趣幽默的行文非常有吸引力,不会让大家阅读时感到乏味。
这本书涉及的内容非常广泛,读完本书,读者会对云原生应用的构建规则、微服务划分、测试驱动开发、CQRS和事件溯源、持续发布流程、安全、故障排查等整个软件开发生命周期中的重要环节有一个较好的了解,也会对前端开发、前端框架、UI设计有一定的认识,从而在实际的程序开发过程中更加得心应手。
当然,这本书不是一本专门讲解Go语言的书籍,它适用于有一定Go语言基础的读者。阅读关于创建Web应用的部分时,还需要读者对Web应用开发流程有所了解,这对于长期从事后端开发的读者来说可能会比较困难。
除我以外,还有三位TalkingData的同事徐蓓、马超、吴迎松参与了本书的翻译。其中,徐蓓翻译了1~5章,马超翻译了6~8章,吴迎松翻译了9~12章,其余的章节由我翻译,同时我也承担了全书译文的审校工作。
本书能够顺利出版并及时与读者见面,要感谢很多人的帮助。感谢公司的大力支持;感谢电子工业出版社的编辑孙奇俏对本书的大力协助和专业指导;感谢在本书的翻译过程中所有通过朋友圈和https://rootsongjc.github.io/cloud-native-go/网站关注和支持我们的朋友们;最后再次感谢所有译者。希望每一位读者都能从本书中获得想要的知识,希望你们喜欢这本书,衷心感谢大家!
前言
当Dan和我开始写这本书时,我们不希望它成为一本参考书或“一本语法书”。相反,我们希望能够充分利用自己为Pivotal客户构建云原生解决方案的经验,以及近一生的综合经验来为各种规模、形态和行业的公司构建软件。
这本书从一个哲学章节“云之道”开始,因为我们坚信构建良好软件的秘诀在于开发人员的心态和纪律,而不是工具或语言。
在本书中,我们将按照测试驱动和高度自动化的方式逐步实现云之道,通过一系列章节提高大家在Go中构建云原生服务的能力。本书涵盖构建服务的基本原理,中间件技术,Git、Docker和Wercker等工具的使用,还包括云基础设施的相关内容,如基于环境的配置、服务发现以及基于响应和推送式的应用程序。本书涵盖了事件溯源和CQRS等模式,书中的所有内容组合成最终的示例,相信可以为大家的项目构建提供灵感。
我们始终秉承着一个坚定的信念——构建软件应该像使用它一样有趣(或更有趣)。如果没有乐趣,那么一定是你做错了。我们希望在使用Go构建服务时获得的快乐可以感染读者,希望你在阅读本书时能像我们在写作它时一样,获得更多的乐趣。
第6行代最后的}
改为
,