自从Laxcus分布式操作系统正式开源两个月以来,可能是它一站式云计算平台属性和超大规模计算能力,给用户带来极大的便利,下载量一直持续增加,最近网站后台总是有用户在问,在Laxcus分布式操作系统的社区版本基础上,编写一个计费系统,应该如何实现,分哪些步骤之类的问题。下面简单说一下这个问题,先说下计费编程的大概情况,下一篇咱们再详细说如何编写Laxcus云计费系统。

标准的云服务计费系统,目前是属于Laxcus云计算版本的一项功能,Laxcus云计算版本对应云计算服务商,里面的功能大量是针对云计算的硬件环境而设计,这种硬件环境,一般用户的计算机集群或者服务器普遍不具备,所以社区版用户无法使用。但是社区版本也提供了通用性的云服务接口,用户使用这些接口,结合自己的云服务特点,也能够设计一套计费系统。更深一步,因为Laxcus分布式操作系统是开源的,如果开发者对Laxcus分布式系统系统有足够了解,还可以结合自己的硬件环境,直接修改源代码,来设计更复杂的计费系统。今天就用这些接口,来介绍一下如何开发一个简单的计费系统,更多的功能需求,可以在这个上面延伸。希望对使用Laxcus社区版本的用户,提供一个参考示例。​

自建云服务计费系统_运行时间

首先让我们感性体验一下。启动Laxcus分布式操作系统的集群管理桌面,上面有一个“我的集群”的应用软件。这是一个动态显示Laxcus集群运行环境的应用,打开它,Laxcus集群里,每个节点的重要运行参数都会在上面显示,包括CPU、GPU的负载,内存、磁盘的用量,瞬时网络流量,已经消耗的全部网络流量,在线人数、Laxcus分布式应用软件的运行数量,都会定时刷新一一列举出来,刷新的时间也是由用户自己定义,系统默认的刷新间隔时间是20秒,最小的刷新间隔时间10秒。

显示在窗口界面上的参数,是Laxcus集群每个节点的运行参数,在它的里面,其实隐藏了注册用户的运行记录,或者说,每个注册用户在Laxcus集群运行记录的汇总,就是Laxcus集群节点的运行参数,所以二者实际是一体两面,混合统一。

如果把Laxcus集群的运行记录拆解,把每个用户的运行记录单独提取出来,交给计费系统来处理,就需要使用到一个分布式命令:“Check User Cost”。

在图形界面或者命令行输入“Check User Cost”命令,它会有如下的显示。

自建云服务计费系统_运行时间_02


打开命令帮助窗口,Check User Cost命令有如下介绍:

自建云服务计费系统_迭代_03


在Laxcus分布式操作系统里,所有的命令参数都采用短参数格式,即在参数前面加一个“-”符号,而不是两个。这和Linux系统有所区别。

Check User Cost命令有以下几个参数:

  1. Sites,节点的类型。这是一个关键字,在Laxcus集群里,除了FRONT节点和WATCH节点,其它节点都是有效。节点类型是一个必选项,指定节点后,命令将去查询关联节点上的资源消耗记录,如果需要检索多个节点,节点关键字之间用“,”分开。
  2. Users,用户签名。它对应用户的登录名称,忽略大小写。这也是一个必选项,只有指定用户签名后,系统才能够知道要寻找哪些用户的记录,然后再去关联的节点上查找。
  3. Includes,指向被检索的命令,允许有多个命令被同时检索,多个命令之间用“,”分隔。这是一个可选项,如果不指定,系统将检索用户的所有命令。
  4. Excludes,就是在全部命令里,被排除的命令,多个被排除命令之间用“,”分隔。它也是可选项,同时与“Includes”是互斥的。就是说如果指定Includes时,就不能使用Excludes参数,反之亦然。
  5. Begin 检索的开始时间,时间格式是“年-月-日 时:分:秒”这是必选项。
  6. End 检索的结束时间,时间格式也Begin参数一样,也是必选项。End和Begin形成匹配。​

如果是编程,调用Check User Cost命令,需要使用DSDK软件包。DSDK软件包全名是Distributd Software Development Kit,是Laxcus分布式操作系统提供给用户,用来进行分布式编程的API。DSDK类似于Windows或者Linux提供的SDK从功能上来说差不多,区别在于,Laxcus提供的处理工作都是分布的,所以调用DSDK API指令后,这些指令会分散到不同的计算机节点上运行,而不象Windows、Linux上的指令,只在本地执行。这是它们的根本不同,但是在操作使用上,用户和开发者不会有这种感觉,就象完全在本地处理一样。

