软件的发展意味着随着时间的推移系统会变得越来越复杂,需要越来越多的开发人员协同工作。随着软件系统规模的增长,一个总体的架构也随之产生。如果没有对系统架构进行很好的规划,软件系统将会变得非常混乱且难以维护。
软件架构所要解决的问题就是规划和设计软件系统的架构。一个设计良好的架构可以让不同的团队相互交流,同时对各自的责任和目标有清晰的认识。
系统的架构应当被设计成可以在最小的阻碍下进行日常软件开发,而且允许增加功能,以及对系统进行扩展。一个处于运行状态的系统,其架构总是在变化,还可以对其进行功能调整和扩充,从而以一种审慎而平滑的方式重塑不同的软件单元。
在本书中,我们将学习软件架构系统的各方面内容,从顶层设计到用于支持高层功能的低层细节。本书内容分为四个部分,涵盖软件开发生命周期中的各个阶段:
❍编写代码之前首先进行设计;
❍采用经验证的架构模式;
❍用代码实现设计;
❍持续运维以适应变化,并确保系统按预期状态运行。
本书内容将包含上述所有相关内容的不同技术实现。
本书是为那些想要扩充其软件架构知识的开发人员准备的,无论是经验丰富的开发人员,还是想提高自身能力的软件开发新手,都可以通过学习本书内容,用更宽广的视野来应对更大规模的软件系统开发。
本书使用Python编写的代码作为示例。虽然不要求读者是Python开发专家,但需要具备一定的Python基础知识。
第1章介绍什么是软件架构以及为什么它很有用,同时还提供一个设计示例。
第一部分涵盖编写软件代码之前的设计阶段的相关内容:
第2章展示设计可用API的基础知识,这些API可以方便地抽象出各种操作。
第3章讲述存储系统的特殊性以及如何为应用程序设计合适的数据表示。
第4章讨论处理存储数据的代码,以及如何使其满足需求。
第二部分包含各种不同的架构模式,这些模式重用了已被验证的软件架构:
第5章展示“十二要素App”方法论在有效处理Web服务时的良好实践,并将其应用于不同场景。
第6章阐述Web服务器以及在实施和软件设计过程中需要考虑的相关要素。
第7章描述另一种类型的异步系统,它接收信息时不立即返回响应。
第8章阐述更多异步系统的高级用法,以及一些不同的可创建的模式。
第9章介绍两种针对复杂系统的架构,并阐述它们之间的区别。
第三部分是本书的代码实现部分,介绍如何编写代码:
第10章阐述测试的基本原理以及如何在编码过程中使用TDD(Test Driven Development,测试驱动开发)。
第11章讨论创建可重复使用的代码的过程,以及如何对其进行分发。
第四部分是关于持续运维的内容,即系统正在运行,并且需要在调整和修改的同时对其进行监控:
第12章阐述如何记录运行中的系统正在做什么。
第13章讨论如何多方汇集数据以查看整个系统的状况。
第14章阐述如何了解代码的执行情况以提高其性能。
第15章涵盖深入挖掘代码执行的过程以发现并修复其中的错误。
第16章描述如何在运行的系统中有效地进行架构调整。
❍本书的示例代码使用Python语言,并假定读者能够自如地阅读,但不需要专家级别的水平。
❍如果之前接触过包含多种服务的复杂系统,将有利于理解软件架构所带来的各种挑战。这对于有几年或更多经验的开发人员来说应该很简单。
❍熟悉Web服务和REST接口有助于更好地理解某些原理。
本书的代码包托管在GitHub上,地址是https://github.com/PacktPublishing/Python-Architecture-Patterns。
我们还提供了一个PDF文件,其中包含本书所用到的屏幕截图、图表的彩色图片文件。可以从https://static.packt-cdn.com/downloads/9781801819992_ColorImages.pdf下载。
本书中使用了以下排版约定。
CodeInText(代码体):表示文本中的程序代码、对象名、模块名、文件夹名、文件名、文件扩展名、路径名、虚拟URL和用户输入等。下面是一个例子:“对于这个方法,我们需要导入requests(请求)模块”。
示例代码块如下:
请注意,为简洁起见,书中列出的代码可能被编辑过。必要时可参考GitHub上的完整代码。
本书中所有在命令行输入或输出的内容均为如下形式(注意$符号):
本书中所有在Python解释器中输入的内容均为如下形式(注意>>>符号)。预期的程序输出信息将出现在没有>>>符号的地方:
要进入Python解释器,需运行不带参数的python3命令:
本书中所有在命令行输入或输出的内容均为如下形式:
黑体字 :表示一个新术语、一个重要的词或在界面上看到的词,比如,菜单或对话框中的词。例如:“在Administration(管理)面板上选择System info(系统信息)菜单”。
表示警告或重要说明。
表示提示或技巧。