ISP系统,原谅并再见! 我们为什么以及如何编写服务器控制面板

ISP系统,原谅并再见! 我们为什么以及如何编写服务器控制面板

你好! 我们是“Hosting Technologies”,于 5 年前推出 维迪斯娜 — 第一个专门为开发人员创建的 vds 托管。 我们努力让它变得方便,就像 DigitalOcean 一样,但有俄罗斯的支持、支付方式和服务器在俄罗斯。 但 DigitalOcean 不仅是可靠性和价格,它也是一种服务。

事实证明,ISPsystem 的软件就像一根绳子,束缚了我们通往酷服务的道路。 三年前,我们使用了 Billmanager 计费和 VMmanager 服务器控制面板,并很快意识到,如果没有我们自己的控制面板,几乎不可能提供良好的服务。

ISP 系统如何扼杀便利性

虫子

我们无法自己修复该错误 - 每次我们都必须写信给其他人的支持并等待。 任何问题的解决都需要第三方公司的响应。

ISP 系统支持响应正常,但仅在几个版本之后才修复,而且并非总是如此,也不是全部。 有时,关键错误需要几周的时间才能得到纠正。 我们必须安抚客户、道歉并等待 ISP 系统修复该错误。

停机威胁

更新可能会产生不可预测的停机时间,从而引发新的错误。

每次更新都是一次抽奖:我必须掩盖账单并向更新之神做出牺牲 - 有几次更新导致了 10-15 分钟的停机。 我们的管理员此时正睁大眼睛——我们永远不知道停机时间会持续多长时间,也无法预测 ISPsystem 何时决定发布新的更新。

在第五代上,Billmanager 变得更好,但为了获得必要的功能,我必须安装一个测试版,该测试版已经每周更新一次。 如果出现问题,我必须向其他开发人员授予访问权限,以便他们可以修复某些问题。

面板界面不方便

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

这样的界面需要时间——我们和我们的客户都需要时间。 在这种情况下,毫无疑问,像 DigitalOcean 一样方便。

生命周期短,API 更新频繁

我们编写了自己的插件 - 例如,具有 VMManager 中没有的附加付款方式的插件。

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

无法修改

更准确地说,这是可能的,但效率极低。 许可证限制不允许您更改源代码,您只能编写插件。 最大插件 - 一些菜单项、分步向导。 ISP 系统旨在实现多功能性,但我们需要专门的解决方案。

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

  • 快速响应错误、缺陷,并能够自行修复它们,而无需让客户等待。
  • 根据工作流程和客户需求自由修改界面。
  • 通过简洁且易于理解的设计提高可用性。

我们开始开发。

新面板架构

我们有一个自给自足的开发团队,所以我们自己编写了面板。
主要工作是由三位工程师完成的——技术总监 Sergey 提出架构并编写服务器代理,Alexey 负责计费,前端由我们的前端 Artysh 组装。

第1步:服务器代理

服务器代理是一个管理库的Python Web服务器 libvirt的,这反过来又控制着 Qemu-kvm 管理程序.

Agent通过libvirt库管理服务器上的所有服务:创建、停止、删除vd、安装操作系统、更改参数等。 在本文发表时,这些功能有四十多种不同的功能,我们根据任务和客户的需求进行补充。

理论上,libvirt 可以直接从计费控制,但这需要太多额外的代码,我们决定将代理和计费之间的这些功能分开 - 计费只是通过 JSON API 向代理发出请求。

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

服务器代理给我们的内容: 一个层的出现可以简化每个人的生活——计费不需要发送一大堆命令,而只需要发出一个请求。 代理将执行所需的一切操作:例如,它将分配磁盘空间和 RAM。

步骤 2. 计费

对于我们的开发人员 Alex 来说,这不是第一个控制面板 - Alex 已经从事托管工作很长时间了,所以他大致了解客户需要什么以及托管商需要什么。

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

要从ISPSystem软件切换,必须为客户充分保留以前的功能,将用户的所有财务行为从旧计费转移到新计费,以及它们之间的所有服务和连接。 我们研究了当前产品中的内容,然后研究了竞争对手的解决方案,主要是 DO 和 Vultr。 我们研究了缺点和优点,收集了使用 ISPsystem 旧产品的人员的反馈。

