软件的进化意味着系统变得越来越大,越来越复杂,使得一些处理它们的传统技术变得无效。近年来,微服务架构作为一种处理复杂 web 服务并允许更多人在同一系统上工作而不相互干扰的有效技术,越来越受到关注。简而言之,它创建了小的 web 服务,每个服务解决一个特定的问题,并且它们都通过定义良好的 API 协调在一起。
在本书中,我们将详细解释微服务架构以及如何成功运行它,使您能够从技术层面理解该架构,并理解该架构对团队及其工作负载的影响。
在技术方面,我们将使用量身定制的工具,包括以下工具:
- Python ,实现 RESTful web 服务
- Git 源代码控制,用于跟踪实现中的更改,以及 GitHub ,用于共享这些更改
- Docker 容器,用于标准化每个微服务的操作
- Kubernetes ,协调多个服务的执行
- 云服务,如 Travis CI 或 AWS,利用现有的商业解决方案解决问题
我们还将介绍在面向微服务的环境中有效工作的实践和技术,其中最突出的是:
- 持续集成,确保服务质量高,随时可以部署
- GitOps ,用于处理基础设施的变更
- 可观察性练习,以正确理解在一个实时系统中正在发生的事情
- 旨在提高团队合作的实践和技术,包括单个团队内部和跨多个团队
这本书围绕一个单一的示例场景展开,该场景涉及一个需要转移到微服务架构的传统整体。这个例子在第 1 章、中有所描述——设计、计划、执行,然后在本书的其余部分继续。
这本书是面向开发人员或软件架构师的,他们从事复杂系统的工作,并且希望能够扩展他们系统的开发。
它也是针对开发人员的,他们通常处理已经发展到难以添加新功能和难以扩展开发的程度的单块。这本书概述了从传统的单一系统到微服务架构的迁移,提供了涵盖所有不同阶段的路线图。
第 1 节、*微服务介绍、*介绍了微服务架构以及本书其余部分将使用的概念。它还介绍了一个贯穿全书的示例场景。
第 1 章、行动起来——设计、规划、执行,探讨了整体方法和微服务之间的区别,以及如何设计和规划从前者到后者的迁移。
第 2 节、设计和运行单一服务–创建 Docker 容器,着眼于构建和运行微服务,涵盖其整个生命周期,从设计和编码到遵循良好实践,以确保其始终保持高质量。
第 2 章、用 Python 创建 REST 服务涵盖了单个 web RESTful 微服务的实现,使用 Python 和高质量的模块来提高开发速度和质量。
第 3 章、使用 Docker 构建、运行和测试您的服务,向您展示了如何使用 Docker 封装微服务来创建标准的、不可变的容器。
第 4 章、创建管道和工作流,教你如何自动运行测试和其他操作,以确保容器始终是高质量的并随时可用。
第 3 节、使用多个服务:通过 Kubernetes 操作系统,进入下一阶段,即协调每个单独的微服务,使它们作为一个整体在一致的 Kubernetes 集群中工作。
第 5 章、使用 Kubernetes 来协调微服务,介绍了 Kubernetes 的概念和对象,包括如何安装本地集群。
第 6 章、Kubernetes 的本地开发让您在本地 Kubernetes 集群中部署和运行您的微服务。
第 7 章、配置和保护生产系统,深入研究了部署在 AWS 云中的生产 Kubernetes 集群的设置和操作。
第 8 章、使用 GitOps 原则,详细描述了如何使用 Git 源码控制 Kubernetes 基础设施定义。
第 9 章、管理工作流,解释了如何在微服务中实现一个新特性,从设计和实现到部署到一个对世界开放的现有 Kubernetes 集群系统。
第 4 节*生产就绪系统:使其在现实环境中工作,*讲述了成功运行现实集群的技术和工具。
第 10 章、监控日志和指标,是关于监控实时集群的行为,以主动检测问题和改进。
第 11 章、处理系统中的变更、依赖和机密,涉及如何有效地处理集群中多个微服务共享的配置,包括机密值和依赖的正确管理。
第 12 章、跨团队协作与沟通,重点讲述独立团队之间团队协作的挑战以及如何提升协作。
这本书使用 Python 作为代码,并假设读者阅读这种编程语言是舒适的,尽管不需要专家水平。
Git 和 GitHub 贯穿全书,用于源代码控制和跟踪变更。假设读者对使用它们感到舒适。
熟悉网络服务和 RESTful APIs 有助于理解所呈现的不同概念。
你可以从你在www.packt.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问www.packtpub.com/support并注册将文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
- 登录或注册www.packt.com。
- 选择“支持”选项卡。
- 点击代码下载。
- 在搜索框中输入图书的名称,并按照屏幕指示进行操作。
下载文件后,请确保使用最新版本的解压缩文件夹:
- 视窗系统的 WinRAR/7-Zip
- zipeg/izp/un ARX for MAC
- 适用于 Linux 的 7-Zip/PeaZip
这本书的代码包也托管在 GitHub 上,网址为 https://GitHub . com/PacktPublishing/hand-Docker-for-micro-service-with-Python。如果代码有更新,它将在现有的 GitHub 存储库中更新。
我们还有来自丰富的图书和视频目录的其他代码包,可在**【https://github.com/PacktPublishing/】**获得。看看他们!
我们还提供了一个 PDF 文件,其中包含本书中使用的截图/图表的彩色映像。可以在这里下载:https://static . packt-cdn . com/downloads/9781838823818 _ color images . pdf。
你可以在http://bit.ly/34dP0Fm查看本书动作视频中的代码。
本书通篇使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和推特句柄。这里有一个例子:“这将生成两个文件:key.pem
和key.pub
,带有一个私有/公共对。”
代码块设置如下:
class ThoughtModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50))
text = db.Column(db.String(250))
timestamp = db.Column(db.DateTime, server_default=func.now())
当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:
# Create a new thought
new_thought = ThoughtModel(username=username, text=text, timestamp=datetime.utcnow())
db.session.add(new_thought)
任何命令行输入或输出都编写如下:
$ openssl rsa -in key.pem -outform PEM -pubout -out key.pub
粗体:表示一个新的术语、一个重要的单词或者你在屏幕上看到的单词。例如,菜单或对话框中的单词像这样出现在文本中。下面是一个示例:“从管理面板中选择系统信息。”
Warnings or important notes appear like this. Tips and tricks appear like this.
我们随时欢迎读者的反馈。
一般反馈:如果你对这本书的任何方面有疑问,在你的信息主题中提到书名,发邮件给我们customercare@packtpub.com
。
勘误表:虽然我们已经尽了最大的努力来保证内容的准确性,但是错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata,选择您的图书,点击勘误表提交链接,并输入详细信息。
盗版:如果您在互联网上遇到任何形式的我们作品的非法拷贝,如果您能提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com
联系我们,并提供材料链接。
如果你有兴趣成为一名作者:如果有一个你有专长的话题,你有兴趣写或者投稿一本书,请访问authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在的读者可以看到并使用您不带偏见的意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们的书的反馈。谢谢大家!
更多关于 Packt 的信息,请访问packt.com。