设计自己的paas平台nap 7—-单应用多实例
写在前面
前面一片文章说了关于配置多个实例的问题,其实我们应该更加深入的理解一下。很容易混淆的一个问题就是单应用多实例和一组类似应用的区别。而且,他们实现起来也是有很大差别的。下面我们对这个两个问题进行分别探讨,并分别实现,完成nap的更多功能。
单应用多实例 VS 一组类似应用
我觉得,老板的理解不对。需求是这样的,一个应用,需要启动多次,但是每次启动的命令中的某个参数不同。那么,对传统意义上而言,这几个应用就是不同的应用,不能说是同一个应用的不同实例。对我们现在设计的paas平台而言,就应该是建立几个不同的文件夹,代表你要起的应用的个数,里面资源可以一样,但是你的启动命令不一样,这样就起来不同的应用了,当然,我也承认,这样确实比较麻烦。
所以,我思考了一下,单应用多实例和一群类似的应用是不一样的。单应用多实例,应该是同一个应用,完全相同,启动多个实例,这样的目的可能是为了比较同一个应用多次计算的结果是否一致,或者考虑到可靠性,即使其中的一个应用实例死掉,也是可以访问等。而一群类似的应用,可能就是因为他们的计算资源一致,或者只有起始命令不一样而已。那么,我们就针对这两个需求,做不同的事情。
单应用多实例
在我们的paas平台中,应该有两个地方需要体现。 第一,是在部署应用之前。在我们的源代码文件中,我们有个profile的文件,我们上篇文章中说过,可以通过在里面添加参数的形式来实现。我们这里就是增加了一个新的参数,scale。这个scale,就是单应用要启动的实例个数。然后,在解读profile文件的时候,读出这个值。至于启动部分,fleet有个机制可以满足,所谓的高可用应用的部署。是关于submit myapp@.service,启动的时候,启动start myapp@%i.service这种方式,这里的%i是一个数字,字母,或者其他,在service文件中,可以通过%i访问。启动的个数就通过一个for循环就可以了。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
毕竟并不是所有的用户都是程序员,都希望看到底层的显示,所以我们为之设计了一个web manager,虽然很丑,但是还在规划中。其主要思想就是通过fleetctl –endpoint机制,远程访问fleet里面的信息。那么,这个web manager也就是第二个地方我们要考虑的点。在这个地方,应该加一个按钮,这个按钮的作用就比较简单,就是单纯的扩大实例的个数。其中要注意的就是实例命名的问题,因为不能重复,在我们现在设计的paas平台中,如果应用重复,就是单纯的覆盖老应用,还是很不友好的,我们后面估计会花一点时间,单独思考一下关于命名冲突的问题。
一组类似应用
在我们的web界面中,我们有一个部署应用的界面。这个是怎么实现的呢?在你需要部署这个应用的时候,需要输入要部署的应用的url。得到这个url之后,我们这么做。
1 2 3 |
|
稍微有点常识的人,一看就知道这是在干嘛。其实就是下载下来源码,然后push到我们的paas平台中去。同样的,我们这里部署一组类似应用的时候,也采用这种方式。 在某一个应用下面,点击部署相似应用的按钮,弹出一个对话框,需要你输入重新启动的命令。得到这个命令之后,我们就拿到了两样东西。第一,这组相似应用的名字,第二,这组相似应用的新命令,够了。 然后我们接下来要做的事情就是,按照相似应用的名字,把这个相似应用的文件下载下来,修改其中profile的command命令,重新push。当然,还是一个不能忽略的问题,命名问题。 伪代码如下:
1 2 3 4 5 6 7 8 |
|