关于本书
谁应该读这本书
拥抱“云”,更多指的是如何设计你的应用程序,而不是你在哪里部署它们。本书是一本指导如何开发出健壮的应用程序的指南,这些应用程序可以在动态的、分布式的、虚拟的云世界中茁壮成长。本书介绍了云原生应用程序的思维模型,以及支持其构建的模式、实践和工具。在这本书中,你会发现一些实际案例和专家建议,它们可以帮助你开发和使用应用程序、数据、服务、路由等。
从根本上说,这是一本架构方面的书,其中包含了支持架构设计的相关代码示例。你会发现,我经常会在书中提到当前模式与我们过去做事方式之间的差异。不过,你并不需要拥有以往架构模式的经验或者知识。因为我不仅讨论了模式本身,而且还讨论了它们的动机,以及应用它们时上下文环境之间的细微差别,所以不管你在软件行业工作了多少年,都应该能够从本书中发现重要的价值。
尽管书中出现了许多示例代码,但这不是一本编程书,它不会教你如何编程。示例代码是用Java编写的,但是如果你有任何其他编程语言的使用经验,都应该能够轻松理解它们。对客户端/服务器交互(尤其是通过HTTP通信)有基本的了解,会很有帮助,但这不是必需的。
本书是如何组织的:路线图
本书一共12章,分为两部分。
第1部分定义了云原生的上下文环境,并展示了软件部署环境的如下特点。
■ 第1章定义了什么是云原生,并将其与云计算区分开来。本章提供了一个思维模型,并且在此基础上构建出后面的多种模式,这种思维模型的实体是应用/服务、服务之间的交互,以及数据。
■ 第2章介绍了云原生的运维—这些模式和实践用来保证生产环境中的云原生软件,当遇到不可避免的故障时如何继续运行。
■ 第3章介绍了云原生平台,这是一个开发和运行时环境,能够支持甚至实现本书第2部分中的许多模式。尽管对你来说理解所有这些模式很重要,但是你不必自己实现所有的模式。
第2部分深入探讨了云原生模式。
■ 第4章与云原生的交互有关,还涉及了一些数据,介绍了基于事件驱动的通信模式,来代替熟悉的请求/响应的通信模式。尽管后者在当今的大多数软件中几乎无处不在,但是事件驱动常常能够为高度分布式的云原生软件提供巨大的优势,当你学习后续其他模式时,要同时考虑这两种通信模式。
■ 第5章和云原生应用/服务及其与数据的关系有关,介绍了如何为应用程序部署(通常是大规模的)冗余实例,为什么及如何使它们成为无状态的,以及如何将它们与指定的有状态服务进行关联。
■ 第6章与云原生应用/服务有关,介绍了在一个大规模分布式基础设施中部署大量实例时,如何统一维护应用程序的配置。这一章还介绍了当应用程序的环境不断发生变化时,如何正确地应用配置。
■ 第7章与云原生应用/服务有关,介绍了应用程序的生命周期和大量的零停机时间升级实践,包括滚动升级和蓝/绿升级。
■ 第8章与云原生交互有关,它既关注应用程序如何找到它们需要的服务(服务发现),即使这些服务在不断发生变化,也关注请求最终如何找到正确的服务(动态路由)。
■ 第9章与云原生交互有关,主要关注交互的客户端。在解释了为什么需要交互冗余,并且介绍了重试(请求失败后重新发送请求)之后,这一章还介绍了可能会导致应用程序重试的一些问题,以及如何避免这些问题的方法。
■ 第10章与云原生交互有关,主要关注交互的服务端。即使发起交互的客户端是可靠的,服务也必须保护自己不被误用和滥用。这一章介绍的内容包括断路器和API网关。
■ 第11章与应用程序和交互有关,介绍了如何观察软件中各个分布式系统的行为和性能。
■ 第12章与数据有关,它对组成云原生软件的服务之间的交互有重要的影响。这一章介绍了几种将单体数据库分解为分布式数据结构的模式,并最终回到了本书第2部分开始介绍的事件驱动模式。
关于代码
本书包含许多带有源代码的例子,包括清单和正常文本行中的代码。在这两种情况下,源代码都使用等宽字体,以便与其他普通文本区分开。有些代码为了引起你的注意,还使用粗体字体进行突出显示。
在许多情况下,原来的源代码已经被重新格式化;我们添加了换行符,调整了缩进,以适应本书的页面空间。在极少数情况下,即使这样操作在一行中还不能显示完整代码时,我们就在代码清单中使用了续行标记。此外,当在普通文本中展示代码时,通常会将源代码中的注释删掉。代码清单中保留的注释是为了突出重要的概念。
本书中的示例代码可从Manning出版社网站下载,网址参见链接1[1],也可从GitHub下载,网址参见链接2。
其他在线资源
你可以通过Twitter(@cdavisafc)、Medium[2]或者Cornelia的博客[3]联系到本书作者。
读者服务
微信扫码回复:38913
■ 获取博文视点学院20元付费内容抵扣券
■ 获取本书代码和参考资料中的配套链接
■ 获取更多技术专家分享的视频与学习资源
■ 加入读者交流群,与更多读者互动
[1] 请访问http://www.broadview.com.cn/38913下载本书提供的附加参考资料,如正文中提及参见“链接1”“链接2”等时,可在下载的“参考资料.pdf”文件中查询。
[2] 网址参见链接5。
[3] 博客网址参见链接6。