ISPsystemie, wybacz i żegnaj! Dlaczego i jak napisaliśmy nasz panel kontrolny serwera

ISPsystemie, wybacz i żegnaj! Dlaczego i jak napisaliśmy nasz panel kontrolny serwera

Cześć! Jesteśmy „Hosting Technologies” i uruchomiliśmy 5 lat temu VDSina — pierwszy hosting vds stworzony specjalnie dla programistów. Staramy się, aby było to wygodne, podobnie jak DigitalOcean, ale z rosyjskim wsparciem, metodami płatności i serwerami w Rosji. Ale DigitalOcean to nie tylko niezawodność i cena, to także usługa.

Oprogramowanie od ISPsystem okazało się liną, która związała nam ręce w drodze do fajnego serwisu. Trzy lata temu korzystaliśmy z rozliczeń Billmanager i panelu kontrolnego serwera VMmanager i szybko zdaliśmy sobie sprawę, że świadczenie dobrej usługi jest prawie niemożliwe bez własnego panelu kontrolnego.

Jak ISPsystem zabił wygodę

Błędy

Nie mogliśmy sami naprawić błędu - za każdym razem musieliśmy pisać do kogoś innego i czekać. Rozwiązanie każdego problemu wymagało reakcji firmy zewnętrznej.

Wsparcie ISPsystem reagowało normalnie, ale poprawki pojawiały się dopiero po kilku wydaniach, a potem nie zawsze i nie wszystkie. Czasami krytyczne błędy były poprawiane przez kilka tygodni. Musieliśmy uspokoić klientów, przeprosić i czekać, aż ISPsystem naprawi błąd.

Zagrożenie przestojem

Aktualizacje mogą generować nieprzewidywalne przestoje, które powodują nowe błędy.

Każda aktualizacja była loterią: musiałem ukrywać rachunki i składać ofiary bogom aktualizacji - kilka razy aktualizacja powodowała przestój na 10-15 minut. Nasi administratorzy w tym czasie siedzieli z zapartym tchem - nigdy nie wiedzieliśmy, jak długo potrwa przestój i nie mogliśmy przewidzieć, kiedy ISPsystem zdecyduje się wydać nową aktualizację.

W piątej generacji Billmanager stał się lepszy, ale aby uzyskać dostęp do niezbędnych funkcji, musiałem zainstalować wersję beta, która była już aktualizowana co tydzień. Jeśli coś się zepsuło, musiałem dać dostęp innym programistom, aby mogli coś naprawić.

Niewygodny interfejs panelu

Wszystko zostało podzielone na różne panele i sterowane z różnych miejsc. Na przykład klienci płacili za pośrednictwem Billmanager i musieli zrestartować lub ponownie zainstalować VDS w VMManager. Nasi pracownicy musieli również przełączać się między oknami, aby pomóc klientowi, sprawdzić obciążenie jego serwera lub zobaczyć, jakiego systemu operacyjnego używa.

Taki interfejs wymaga czasu – zarówno naszego, jak i naszych klientów. W takiej sytuacji nie ma mowy o żadnej wygodzie, takiej jak DigitalOcean.

Krótkie cykle życia z częstymi aktualizacjami API

Napisaliśmy własne wtyczki - na przykład wtyczkę z dodatkowymi metodami płatności, których nie ma w VMManager.

W ostatnich latach VMManager miał stosunkowo krótki cykl życia, aw nowych wersjach nazwy zmiennych czy funkcji w API mogły się dowolnie zmieniać – to psuło nasze wtyczki. Wsparcie dla starszych wersji zostało szybko wycofane i wymagało aktualizacji.

Nie można modyfikować

Dokładniej, jest to możliwe, ale wyjątkowo nieefektywne. Ograniczenia licencyjne nie pozwalają na wprowadzanie zmian w kodzie źródłowym, można jedynie pisać wtyczki. Maksymalna liczba wtyczek - niektóre pozycje menu, kreator krok po kroku. ISPsystem zostały zaprojektowane z myślą o wszechstronności, ale potrzebowaliśmy specjalistycznych rozwiązań.

Decyzja o napisaniu własnego panelu była więc dojrzała. Postawiliśmy sobie cele:

  • Reaguj szybko na błędy, bugi i bądź w stanie samodzielnie je naprawić, nie zmuszając klienta do czekania.
  • Swobodnie modyfikuj interfejs pod kątem przepływów pracy i potrzeb klienta.
  • Zwiększ użyteczność dzięki przejrzystemu i zrozumiałemu projektowi.

