基于Fire 开源库的MNSS 命令行重构方法设计与应用

2020-07-08 02:00郝亚平
科学技术创新 2020年15期
关键词:底层开源代码

郝亚平

(常州工业职业技术学院,江苏 常州213000)

MNSS 平台是基于开源软件的虚拟仿真教学实验平台,旨在利用浏览器实现在线虚拟仿真实验[1]。MNSS 综合利用云计算、虚拟化、linux bridge 等技术[2],同时整合了众多优秀的开源底层软件作为基础,构建了一个以云计算技术为基础的“高性能、集中式、开放性”兼具的创新型在线实验平台。可以很好的应用于教学、科研、实践等方面[3-4]。

MNSS 平台主要由一台管理机服务器、一台原型机服务器与执行机服务器群构成,并且在平台中集成了众多的开源底层软件。由于其系统架构庞大,导致管理、运营和维护较为复杂,因而如何提升平台的可维护性、可拓展性与安全性变得尤为重要[5]。目前,平台的运营和管理比较零散,缺乏统一的平台架构。

为了解决以上的问题,我们以Python 开源库Fire 为基础,将系统底层中的命令行以功能进行统一分类,并进行二次封装,采用命名加参数的形式进行调用,该架构不仅可以使命令行更加安全的运行,并且在开发过程中,提高开发人员的二次开发效率,增加平台的可维护性与可拓展性。

1 Fire 的基本使用方法与实现原理

Fire 是谷歌团队开源的Python 库,用于将Python 代码自动转换为代码行(CLI),开发者不需要定义参数,设置帮助信息,也不需要编写具体执行代码的main 函数。相反,开发者只需从main 模块调用“Fire”函数,其余工作全部交由Python Fire 来完成。

Fire 的实现原理如图1 所示,采用Fire 编写命令行中的参数顺序和代码内部对象的树状层次结构是直接对应的关系。如果fire 不带参数暴露了当前的模块,那么第一个参数就应该是这个模块内部的函数名、类名或者是变量名。如果第一个参数是函数,那么接下来的参数就是函数的参数。如果第一个参数是类,那么接下来的参数可以用这个类实例内部的方法或者字段。如果第一个参数是变量名,后面没有参数的话,就直接显示这个变量。如果后面还有参数,那么就把这个变量看成一个对象,然后继续使用后续参数来深入解析这个对象。由于Fire 可以使开发人员专注于方法本身,而不需要考虑如何转变为命令,非常实用,因此我们采用Fire 将MNSS 平台的运营、管理、开发等工作转化为命令行,实现底层代码和上层显示的隔离。

在Python 里面所有的变量都是对象,包括普通的整数、字符串、浮点数、布尔值等。理论上可以一直将对象结构递归下去,形成一个复杂的链式调用。

2 基于Fire 的MNSS 命令行重构方法设计

MNSS 采用集群式服务器设计,并集成了众多开源底层软件,为了保障系统底层命令行的运行安全,提升系统可维护性和可拓展性,我们以Python 开源库Fire 为基础,重新设计了一套针对MNSS 平台的命令集。

图1 Fire 原理图

2.1 MNSS 平台框架

MNSS 平台在物理架构上主要由一台管理机服务器、一台原型机服务器与若干执行机服务器群组成,如图2 所示:

图2 MNSS 架构图

管理机服务器:主要实现用户管理、资源管理、执行机管理和运维管理。

原型机服务器:为执行机的运行提供共性资源,如实验拓扑、视频教程、用户数据、虚拟元器件等等。

执行机服务器集群:执行机服务器集群主要由若干执行机组成,执行机挂载原型机服务器中的资源。执行机为用户仿真提供计算资源、内存资源、存储资源等必要的资源,在用户登录期间,每个用户与一台执行机动态绑定,当用户退出后,执行机资源将动态释放。通过不断增加执行机的数量,可以满足MNSS的共同在线用户数量。每个执行机的资源都是可以灵活调配的,管理员可以通过增加执行机的CPU、内存、网络等资源,为每个用户动态配置所需的资源。

2.2 重构方法设计

我们以Fire 为设计思路,将MNSS 底层的命令行按照功能进行统一分类。其重构包括以下步骤:第一步,由于目前MNSS底层软件中,有大量以Python 语言为基础的软件,我们可以将此类软件接口直接使用Fire 进行重写,按照其功能,在调用时统一分类;第二步,将MNSS 平台对于底层命令行的调用按照功能进行统一分类,包含之前对于Python 的命令行调用,并二次封装;第三步,按照功能对二次封装的接口进行统一分类命名,并按照Fire 的原理,命名层次结构与功能进行一一对应。

我们统一将封装后命令行以mnss 作为一级名称,以系统模块作为二级名称,以功能作为三级名称,以具体实现作为四级名称,中间以空格分隔。具体模块分类如图3 所示。

图3 命名模块结构图

我们以基础组件模块为例,其命名结构如图4 所示。

图4 基础模块命名结构图

3 重构应用

我们以用户登录MNSS 后,对执行机服务器的性能优化为例进行命令行的重构。MNSS 平台在每个用户登录执行机的时候,为避免某些进程重复开启或某些应用的内存需要进行清理,在登录代码中,我们加入了进程清理与内存释放的代码,代码如下:

我们将此段代码进行二次封装到统一命令行运行类中,按照功能命名为:mnss performance login_operation clean,封装后的代码如下:

重构完成后,我们可以看到,对于开发人员来说,不仅提高了代码可读性,而且,在后续开发中,如若添加或修改性能优化命令行时,只需要在统一命令行运行类中,将对应命名的方法进行修改就可以完成,对于复用性比较高的命令行来说,此架构可以大大提高开发效率,并且由于统一分类,可以大大提升平台的可维护性和可拓展性。

4 结论

本文以Python 开源库Fire 为设计思路,重新设计了一套MNSS 平台底层中命令行的设计架构。该架构不仅将MNSS 底层中的Python 命令行使用Fire 进行优化,更采用Fire 的设计思路,将MNSS 底层命令行按功能统一分类,并进行二次封装,采用命名加参数的方式进行调用,使命令行更加安全的运行,并且在开发过程中,可以提高开发人员的二次开发效率,提升平台的可维护性与可拓展性。

猜你喜欢
底层开源代码
航天企业提升采购能力的底层逻辑
五毛钱能买多少头牛
2019开源杰出贡献奖
创世代码
创世代码
创世代码
创世代码
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
回到现实底层与悲悯情怀