
Hallo! Wir sind âHosting-Technologienâ und haben vor 5 Jahren gestartet â das erste VDS-Hosting, das speziell fĂŒr Entwickler geschaffen wurde. Wir streben an, es so benutzerfreundlich wie DigitalOcean zu gestalten, jedoch mit russischer UnterstĂŒtzung, Zahlungsmöglichkeiten und Servern in Russland. Aber DigitalOcean bietet nicht nur ZuverlĂ€ssigkeit und Preis, sondern auch Service.
Die Software von ISPsystem stellte sich als das Seil heraus, das uns auf dem Weg zu einem groĂartigen Service die HĂ€nde band. Vor drei Jahren nutzten wir das Billing-System Billmanager und das Server-Management-Panel VMmanager und merkten schnell, dass es praktisch unmöglich ist, einen guten Service ohne unser eigenes Panel anzubieten.
Wie ISPsystem den Komfort zunichte machte
Bugs
Wir konnten Bugs nicht selbst beheben â jedes Mal mussten wir den Support eines Dritten kontaktieren und warten. Die Lösung eines Problems erforderte immer die Reaktion eines externen Unternehmens.
Der Support von ISPsystem antwortete normalerweise, aber die Fixes kamen nur mit mehreren Releases, und das auch nicht immer und nicht fĂŒr alle. Manchmal wurden kritische Bugs Wochen lang nicht behoben. Wir mussten unsere Kunden beruhigen, uns entschuldigen und warten, bis ISPsystem den Bug behob.
Bedrohung durch Ausfallzeiten
Updates konnten unvorhersehbare Ausfallzeiten hervorrufen, die neue Fehler verursachten.
Jedes Update war ein GlĂŒcksspiel: Wir mussten das Billing-System schlieĂen und Opfer an die Götter der Updates bringen â ein paar Mal fĂŒhrte ein Update zu einer Ausfallzeit von 10-15 Minuten. Unsere Admins saĂen in der Zwischenzeit angespannt â wir hatten nie eine Ahnung, wie lange die Ausfallzeit dauern wĂŒrde und konnten nicht vorhersagen, wann ISPsystem entschlieĂen wĂŒrde, ein neues Update herauszugeben.
Im fĂŒnften Generation von Billmanager wurde es besser, aber um Zugang zu den benötigten Funktionen zu erhalten, mussten wir die Beta installieren, die bereits wöchentlich aktualisiert wurde. Wenn etwas kaputt ging, mussten wir externen Entwicklern Zugang geben, damit sie etwas reparieren.
Unbequeme BenutzeroberflÀche des Panels
Alles war auf verschiedene Panels aufgeteilt und wurde von verschiedenen Orten aus gesteuert. Zum Beispiel zahlten Kunden ĂŒber Billmanager, wĂ€hrend sie VDS in VMManager neu starten oder neu installieren mussten. Auch unsere Mitarbeiter mussten zwischen Fenstern wechseln, um dem Kunden zu helfen, die Last auf seinem Server zu ĂŒberprĂŒfen oder zu sehen, welches Betriebssystem er verwendet.
Eine solche BenutzeroberflĂ€che kostet Zeit â sowohl unsere als auch die der Kunden. In einer solchen Situation kann von Benutzerfreundlichkeit wie bei DigitalOcean keine Rede sein.
Kurze Lebenszyklen mit hÀufigen API-Updates
Wir haben eigene Plugins geschrieben â zum Beispiel ein Plugin mit zusĂ€tzlichen Zahlungsmethoden, die in VMManager nicht vorhanden sind.
In den letzten Jahren hatte VMManager einen relativ kurzen Lebenszyklus, wobei die Namen der Variablen oder Funktionen in der API in neuen Versionen wahllos geĂ€ndert werden konnten â das hat unsere Plugins gebrochen. Der Support fĂŒr alte Versionen wurde schnell eingestellt, und es musste ein Update durchgefĂŒhrt werden.
Kann nicht angepasst werden.
Genauer gesagt, kann man es, aber es ist Ă€uĂerst ineffektiv. LizenzbeschrĂ€nkungen erlauben keine Ănderungen am Quellcode, man kann nur Plugins schreiben. Die maximalen Plugins sind einige MenĂŒelemente, ein Schritt-fĂŒr-Schritt-Assistent. ISPsystem ist auf UniversalitĂ€t ausgelegt, aber wir benötigten spezielle Lösungen.
So reifte die Entscheidung, unser eigenes Panel zu schreiben. Wir setzen uns Ziele:
- Schnell auf Fehler und Bugs reagieren und die Möglichkeit haben, sie selbst zu beheben, ohne den Kunden warten zu lassen.
- Den Bereich frei an die ArbeitsablĂ€ufe und BedĂŒrfnisse des Kunden anzupassen.
- Die Benutzerfreundlichkeit durch ein sauberes und verstÀndliches Design zu erhöhen.
Und begannen mit der Entwicklung.
Die Architektur des neuen Panels.
Wir haben ein eigenstÀndiges Entwicklerteam, sodass wir das Panel selbst geschrieben haben.
Die Hauptarbeit wurde von drei Ingenieuren geleistet â der technische Direktor Sergey entwarf die Architektur und schrieb den Server-Agenten, Alexey kĂŒmmerte sich um das Billing, und unser Frontend-Entwickler Artysh baute das Frontend zusammen.
Schritt 1. Server-Agent.
Der Server-Agent ist ein Webserver in Python, der die Bibliothek verwaltet , die wiederum verwaltet .
Der Agent verwaltet alle Dienste auf dem Server: Erstellung, Stopp, Löschung von VDS, Installation von Betriebssystemen, Ănderung von Parametern und so weiter ĂŒber die Bibliothek libvirt. Zum Zeitpunkt der Veröffentlichung dieses Artikels sind das mehr als vierzig verschiedene Funktionen, die wir je nach Aufgabe und Bedarf des Kunden ergĂ€nzen.
Idealerweise könnte man libvirt direkt aus dem Billing heraus steuern, aber das erforderte zu viel zusĂ€tzlichen Code, und wir entschieden uns, diese Funktionen zwischen Agent und Billing aufzuteilen â das Billing stellt einfach Anfragen an den Agenten ĂŒber die JSON-API.
Der Agent war das erste, was wir gemacht haben, da er keine BenutzeroberflÀche erforderte und direkt aus der Konsole des Servers getestet werden konnte.
Was uns der Server-Agent gebracht hat: Es entstand eine Schicht, die das Leben fĂŒr alle erleichtert - das Billing muss nicht mehr eine ganze Reihe von Befehlen ĂŒbermitteln, sondern nur eine Anfrage stellen. Der Agent erledigt alles Notwendige: zum Beispiel wird Platz auf der Festplatte und RAM bereitgestellt.
Schritt 2. Billing
FĂŒr unseren Entwickler Alex war dies nicht das erste Control Panel - Alex ist schon lange im Hosting-Bereich tĂ€tig, daher wusste er im Allgemeinen, was der Kunde braucht und was der Host benötigt.
Billing nennen wir untereinander "Control Panel": es enthÀlt nicht nur Geld und Dienstleistungen, sondern auch deren Verwaltung, Kundensupport und vieles mehr.
FĂŒr den Ăbergang von der Software ISPSystem war es notwendig, die vorherigen Funktionen fĂŒr die Kunden vollstĂ€ndig zu bewahren, alle finanziellen Transaktionen der Nutzer aus dem alten Billing in das neue zu ĂŒbertragen sowie alle Dienstleistungen und deren Verbindungen zu sichern. Wir haben untersucht, was im aktuellen Produkt vorhanden ist, dann die Lösungen der Wettbewerber, hauptsĂ€chlich DO und Vultr, betrachtet. Wir schauten uns die Nachteile und Vorteile an und sammelten RĂŒckmeldungen von Personen, die mit den alten Produkten von ISPsystem gearbeitet haben.
Im neuen Billing haben wir zwei Stacks verwendet: klassisches PHP, MySQL (und in Zukunft ist geplant, auf PostgreSQL umzusteigen), Yii2 als Backend-Framework und VueJS fĂŒr das Frontend. Die Stacks arbeiten unabhĂ€ngig voneinander, werden von verschiedenen Personen entwickelt und kommunizieren ĂŒber ein JSON-API. FĂŒr die Entwicklung nutzen wir damals und jetzt und von JetBrains und wir lieben sie sehr (Leute, hallo!)
Das Panel ist modular aufgebaut: Module fĂŒr Zahlungssysteme, ein Modul fĂŒr Domainregistrare oder beispielsweise ein Modul fĂŒr SSL-Zertifikate. Es ist einfach, eine neue Funktion hinzuzufĂŒgen oder eine alte zu entfernen. Die architektonische Grundlage fĂŒr Erweiterungen ist gegeben, auch in umgekehrter Richtung, "zum GerĂ€t hin."

