ISPsystem,请原谅! 我们为什么以及如何编写服务器控制面板

图片

你好 我们是“托管技术”,5年前推出了VDSina-第一个专门为开发人员创建的vds托管。 我们努力像DigitalOcean一样使它变得方便,但是在俄罗斯提供了俄罗斯支持,付款方式和服务器。 但是DigitalOcean不仅具有可靠性和价格优势,而且还是一项服务。

事实证明,来自ISPsystem的软件是束缚住了我们通往凉爽服务之路的绳索。 三年前,我们使用Billmanager计费和VMmanager服务器控制面板,并很快意识到,没有我们自己的面板几乎不可能提供优质的服务。


ISPsystem如何杀死可用性


虫子

我们无法自己修复该错误-每次我们不得不在别人的支持下写信并等待。 解决任何问题都需要第三方公司的回应。

ISPsystem支持的响应正常,但修复仅通过几个版本进行,并非总是且并非全部。 有时,关键错误已修复了几个星期。 我们必须向客户保证,道歉并等待ISPsystem修复该错误。

停机威胁

更新可能会导致无法预测的停机时间,从而引发新的错误。

每次更新都是彩票:必须支付帐单并向更新之神做出牺牲-几次更新导致10-15分钟的停机时间。 那时,我们的管理员在我们眼前变成了灰色-我们不知道停机时间将持续多久,而且无法预测ISPsystem决定何时发布新更新。

在第五代中,Billmanager变得更好,但是为了获得必要的功能,我必须安装一个Beta,该Beta已每周更新。 如果出现问题,则必须允许外国开发人员访问,以便他们纠正某些问题。

不方便的面板界面

一切都分为不同的面板,并在不同的地方进行控制。 例如,客户通过Billmanager付款,他们必须在VMManager中重新引导或重新安装VDS。 我们的员工还必须在多个窗口之间切换以帮助客户,检查服务器上的负载或查看他使用的操作系统。

这样的界面需要时间-我们和客户。 对于像DigitalOcean这样的便利,在这种情况下毫无疑问。

生命周期短,API更新频繁

我们编写了自己的插件-例如,一个带有其他付款方式的插件,这些插件不在VMManager中。

近年来,VMManager的生命周期相对较短,在新版本中,API中变量或函数的名称可以任意更改-这破坏了我们的插件。 对旧版本的支持很快被最小化,必须进行更新。

您无法修改

更精确地说,但是效率极低。 许可限制不允许您更改源,只能编写插件。 插件的最大数量是一些菜单项,一个逐步向导。 ISPsystem的多功能性得到了提高,我们需要专门的解决方案。

因此,编写小组的决定已经成熟。 我们设定目标:

  • 快速响应错误,错误并能够自己修复它们,而无需等待客户端。
  • 自由修改界面以适应工作流程和客户需求。
  • 简洁易懂的设计提高了可用性。

他们开始发展。

新面板架构


我们有一个自给自足的开发团队,因此我们自己编写了小组。
主要工作由三名工程师完成-技术总监Sergey提出了该体系结构并编写了服务器代理,Alexey负责了结帐,而我们的前端Artysh收集了前端。

步骤1.服务器代理



服务器代理是管理libvirt库的python Web服务器,而libvirt库又管理Qemu-kvm虚拟机管理程序

代理管理服务器上的所有服务:通过libvirt库创建,停止,卸载vds,安装操作系统,更改设置等。 在发布时,这是40多种不同的功能,我们会根据客户的任务和需求对其进行补充。

原则上,可以直接通过计费来管理libvirt,但是它需要太多额外的代码,因此我们决定在代理和计费之间分配这些功能-计费只是通过JSON API向代理发出请求。

代理是我们要做的第一件事,因为它不需要任何接口,可以直接从服务器控制台进行测试。

服务器代理给了我们什么:出现了一层,简化了所有人的生活-计费不需要发送一堆命令,而只需发出请求。 代理将满足您的所有需求:例如,分配磁盘空间和RAM。

步骤2.帐单


对于我们的开发人员Alex而言,这不是第一个控制面板-Alex长期以来一直在托管服务器,因此他通常了解客户端需要什么以及托管人需要什么。

我们称自己之间的计费为“控制面板”:它不仅包含金钱和服务,还包含其管理,客户支持等等。