I zaczęliśmy się rozwijać.

Nowa architektura panelu

Mamy samowystarczalny zespół programistów, więc sami napisaliśmy panel.
Główną pracę wykonało trzech inżynierów - dyrektor techniczny Sergey wymyślił architekturę i napisał agenta serwera, Alexey zajął się rozliczeniami, a front-end został zmontowany przez naszego front-end Artysha.

Krok 1: Agent serwera

Agent serwera to serwer WWW Pythona, który zarządza biblioteką libvirt, która z kolei rządzi Hiperwizor Qemu-kvm.

Agent zarządza wszystkimi usługami na serwerze: tworzeniem, zatrzymywaniem, usuwaniem vds, instalacją systemów operacyjnych, zmianą parametrów i tak dalej poprzez bibliotekę libvirt. W chwili publikacji artykułu to ponad czterdzieści różnych funkcji, które uzupełniamy w zależności od zadania i potrzeb klienta.

Teoretycznie biblioteką libvirt można sterować bezpośrednio z billingu, ale wymagało to zbyt dużej ilości dodatkowego kodu i zdecydowaliśmy się rozdzielić te funkcje między agenta i billing - billing po prostu wysyła żądania do agenta za pośrednictwem JSON API.

Agent był pierwszą rzeczą, którą zrobiliśmy, ponieważ nie wymagał żadnego interfejsu i można go było przetestować bezpośrednio z konsoli serwera.

Co dał nam agent serwera: pojawiła się warstwa ułatwiająca życie wszystkim - billing nie musi wysyłać całej masy poleceń, a jedynie złożyć wniosek. A agent zrobi wszystko, co trzeba: na przykład przydzieli miejsce na dysku i pamięć RAM.

Krok 2. Fakturowanie

Dla naszego programisty Alexa nie był to pierwszy panel kontrolny - Alex zajmuje się hostingiem od dłuższego czasu, więc ogólnie rozumiał, czego potrzebuje klient, a czego potrzebuje hoster.

Nazywamy rozliczenia między sobą „panelem kontrolnym”: zawiera on nie tylko pieniądze i usługi, ale także zarządzanie nimi, obsługę klienta i wiele więcej.

Aby przejść z oprogramowania ISPSystem, konieczne było pełne zachowanie dotychczasowej funkcjonalności dla klientów, przeniesienie wszystkich działań finansowych użytkowników ze starego bilingu na nowy, a także wszystkich usług i połączeń między nimi. Przyjrzeliśmy się temu, co jest w obecnym produkcie, potem rozwiązania konkurencji, głównie DO i Vultr. Przyjrzeliśmy się wadom i zaletom, zebraliśmy opinie od osób, które pracowały ze starymi produktami ISPsystem.

W nowym rozliczeniu zastosowano dwa stosy: klasyczny PHP, MySQL (w przyszłości planowane jest przejście na PostgreSQL), Yii2 jako framework na backendzie oraz VueJS na froncie. Stosy działają niezależnie od siebie, są tworzone przez różne osoby i komunikują się za pomocą JSON API. Do rozwoju wtedy i teraz używamy PHPStorm и burza internetowa z JetBrains i bardzo je kocham (hej chłopaki!)

Panel zaprojektowany jest modułowo: moduły systemu płatności, moduł rejestratora domen czy np. moduł certyfikatu SSL. Możesz łatwo dodać nową funkcję lub usunąć starą. Podstawę pod rozbudowę kładzie się architektonicznie, także w kierunku przeciwnym, „w stronę sprzętu”.
ISPsystemie, wybacz i żegnaj! Dlaczego i jak napisaliśmy nasz panel kontrolny serwera
Co dostaliśmy: panel sterowania, nad którym mamy pełną kontrolę. Teraz błędy są naprawiane w ciągu godzin, a nie tygodni, a nowe funkcje są wdrażane na życzenie klientów, a nie na żądanie ISPSystem.

Krok 3 Interfejs

ISPsystemie, wybacz i żegnaj! Dlaczego i jak napisaliśmy nasz panel kontrolny serwera
Interfejs jest dziełem naszego zespołu.

Najpierw przyjrzeliśmy się, co by się stało, gdybyśmy stworzyli dodatek do interfejsu API ISPsystem bez fundamentalnej zmiany czegokolwiek w interfejsie. Okazało się tak sobie i postanowiliśmy zrobić wszystko od zera.