Was wir erhalten haben: ein Control Panel, ĂŒber das wir die volle Kontrolle haben. Jetzt werden Bugs in Stunden und nicht in Wochen behoben, und neue Funktionen werden auf Anfrage der Kunden und nicht nach dem Wunsch von ISPSystem umgesetzt.
Schritt 3. Interface

Das Interface ist unser gemeinsames Baby.
Zuerst haben wir geschaut, was passiert, wenn wir eine Erweiterung ĂŒber die API von ISPsystem machen, ohne das Interface grundlegend zu Ă€ndern. Das Ergebnis war nicht zufriedenstellend und wir entschieden uns, alles von Grund auf neu zu machen.
Wir glaubten, dass das Wichtigste darin besteht, die Schnittstelle logisch zu gestalten, mit einem klaren und minimalistischen Design, um ein schönes Panel zu erhalten. Die Anordnung der Elemente wurde im Megaplan besprochen, und allmÀhlich entstand die Schnittstelle, die die Benutzer jetzt im Kontrollpanel sehen.
Zuerst kam das Design der Abrechnungsseite, da wir bereits Zahlungs-Plugins fĂŒr ISPsystem entwickelt hatten.
Frontend
Wir entschieden uns, das Panel als SPA-Anwendung zu gestalten â ressourcenschonend und mit schneller Datenladezeit. Unser Frontend-Entwickler Artysh entschied sich, es mit Vue zu schreiben â zu der Zeit war Vue gerade erschienen. Wir vermuteten, dass das Framework dynamisch wachsen wĂŒrde, Ă€hnlich wie React, und dass die Vue-Community sich erweitern und eine FĂŒlle von Bibliotheken entstehen wĂŒrde. Wir setzten auf Vue und bereuten es nicht â jetzt dauert es wenig Zeit, neue Funktionen, die bereits im Backend programmiert wurden, ins Frontend hinzuzufĂŒgen. Mehr ĂŒber das Frontend des Panels werden wir in einem separaten Artikel berichten.
Verbindung zwischen Frontend und Backend
Das Frontend wurde mit dem Backend ĂŒber Push-Nachrichten verbunden. Wir mussten uns anstrengen und einen eigenen Handler schreiben, aber jetzt erfolgt die Aktualisierung der Informationen auf der Seite nahezu in Echtzeit.
Was wir erreicht haben: Das Panel-Interface wurde einfacher. Wir haben es responsive gemacht, und das schnelle Laden ermöglicht die Nutzung auch auf MobilgerĂ€ten in den letzten Minuten vor dem Abflug, ohne dass eine separate Anwendung fĂŒr die Arbeit mit dem Panel installiert werden muss.
Schritt 4. Testen und Migrationsschema
Als alles gestartet war und die ersten Tests bestanden wurden, stellte sich die Frage der Migration. Zuerst richteten wir die Abrechnung ein und begannen, deren Zusammenarbeit mit dem Server-Agenten zu testen.
Dann schrieben wir ein einfaches Skript, das die Datenbank aus der alten Abrechnung in die neue ĂŒbertrĂ€gt.
Wir mussten tatsĂ€chlich alles testen und ĂŒberprĂŒfen, da die Daten in eine neue Datenbank aus drei alten: Billmanager, VMmanager und IPmanager zusammengefĂŒhrt wurden. Vielleicht sind die Testmigrationen das Schwierigste, mit dem wir im Entwicklungsprozess des neuen Panels konfrontiert waren.
Nach den ĂberprĂŒfungen schlossen wir die alte Abrechnung. Die endgĂŒltige Datenmigration war ein sehr angespanntes Ereignis, aber zum GlĂŒck wurde sie innerhalb weniger Minuten und ohne nennenswerte Probleme durchgefĂŒhrt. Es gab einige kleinere Bugs, die wir im Laufe einer Woche beheben mussten. Die meiste Zeit nahm das Testen in Anspruch, was wir erreicht hatten.
Dann haben wir den Kunden E-Mails mit der Adresse des neuen Panels und der Abrechnung geschickt und eine Weiterleitung eingerichtet.
Insgesamt: ES LEBT!
Happy End
Von den ersten Stunden der Arbeit mit unserer Software haben wir die Vorteile des Wechsels gespĂŒrt. Der Code war vollstĂ€ndig unser eigener und hatte eine benutzerfreundliche Architektur, und die BenutzeroberflĂ€che war klar und logisch.

