|
|
|
|
移动端

1.9 系统级环境隔离

《Python高级编程(第2版)》第1章Python现状,本章将会向读者介绍一下Python 3的当前现状,同时介绍Python的现代开发方法。本节为大家介绍系统级环境隔离。

作者:张亮/阿信 译来源:人民邮电出版社|2018-01-29 17:57

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

1.9 系统级环境隔离

在大多数情况下,软件实现之所以可以快速迭代,是因为开发人员复用了大量现有组件。不要重复你自己(Don't Repeat Yourself),这已经成为许多程序员的通用准则和座右铭。将其他包和模块用在代码库中只是这种文化的一部分。二进制库、数据库、系统服务、第三方API等也应该被当作“可复用组件”。甚至整个操作系统都是可复用的。

基于Web应用的后端服务是一个超级复杂的应用实例。最简单的软件栈(software stack)通常由几层组成(从最底层开始):

数据库或其他类型的存储。

Python实现的应用程序代码。

HTTP服务器,例如Apache或NGINX。

当然,这些软件可以进一步简化,但实际上是不可能的。事实上,大型应用往往复杂到难以区分每一层。大型应用会用到多种不同的数据库,被分为多个独立进程,还会用到许多其他系统服务来进行缓存、队列、记录日志、服务发现等等。遗憾的是,复杂度没有上限,代码似乎只是遵循热力学第二定律而已。

真正重要的是,并非所有的软件栈元素都可以在Python运行环境的层面进行隔离。无论是HTTP服务器(例如NGINX)还是关系型数据库管理系统(RDBMS,例如PostgreSQL),在不同的系统上通常都有不同的版本。如果没有合适的工具,很难保证开发团队中每个人使用的每个组件的版本完全相同。如果团队中所有开发人员都在开发同一个项目的话,那么所有人可能会在开发工具箱上获得相同版本的服务,这在理论上是可能的。但如果他们使用的操作系统与生产环境不同的话,所有这些努力都是徒劳的。当然也不可能强迫程序员在并非本人最喜欢的系统上工作。

问题在于,可移植性仍然是一项巨大的挑战。在生产环境中,并非所有服务的运行方式都和在开发人员电脑上完全相同,而且这一点不可能改变。即使是Python在跨平台方面付出了巨大的努力,但在不同系统上的行为也会有所不同。通常来说,这些情况都有详细的文档,只有直接进行系统调用时才会发生。但是,靠程序员的记忆力来记住一长串兼容性问题,是很容易出错的。

这个问题的常见解决方法就是将整个系统隔离为应用程序环境。一般可以利用各种类型的系统虚拟化工具来实现。当然,虚拟化会降低性能,但是现代计算机的硬件都支持虚拟化,性能损失通常可以忽略不计。另一方面,可能的好处却有很多,如下所示。

开发环境可以完全匹配生产环境中使用的系统版本和服务,这有助于解决兼容性问题。

系统配置工具(如Puppet、Chef或Ansible,如果用的到的话)可以复用于开发环境配置。

如果可以自动创建这样的环境,那么新来的团队成员就可以轻松上手项目。

开发人员可以直接调用系统底层特性,在工作机的操作系统上可能没有这些特性,举个例子,在Windows中不可用的用户空间文件系统(File System in User Space,FSUS)。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

非常网管——网络服务

本书使用通俗易懂的语言,通过大量的实例,从实际应用的角度出发,全面系统地介绍了网络服务操作系统平台、电子邮件系统、Web站点和FTP站点...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