ISPsystem, iartă și adio! De ce și cum am scris panoul de control al serverului nostru

ISPsystem, iartă și adio! De ce și cum am scris panoul de control al serverului nostru

Buna ziua! Suntem „Tehnologii de găzduire” și am lansat acum 5 ani VDSina — prima găzduire vds creată special pentru dezvoltatori. Ne străduim să-l facem convenabil, ca DigitalOcean, dar cu suport rusesc, metode de plată și servere în Rusia. Dar DigitalOcean nu este doar fiabilitate și preț, este și un serviciu.

Software-ul de la ISPsystem s-a dovedit a fi o frânghie care ne-a legat mâinile pe drumul către un serviciu cool. În urmă cu trei ani, am folosit facturarea Billmanager și panoul de control al serverului VMmanager și am realizat rapid că era aproape imposibil să oferim un serviciu bun fără propriul nostru panou de control.

Cum sistemul ISP a ucis confortul

Gandaci

Nu am putut remedia singuri eroarea - de fiecare dată trebuia să scriem suportului altcuiva și să așteptăm. Rezolvarea oricărei probleme a necesitat răspunsul unei companii terțe.

Suportul ISPsystem a răspuns normal, dar remedierea a venit numai după câteva lansări, apoi nu întotdeauna și nu toate. Uneori, erorile critice au fost corectate timp de câteva săptămâni. A trebuit să asigurăm clienții, să ne cerem scuze și să așteptăm ca ISPsystem să remedieze eroarea.

Amenințare cu timpul de întrerupere

Actualizările ar putea genera întreruperi imprevizibile care au provocat noi erori.

Fiecare actualizare a fost o loterie: a trebuit să acoper facturarea și să fac sacrificii zeilor actualizărilor - de câteva ori actualizarea a cauzat timp de nefuncționare pentru 10-15 minute. Administratorii noștri în acest moment stăteau pe ochii lor - nu știam niciodată cât va dura timpul de nefuncționare și nu puteam prezice când ISPsystem va decide să lanseze o nouă actualizare.

La a cincea generație, Billmanager s-a îmbunătățit, dar pentru a avea acces la caracteristicile necesare, a trebuit să instalez o versiune beta, care era deja actualizată în fiecare săptămână. Dacă s-a stricat ceva, trebuia să dau acces altor dezvoltatori pentru a putea repara ceva.

Interfață de panou incomod

Totul a fost împărțit în panouri diferite și controlat din locuri diferite. De exemplu, clienții plăteau prin Billmanager și trebuiau să repornească sau să reinstaleze VDS în VMManager. De asemenea, personalul nostru a trebuit să comute între ferestre pentru a ajuta un client, pentru a verifica încărcarea de pe serverul său sau pentru a vedea ce sistem de operare folosea.

O astfel de interfață necesită timp - atât a noastră, cât și a clienților noștri. Nu se pune problema vreunei comodități, precum cea a DigitalOcean, într-o astfel de situație.

Cicluri de viață scurte cu actualizări frecvente API

Am scris propriile noastre plugin-uri - de exemplu, un plugin cu metode de plată suplimentare care nu sunt în VMManager.

În ultimii ani, VMManager a avut un ciclu de viață relativ scurt, iar în versiunile noi, numele variabilelor sau funcțiilor din API se puteau schimba arbitrar - acest lucru ne-a rupt pluginurile. Suportul pentru versiunile mai vechi a fost eliminat rapid și a trebuit actualizat.

Nu poate fi modificat

Mai exact, este posibil, dar extrem de ineficient. Restricțiile de licență nu vă permit să faceți modificări la codul sursă, puteți scrie doar pluginuri. Numărul maxim de pluginuri - unele elemente de meniu, un expert pas cu pas. Sistemele ISP sunt proiectate pentru versatilitate, dar aveam nevoie de soluții specializate.

Deci decizia a fost coaptă de a-mi scrie propriul panel. Ne-am stabilit obiective:

  • Răspundeți rapid la erori și erori și puteți să le remediați singur, fără a face clientul să aștepte.
  • Modificați liber interfața pentru fluxurile de lucru și nevoile clienților.
  • Creșteți gradul de utilizare cu un design curat și ușor de înțeles.