Die erste RĂŒckmeldung nach dem Start des neuen Panels
Wir haben den Ăbergangsprozess im Dezember gestartet, kurz vor dem Neujahr 2017, als die Last am geringsten war, um den Wechsel fĂŒr die Kunden einfacher zu gestalten â fast niemand arbeitet vor den Feiertagen.
Das Wichtigste, was wir durch den Wechsel zu unserem System (neben allgemeiner ZuverlĂ€ssigkeit und Benutzerfreundlichkeit) erhalten haben, ist die Möglichkeit, schnell Funktionen fĂŒr SchlĂŒsselkunden hinzuzufĂŒgen â ihnen ein Gesicht zu geben und nicht im Hintergrund zu agieren.
Was folgt jetzt?
Wir wachsen, die Menge an Daten, Kunden und Kundendaten wĂ€chst. Auf die Backend-Seite musste ein Memcached-Server und zwei Task-Manager mit unterschiedlichen Aufgaben hinzugefĂŒgt werden. Auf der Frontend-Seite gibt es Caching und eigene Warteschlangen.
NatĂŒrlich hatten wir auch Abenteuer wĂ€hrend der Entwicklung und komplexer werdenden Produktgestaltung, zum Beispiel als wir HighLoad hinzugefĂŒgt haben.
Im nĂ€chsten Artikel werden wir erzĂ€hlen, wie wir den Hi-CPU-Tarif gestartet haben: ĂŒber die Hardware, Software, welche Aufgaben wir gelöst haben und was wir erreicht haben.
Quelle: habr.com