要从ISPSystem软件切换,必须完全为客户保留以前的功能,将所有财务用户操作从旧的计费系统转移到新的计费系统,以及它们之间的所有服务和连接。 我们研究了当前产品的功能,然后研究了竞争对手(主要是DO和Vultr)的决策。 我们研究了缺点和优点,并收集了使用ISPsystem旧产品的人员的反馈。

在新的计费方式中,使用了两个堆栈:经典的PHP,MySQL(并且将来计划切换到PostgreSQL),后端的Yii2框架和前端的VueJS。 堆栈彼此独立工作,由不同的人开发,并使用JSON API进行通信。 为了进行开发,现在和现在,我们使用JetBrains的PHPStormWebStorm并深深地爱着它们(伙计们,你好!)

该面板是根据模块化原理设计的:支付系统模块,域注册商模块或SSL证书模块。 您可以轻松添加新功能或删除旧功能。 扩张的基础在建筑上打下了基础,包括与铁相反的方向。
图片
我们得到的是 :我们可以完全控制的控制面板。 现在,错误是在几个小时而不是几周内修复的,新功能是应客户要求而不是ISPSystem的要求实现的。

步骤3.介面


图片
该界面是我们团队的创意。

首先,我们研究了如果通过ISPsystem API进行附加操作而不在界面中进行任何重大更改的情况下会发生什么情况。 事实证明,我们决定从头开始做所有事情。

我们认为,最主要的是使界面具有逻辑性,并具有简洁和简约的设计,然后我们将获得漂亮的面板。 Megaplan中讨论了元素的排列方式,用户在控制面板中看到的界面现在将逐渐诞生。

第一次出现计费页面设计,因为我们已经为ISPsystem制作了付款插件。

前端

他们决定使该面板成为SPA应用程序-不需要资源,并且数据加载速度快。 我们的前端Artysh决定将其写在Vue上-当时Vue刚出现。 我们假设该框架将像React一样动态发展,一段时间后Vue社区将成长,并且将出现大量的图书馆。 我们将其安装在Vue上,并不后悔-现在将前端已编程的新功能添加到前端只需很少的时间。 我们将在另一篇文章中进一步介绍前端面板。

前端与后端的通信

前端通过pushies绑定到后端。 我不得不出汗并编写自己的处理程序,但是现在页面上的信息几乎立即得到更新。

发生什么:面板界面变得更加容易。 我们使它具有适应性,并且快速加载允许甚至在起飞前的最后几分钟甚至可以在手机上使用它,而无需安装用于面板的单独应用程序。

步骤4.测试和迁移方案


当一切开始并且第一个测试通过时,出现了迁移问题。 首先,我们设置计费并开始使用服务器代理测试其工作。

然后,他们编写了一个简单的脚本,该脚本将数据库从旧账单转移到新账单。

我必须对所有内容进行测试和仔细检查,因为数据是从三个旧数据库注入到一个新数据库中的:Billmanager,VMmanager和IPmanager manager。 也许测试迁移是我们在开发新面板过程中遇到的最困难的事情。

重新检查后,我们掩盖了旧帐单。 最终的数据迁移是一个非常令人担忧的时刻,但是,感谢上帝,它在几分钟之内就完成了,并且没有明显的问题。 我们在一周内修复了一些小错误。 主要时间是通过测试发生了什么。

然后,我们向客户发送了带有新面板地址和帐单的信件,并进行了重定向。

底线: 它还活着!

快乐的


从我们软件的最初几个小时开始,我们就感受到了过渡的所有乐趣。 该代码完全属于我们,并具有方便的体系结构,并且界面简洁,逻辑合理。
图片
启动新面板后的第一则评论

我们于12月,即2017年新年前夕,开始了过渡过程,当时负载最小,使客户更轻松地进行过渡-几乎没有人在节假日前夕工作。

在向系统过渡的过程中,我们获得的主要好处(除了一般的可靠性和便利性之外)是能够为主要客户快速添加功能-成为他们的面孔,而不是他们的屁股。

接下来是什么?


我们在增长,客户的数据量越来越大,客户数据也在增长。 内存缓存服务器和两个具有不同任务的队列管理器必须添加到后端。 前端有缓存和队列。

当然,例如,当我们添加HighLoad时,我们在开发和复杂化产品时仍然会有冒险。

在下一篇文章中,我们将向您介绍Hi-CPU收费的启动方式:有关硬件,软件,我们完成的任务以及所做的工作。



订阅我们的Instagram开发人员


Source: https://habr.com/ru/post/zh-CN460107/


All Articles