Și am început dezvoltarea.

Arhitectură nouă de panouri

Avem o echipă de dezvoltare autosuficientă, așa că am scris singuri panoul.
Lucrarea principală a fost realizată de trei ingineri - directorul tehnic Sergey a venit cu arhitectura și a scris agentul server, Alexey a făcut facturarea, iar front-end-ul a fost asamblat de front-ender-ul nostru Artysh.

Pasul 1: Agent server

Agentul server este un server web python care gestionează biblioteca libvirt, care la rândul său guvernează Hypervisor Qemu-kvm.

Agentul gestionează toate serviciile de pe server: crearea, oprirea, ștergerea vd-urilor, instalarea sistemelor de operare, modificarea parametrilor și așa mai departe prin biblioteca libvirt. La momentul publicării articolului, acestea sunt peste patruzeci de funcții diferite, pe care le completăm în funcție de sarcina și nevoile clientului.

În teorie, libvirt putea fi controlat direct din facturare, dar acest lucru a necesitat prea mult cod suplimentar și am decis să separăm aceste funcții între agent și facturare - facturarea pur și simplu face solicitări către agent prin API-ul JSON.

Agentul este primul lucru pe care l-am făcut, deoarece nu necesita nicio interfață și a fost posibil să-l testăm direct din consola serverului.

Ce ne-a oferit agentul serverului: a apărut un strat care simplifică viața tuturor - facturarea nu trebuie să trimită o grămadă de comenzi, ci doar să facă o cerere. Și agentul va face tot ce este necesar: de exemplu, va aloca spațiu pe disc și RAM.

Pasul 2. Facturare

Pentru dezvoltatorul nostru Alex, acesta nu a fost primul panou de control - Alex lucrează de mult timp în găzduire, așa că a înțeles în general de ce are nevoie clientul și de ce are nevoie hosterul.

Numim facturarea între noi „panou de control”: conține nu numai bani și servicii, ci și gestionarea acestora, asistența clienților și multe altele.

Pentru a trece de la software-ul ISPSystem, a fost necesar să se păstreze pe deplin funcționalitatea anterioară pentru clienți, să se transfere toate acțiunile financiare ale utilizatorilor de la vechea facturare la cea nouă, precum și toate serviciile și conexiunile dintre aceștia. Am studiat ce este în produsul actual, apoi soluțiile concurenților, în principal DO și Vultr. Ne-am uitat la dezavantaje și avantaje, am colectat feedback de la oameni care au lucrat cu produse vechi de la ISPsystem.

Noua facturare a folosit două stive: PHP clasic, MySQL (și în viitor este planificată trecerea la PostgreSQL), Yii2 ca cadru pe backend și VueJS pe față. Stivele funcționează independent unele de altele, sunt dezvoltate de oameni diferiți și comunică folosind API-ul JSON. Pentru dezvoltare atunci și acum folosim PHPStorm и furtuna web de la JetBrains și iubește-i cu drag (hei băieți!)

Panoul este proiectat pe o bază modulară: module de sistem de plată, modul de înregistrare a domeniilor sau, de exemplu, un modul de certificat SSL. Puteți adăuga cu ușurință o funcție nouă sau puteți elimina una veche. Baza extinderii este pusă arhitectural, inclusiv în direcția opusă, „spre feronerie”.
ISPsystem, iartă și adio! De ce și cum am scris panoul de control al serverului nostru
Ce avem: un panou de control asupra căruia avem control total. Acum erorile sunt remediate în ore, nu în săptămâni, iar noi funcții sunt implementate la cererea clienților și nu la cererea ISPSystem.

Pasul 3 Interfață

ISPsystem, iartă și adio! De ce și cum am scris panoul de control al serverului nostru
Interfața este creată de echipa noastră.

În primul rând, ne-am uitat la ce s-ar întâmpla dacă am face un add-on prin API-ul ISPsystem fără a schimba fundamental nimic în interfață. A ieșit așa și am decis să facem totul de la zero.