Wierzyliśmy, że najważniejsze jest, aby interfejs był logiczny, z czystym i minimalistycznym designem, a wtedy otrzymamy piękny panel. Rozmieszczenie elementów zostało omówione w Megaplan, a interfejs, który użytkownicy widzą teraz w panelu sterowania, będzie się stopniowo rodził.

Projekt strony rozliczeniowej pojawił się jako pierwszy, ponieważ wykonaliśmy już wtyczki płatnicze dla ISPsystem.

Interfejs użytkownika

Postanowili zrobić z panelu aplikację SPA - niewymagającą zasobów i szybko ładującą dane. Nasz front-end Artysh postanowił napisać to na Vue — w tym czasie właśnie pojawił się Vue. Założyliśmy, że framework będzie się dynamicznie rozwijał, podobnie jak React, po jakimś czasie społeczność Vue się powiększy i pojawi się morze bibliotek. Postawiliśmy na Vue i nie żałowaliśmy - teraz niewiele czasu zajmuje dodanie nowych funkcji do frontu, które zostały już zaprogramowane na backendzie. Więcej o panelu przednim opowiemy w osobnym artykule.

Łączenie frontendu z backendem

Frontend był połączony z backendem za pomocą powiadomień push. Musiałem ciężko pracować i napisać własny program obsługi, ale teraz informacje na stronie są aktualizowane niemal natychmiast.

Co się stało: Interfejs panelu stał się prostszy. Zrobiliśmy go adaptacyjnym, a szybkie ładowanie pozwala na korzystanie z niego nawet z telefonów komórkowych w ostatnich minutach przed startem, bez instalowania osobnej aplikacji do pracy z panelem.

Krok 4. Schemat testowania i migracji

Gdy wszystko ruszyło i pierwsze testy przeszły pomyślnie, pojawiła się kwestia migracji. Przede wszystkim zainstalowaliśmy billing i zaczęliśmy testować jego działanie z agentem serwera.

Następnie napisaliśmy prosty skrypt, który przenosi bazę danych ze starego bilingu na nowy.

Musiałem przetestować i sprawdzić dosłownie wszystko, ponieważ dane zostały scalone w jedną nową bazę danych z trzech starych: Billmanager, VMmanager i IPmanager managera. Być może migracje testowe to najtrudniejsza rzecz, z jaką spotkaliśmy się w procesie tworzenia nowego panelu.

Po ponownym sprawdzeniu zamknęliśmy stare rozliczenia. Ostatnia migracja danych była bardzo niepokojącym momentem, ale dzięki Bogu zakończyła się w kilka minut i bez zauważalnych problemów. Były drobne błędy, które naprawiliśmy w ciągu tygodnia. Większość czasu poświęcono na sprawdzanie, co się stało.

Następnie wysłaliśmy listy do klientów z adresem nowego panelu i bilingiem oraz wykonaliśmy przekierowanie.

W skrócie: TO ŻYJE!

Szczęśliwe zakończenie

Od pierwszych godzin pracy naszego oprogramowania odczuliśmy wszystkie uroki przejścia. Kod był całkowicie nasz i miał wygodną architekturę, a interfejs był przejrzysty i logiczny.
ISPsystemie, wybacz i żegnaj! Dlaczego i jak napisaliśmy nasz panel kontrolny serwera
Pierwsza recenzja po uruchomieniu nowego panelu

Proces przejścia rozpoczęliśmy w grudniu, w przeddzień Nowego Roku 2017, kiedy obciążenie było najmniejsze, aby ułatwić klientom przejście – prawie nikt nie pracuje w przeddzień świąt.

Najważniejsze, co otrzymaliśmy przechodząc na nasz system (poza ogólną niezawodnością i wygodą) to możliwość szybkiego dodania funkcjonalności dla kluczowych klientów – bycia ich twarzą, a nie tyłkiem.

Co dalej?

Rośniemy, rośnie ilość danych, klientów, danych klientów. Musiałem dodać serwer Memcached i dwa menedżery kolejek z różnymi zadaniami do backendu. Frontend ma buforowanie i własne kolejki.

Oczywiście wciąż przeżywaliśmy przygody, gdy produkt rozwijał się i stawał się coraz bardziej złożony, na przykład kiedy dodaliśmy HighLoad.

W następnym artykule opowiemy, jak została uruchomiona taryfa Hi-CPU: o sprzęcie, oprogramowaniu, jakie zadania rozwiązaliśmy i co zrobiliśmy.

Źródło: www.habr.com

Dodaj komentarz