新的计费使用了两个堆栈:经典的 PHP、MySQL(未来计划切换到 PostgreSQL)、后端的 Yii2 框架和前端的 VueJS。 堆栈彼此独立工作,由不同的人开发,并使用 JSON API 进行通信。 对于过去和现在的开发,我们使用 PHP风暴 и 网络风暴 来自 JetBrains 并深爱他们(嘿伙计们!)

该面板采用模块化设计:支付系统模块、域名注册商模块或 SSL 证书模块。 您可以轻松添加新功能或删除旧功能。 扩展的基础是在架构上奠定的,包括相反的方向,“朝向硬件”。
ISP系统,原谅并再见! 我们为什么以及如何编写服务器控制面板
我们得到了什么:我们可以完全控制的控制面板。 现在,错误可以在几小时而不是几周内得到修复,并且新功能是根据客户的要求而不是根据 ISPSystem 的要求来实现的。

步骤3 界面

ISP系统,原谅并再见! 我们为什么以及如何编写服务器控制面板
该界面是我们团队的创意。

首先,我们研究了如果我们在 ISPsystem API 上添加一个附加组件而不从根本上改变界面中的任何内容会发生什么。 结果马马虎虎,我们决定一切从头开始。

我们认为,最重要的是使界面具有逻辑性,具有干净和简约的设计,然后我们就会得到一个漂亮的面板。 Megaplan 中讨论了元素的位置,用户现在在控制面板中看到的界面将逐渐诞生。

计费页面的设计是最先出现的,因为我们已经为ISP系统做了支付插件。

前端

他们决定将该面板打造成 SPA 应用程序 - 对资源要求不高且数据加载速度快。 我们的前端 Artysh 决定将其写在 Vue 上——当时 Vue 刚刚出现。 我们假设该框架会像 React 一样动态发展,一段时间后 Vue 社区将会成长,并且会出现大量的库。 我们押注于 Vue 并且并不后悔——现在只需很少的时间就可以向前端添加已经在后端编程的新功能。 我们将在另一篇文章中向您介绍有关前端面板的更多信息。

连接前端和后端

前端通过推送通知连接到后端。 我必须努力工作并编写自己的处理程序,但现在页面上的信息几乎立即更新。

发生了什么: 面板界面变得更加简单。 我们使其具有自适应性,并且快速加载使您甚至可以在起飞前的最后几分钟通过手机使用它,而无需安装单独的应用程序来与面板配合使用。

步骤4.测试和迁移方案

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

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

我必须测试并重新检查几乎所有内容,因为数据已从三个旧数据库合并到一个新数据库中:Billmanager、VMmanager 和经理的 IPmanager。 也许测试迁移是我们在开发新面板的过程中遇到的最困难的事情。

重新检查后,我们关闭了旧的账单。 最后的数据迁移是一个非常麻烦的时刻,但是,感谢上帝,它在几分钟之内就完成了,并且没有出现明显的问题。 我们在本周修复了一些小错误。 大部分时间都花在测试发生了什么。

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

概括如下: 它还活着!

好结局

从我们软件工作的第一个小时起,我们就感受到了转变的所有乐趣。 代码完全是我们的,具有方便的架构,并且界面干净且合乎逻辑。
ISP系统,原谅并再见! 我们为什么以及如何编写服务器控制面板
新面板推出后的首次评测

我们在 2017 月,即 XNUMX 年新年前夕,负载最轻的时候启动了过渡流程,以便让客户更轻松地过渡——假期前夕几乎没有人工作。

当切换到我们的系统时(除了一般的可靠性和便利性之外),我们得到的主要好处是能够为关键客户快速添加功能 - 成为他们的脸,而不是他们的屁股。

接下来是什么?

我们在成长,数据量、客户、客户数据都在增长。 我必须向后端添加一个 Memcached 服务器和两个具有不同任务的队列管理器。 前端有缓存和自己的队列。

当然,随着产品的发展和变得更加复杂,我们仍然遇到了冒险,例如当我们添加 HighLoad 时。

在下一篇文章中,我们将告诉您 Hi-CPU 资费是如何推出的:关于硬件、软件、我们解决了哪些任务以及我们做了什么。

来源: habr.com

添加评论