Check User Cost命令的返回结果里,有大量参数需要在这里逐个说明一下,理解后,才好处理后面的编程工作。

首先是用户名称,它与命令中的“Users”参数对应。 这个比较好理解,每个用户都有一个登录身份,用户名称就是它的ID,通过用户名,计费系统才能识别每一个用户在集群中执行的工作、产生的网络流量,计算消耗的时间。

第二个是节点,它与命令中的“Sites”参数对应。Laxcus计算机集群有很多的节点,每个节点处理一项单一主要工作,比如Data节点主要处理大数据工作,Disk节点负责存储操作,Work节点执行分布式计算工作,Build节点处理数据和资源的重组工作,Call节点管理分布计算业务的调度处理。

第三个是命令名称。在Laxcus集群中,命令相当于赋于业务一个可识别的工作身份,类似于用户名称,通过命令名称,可以快速识别用户执行的每一项操作,同时,根据命令名称,可以进行有针对性的计费工作。这也是Laxcus赋予计费的一项特权。

第四个是迭代次数。迭代就是指命令在Laxcus集群中执行的工作次数,因为Laxcus集群上的计算工作不一定只局限于某一个节点,很多时候会分散到不同的节点上去执行,根据迭代次数,我们可以给计费系统增加多一个判断选项。

第五个是服务号。服务号其实包括两个参数,根据图片上的显示,前面是分配给命令的ID,这个ID具有唯一性,在分布计算启动时,由运行环境动态生成。并且在随后的计算过程中,会分配给关联的子命令,这样命令和子命令之间,就形成一个联动的整体,完成一项巨复杂的分布式计算工作,并且能够在界面上显示出来,供用户查阅和识别。服务器的第二个参数是它的执行编号,编号顺序是从1开始,然后一直无限延伸下去,直到结束。越复杂的计算工作,执行编号会越大。为了方便开发者理解,这里显示的编号都很小,最大的编号是3,也就示意着只执行了3次分布计算工作。

第六和第七是计算工作的开始和结束时间,它与命令中的Begin、End参数对应。这个非常好理解,两个时间都精确到毫秒级别,就不多解释了。

第八个是运行时间,也就是结束时间减去开始时间的差值。通过运行时间,用户再结合自己的资源计费标准,就可以得到一个消费额度。这个工作将由开发者来完成。

第九个是迭代时间。这个不太好理解,在这里需要多说明一下。在Laxcus分布式操作系统,所有的分布式计算工作都是由调度器来组织实施和管理。Laxcus调度器类似超算上普遍使用的SLURM,或者其它调度工具。Laxcus调度器每执行一次调度,会消耗一定的CPU、线程、时间。迭代时间,就是Laxcus调度器为每项分布计算工作调配资源消耗的时间总和,这个时间属于运行时间的一部分,但是它和运行时间又不太一样。实际上,计算工作时间,就是等于运行时间减去调度时间。

第十和第十一项是网络IO在接收和发送数据产生和消耗的流量。这个计费系统需要又一项重要参数,根据它们,计费系统可以精确计算每一笔计算业务,得出相应的消耗额度。

第十二项是优先级。在Laxcus分布式操作系统,计算业务可以定制不同的优先级,高优先级的计算业务,总是优先被执行。也就是说,一个计算环境中,高优先级的计算业务,被系统优先赋予计算资源,而低优先级的计算业务,总是在高优先级的计算业务结束后,才能获得资源使用权。目前Laxcus集群对用户计算业务,共分有四次优先权限,分别是:Max、Normal、Mini、None。默认情况下,所有计算业务都是None状态,即不设置优先级,这样系统会给所有用户,按照时间顺序平均分配计算资源。用户如果需要优先获得使用计算机资源的特权,那么可以联系系统管理员,这是由它负责管理的权限之一。

如果用户没有太复杂的计费要求,通过以上计费参数,再结合DSDK提供的API接口,一个基本的计算系统就能生成的。

根据一个开发者的经历,如果开发人员在熟悉Laxcus分布式操作系统和DSDK编程的情况下,设计开发一个基本的计费系统,也就是两三天的时间。

下一篇我将详细介绍如何使用DSDK中的API,在Laxcus分布式操作系统上,设计一套简单的计费系统。今天的介绍就到这里,有兴趣的读者可以继续关注我的内容。