Am crezut că principalul lucru este să facem interfața logică, cu un design curat și minimalist, iar apoi vom obține un panou frumos. Locația elementelor a fost discutată în Megaplan și se va naște treptat interfața pe care utilizatorii o văd acum în panoul de control.

Designul paginii de facturare a fost primul care a apărut, deoarece am realizat deja pluginuri de plată pentru ISPsystem.

În față

Ei au decis să facă din panoul o aplicație SPA - nesolicitantă pentru resurse și cu încărcare rapidă a datelor. Front-enderul nostru Artysh a decis să-l scrie pe Vue - la acel moment Vue tocmai apăruse. Am presupus că cadrul se va dezvolta dinamic, la fel ca React, după un timp comunitatea Vue va crește și va apărea o mare de biblioteci. Am pariat pe Vue și nu am regretat - acum este nevoie de puțin timp pentru a adăuga funcții noi în față care au fost deja programate pe partea din spate. Vă vom spune mai multe despre panoul frontal într-un articol separat.

Conectarea frontend-ului la backend

Interfața a fost conectată la backend prin notificări push. A trebuit să muncesc din greu și să-mi scriu propriul handler, dar acum informațiile de pe pagină sunt actualizate aproape instantaneu.

Ce s-a întâmplat: Interfața panoului a devenit mai simplă. L-am făcut adaptabil, iar încărcarea rapidă vă permite să îl utilizați chiar și de pe telefoanele mobile în ultimele minute înainte de decolare, fără a instala o aplicație separată pentru a lucra cu panoul.

Pasul 4. Schema de testare și migrare

Când totul a început și au trecut primele teste, s-a pus problema migrației. În primul rând, am instalat facturarea și am început să testăm funcționarea acesteia cu agentul server.

Apoi am scris un script simplu care transferă baza de date de la vechea facturare la cea nouă.

A trebuit să testez și să verific din nou totul, deoarece datele au fost îmbinate într-o bază de date nouă din trei vechi: Billmanager, VMmanager și IPmanager al managerului. Poate că migrațiile de testare sunt cel mai dificil lucru pe care l-am întâlnit în procesul de dezvoltare a unui nou panou.

După reverificare, am închis vechea facturare. Migrarea finală a datelor a fost un moment foarte tulburător, dar, slavă Domnului, a fost finalizată în câteva minute și fără probleme vizibile. Au existat erori minore pe care le-am remediat în timpul săptămânii. Majoritatea timpului a fost petrecut testând ceea ce s-a întâmplat.

Apoi am trimis scrisori clienților cu adresa noului panou și facturare și am făcut o redirecționare.

În rezumat: E VIU!

Final fericit

Încă de la primele ore de lucru ale software-ului nostru, am simțit toate deliciile tranziției. Codul era complet al nostru și cu o arhitectură convenabilă, iar interfața era curată și logică.
ISPsystem, iartă și adio! De ce și cum am scris panoul de control al serverului nostru
Prima revizuire după lansarea noului panou

Am lansat procesul de tranziție în decembrie, în ajunul Anului Nou 2017, când sarcina era cea mai mică, pentru a face tranziția mai ușoară clienților - aproape nimeni nu lucrează în ajunul sărbătorilor.

Principalul lucru pe care l-am obținut atunci când trecem la sistemul nostru (în afară de fiabilitatea generală și comoditatea) este capacitatea de a adăuga rapid funcționalități pentru clienții cheie - să fie fața lor, nu fundul lor.

Ce urmeaza?

Suntem în creștere, cantitatea de date, clienți, date despre clienți este în creștere. A trebuit să adaug un server Memcached și doi manageri de cozi cu sarcini diferite la backend. Interfața are cache și cozi proprii.

Desigur, am avut încă aventuri pe măsură ce produsul se dezvolta și devenea mai complex, de exemplu când am adăugat HighLoad.

În următorul articol vă vom spune cum a fost lansat tariful Hi-CPU: despre hardware, software, ce sarcini am rezolvat și ce am făcut.

Sursa: www.habr.com

Adauga un comentariu