ISPsystem, magpatawad at paalam! Bakit at paano namin isinulat ang aming control panel ng server

ISPsystem, magpatawad at paalam! Bakit at paano namin isinulat ang aming control panel ng server

Kamusta! Kami ay "Hosting Technologies" at inilunsad 5 taon na ang nakakaraan VDSina β€” ang unang vds hosting na partikular na nilikha para sa mga developer. Nagsusumikap kaming gawin itong maginhawa, tulad ng DigitalOcean, ngunit may suporta sa Russia, mga paraan ng pagbabayad at mga server sa Russia. Ngunit ang DigitalOcean ay hindi lamang pagiging maaasahan at presyo, ito rin ay isang serbisyo.

Ang software mula sa ISPsystem ay naging isang lubid na nagtali sa aming mga kamay patungo sa isang cool na serbisyo. Tatlong taon na ang nakalipas, ginamit namin ang Billmanager billing at ang VMmanager server control panel at mabilis na napagtanto na halos imposibleng magbigay ng magandang serbisyo nang wala ang aming sariling control panel.

Paano Napatay ng ISPsystem ang Convenience

Mga bug

Hindi namin maaayos ang bug mismo - sa bawat oras na kailangan naming sumulat sa suporta ng ibang tao at maghintay. Ang solusyon sa anumang problema ay nangangailangan ng tugon ng isang third-party na kumpanya.

Ang suporta sa ISPsystem ay normal na tumugon, ngunit ang mga pag-aayos ay dumating lamang pagkatapos ng ilang paglabas, at pagkatapos ay hindi palaging at hindi lahat. Minsan ang mga kritikal na bug ay naitama sa loob ng ilang linggo. Kinailangan naming bigyan ng katiyakan ang mga customer, humingi ng paumanhin at maghintay para sa ISPsystem na ayusin ang bug.

Banta sa Downtime

Ang mga update ay maaaring makabuo ng mga hindi nahuhulaang downtime na nagdulot ng mga bagong error.

Ang bawat pag-update ay isang lottery: Kinailangan kong pagtakpan ang pagsingil at magsakripisyo sa mga diyos ng mga update - ilang beses na nagdulot ng downtime ang pag-update sa loob ng 10-15 minuto. Ang aming mga admin sa oras na ito ay nakaupo sa kanilang mga mata - hindi namin alam kung gaano katagal ang downtime at hindi mahuhulaan kung kailan magpasya ang ISPsystem na maglabas ng bagong update.

Sa ikalimang henerasyon, naging mas mahusay ang Billmanager, ngunit para makakuha ng access sa mga kinakailangang feature, kinailangan kong mag-install ng beta, na ina-update na bawat linggo. Kung may nasira, kailangan kong magbigay ng access sa ibang mga developer para may ayusin sila.

Hindi maginhawang interface ng panel

Ang lahat ay nahahati sa iba't ibang mga panel at kinokontrol mula sa iba't ibang lugar. Halimbawa, nagbayad ang mga customer sa pamamagitan ng Billmanager, at kinailangan nilang i-reboot o muling i-install ang VDS sa VMManager. Kinailangan din ng aming staff na lumipat sa pagitan ng mga bintana upang matulungan ang isang kliyente, suriin ang pag-load sa kanyang server, o tingnan kung anong OS ang ginagamit niya.

Ang ganitong interface ay tumatagal ng oras - pareho sa amin at sa aming mga kliyente. Walang tanong ng anumang kaginhawahan, tulad ng DigitalOcean, sa ganoong sitwasyon.

Mga maikling lifecycle na may madalas na pag-update ng API

Sumulat kami ng sarili naming mga plugin - halimbawa, isang plugin na may mga karagdagang paraan ng pagbabayad na wala sa VMManager.

Sa mga nakalipas na taon, ang VMManager ay may medyo maikling ikot ng buhay, at sa mga bagong bersyon, ang mga pangalan ng mga variable o function sa API ay maaaring magbago nang basta-basta - sinira nito ang aming mga plugin. Ang suporta para sa mga mas lumang bersyon ay mabilis na inalis at kailangang i-update.

Hindi mabago

Mas tiyak, ito ay posible, ngunit lubhang hindi epektibo. Ang mga paghihigpit sa lisensya ay hindi nagpapahintulot sa iyo na gumawa ng mga pagbabago sa source code, maaari ka lamang magsulat ng mga plugin. Mga maximum na plugin - ilang item sa menu, isang step-by-step na wizard. Ang ISPsystem ay idinisenyo para sa versatility, ngunit kailangan namin ng mga espesyal na solusyon.

Kaya't ang desisyon ay hinog na upang magsulat ng sarili kong panel. Nagtakda kami ng mga layunin:

  • Mabilis na tumugon sa mga error, bug at magawang ayusin ang mga ito nang hindi hinintay ang kliyente.
  • Malayang baguhin ang interface para sa mga workflow at pangangailangan ng kliyente.
  • Dagdagan ang kakayahang magamit gamit ang isang malinis at maliwanag na disenyo.

At sinimulan namin ang pag-unlad.

Bagong Arkitektura ng Panel

Mayroon kaming self-sufficient development team, kaya kami mismo ang sumulat ng panel.
Ang pangunahing gawain ay ginawa ng tatlong inhinyero - ang teknikal na direktor na si Sergey ay dumating sa arkitektura at isinulat ang ahente ng server, ginawa ni Alexey ang pagsingil, at ang front-end ay binuo ng aming front-ender na si Artysh.

Hakbang 1: Ahente ng Server

Ang server agent ay isang python web server na namamahala sa library libog, na namamahala naman Qemu-kvm hypervisor.

Pinamamahalaan ng ahente ang lahat ng mga serbisyo sa server: paglikha, paghinto, pagtanggal ng mga vd, pag-install ng mga operating system, pagbabago ng mga parameter, at iba pa sa pamamagitan ng libvirt library. Sa oras ng paglalathala ng artikulo, ang mga ito ay higit sa apatnapung iba't ibang mga pag-andar, na aming suplemento depende sa gawain at mga pangangailangan ng kliyente.

Sa teorya, ang libvirt ay maaaring direktang kontrolin mula sa pagsingil, ngunit nangangailangan ito ng masyadong maraming karagdagang code at nagpasya kaming paghiwalayin ang mga function na ito sa pagitan ng ahente at pagsingil - ang pagsingil ay gumagawa lamang ng mga kahilingan sa ahente sa pamamagitan ng JSON API.

Ang ahente ang una naming ginawa, dahil hindi ito nangangailangan ng anumang interface at posible itong subukan nang direkta mula sa console ng server.

Ang ibinigay sa amin ng ahente ng server: lumitaw ang isang layer na nagpapasimple sa buhay para sa lahat - hindi kailangang magpadala ng isang buong grupo ng mga command ang pagsingil, ngunit humiling lamang. At gagawin ng ahente ang lahat ng kailangan: halimbawa, maglalaan ito ng puwang sa disk at RAM.

Hakbang 2. Pagsingil

Para sa aming developer na si Alex, hindi ito ang unang control panel - Matagal nang nagho-host si Alex, kaya karaniwang naiintindihan niya kung ano ang kailangan ng kliyente at kung ano ang kailangan ng host.

Tinatawag namin ang pagsingil sa aming sarili bilang isang "control panel": naglalaman ito hindi lamang ng pera at mga serbisyo, kundi pati na rin ang kanilang pamamahala, suporta sa customer at marami pa.

Upang lumipat mula sa ISPSystem software, kinakailangan upang ganap na mapanatili ang nakaraang pag-andar para sa mga customer, ilipat ang lahat ng mga pinansiyal na aksyon ng mga user mula sa lumang pagsingil patungo sa bago, pati na rin ang lahat ng mga serbisyo at koneksyon sa pagitan nila. Pinag-aralan namin kung ano ang nasa kasalukuyang produkto, pagkatapos ay ang mga solusyon ng mga kakumpitensya, pangunahin ang DO at Vultr. Tiningnan namin ang mga kawalan at pakinabang, nakolekta ang feedback mula sa mga taong nagtrabaho sa mga lumang produkto mula sa ISPsystem.

Ang bagong pagsingil ay gumamit ng dalawang stack: classic PHP, MySQL (at sa hinaharap ay binalak itong lumipat sa PostgreSQL), Yii2 bilang isang framework sa backend at VueJS sa harap. Ang mga stack ay gumagana nang hiwalay sa isa't isa, binuo ng iba't ibang tao, at nakikipag-usap gamit ang JSON API. Para sa kaunlaran noon at ngayon ay ginagamit natin PHPStorm ΠΈ webstorm mula sa JetBrains at mahal na mahal sila (hey guys!)

Idinisenyo ang panel sa isang modular na batayan: mga module ng sistema ng pagbabayad, module ng registrar ng domain o, halimbawa, isang module ng SSL certificate. Madali kang makakapagdagdag ng bagong feature o makakapag-alis ng luma. Ang batayan para sa pagpapalawak ay inilatag sa arkitektura, kabilang ang sa kabaligtaran na direksyon, "patungo sa hardware".
ISPsystem, magpatawad at paalam! Bakit at paano namin isinulat ang aming control panel ng server
Ano ang nakuha namin: isang control panel kung saan mayroon kaming ganap na kontrol. Ngayon ang mga bug ay naayos sa mga oras, hindi linggo, at ang mga bagong feature ay ipinapatupad sa kahilingan ng mga customer, at hindi sa kahilingan ng ISPSystem.

Hakbang 3 Interface

ISPsystem, magpatawad at paalam! Bakit at paano namin isinulat ang aming control panel ng server
Ang interface ay brainchild ng aming team.

Una, tiningnan namin kung ano ang mangyayari kung gagawa kami ng add-on sa ISPsystem API nang hindi binago ang anumang bagay sa interface. Ito ay naging kaya-kaya at nagpasya kaming gawin ang lahat mula sa simula.

Naniniwala kami na ang pangunahing bagay ay gawing lohikal ang interface, na may malinis at minimalistic na disenyo, at pagkatapos ay makakakuha kami ng magandang panel. Ang lokasyon ng mga elemento ay tinalakay sa Megaplan at ang interface na nakikita ng mga user sa control panel ngayon ay unti-unting isisilang.

Ang disenyo ng page ng pagsingil ang unang lumabas, dahil nakagawa na kami ng mga plugin ng pagbabayad para sa ISPsystem.

Frontend

Nagpasya silang gawing SPA application ang panel - hindi hinihingi sa mga mapagkukunan at may mabilis na paglo-load ng data. Ang aming front-ender na si Artysh ay nagpasya na isulat ito sa Vue β€” sa oras na iyon ay kalalabas lang ng Vue. Ipinapalagay namin na dynamic na bubuo ang framework, tulad ng React, pagkalipas ng ilang panahon ay lalago ang komunidad ng Vue at lilitaw ang isang dagat ng mga aklatan. Tumaya kami sa Vue at hindi nagsisisi - ngayon ay nangangailangan ng kaunting oras upang magdagdag ng mga bagong function sa harap na na-program na sa likod na dulo. Sasabihin namin sa iyo ang higit pa tungkol sa front-end panel sa isang hiwalay na artikulo.

Pagkonekta sa frontend sa backend

Nakakonekta ang frontend sa backend sa pamamagitan ng mga push notification. Kinailangan kong magtrabaho nang husto at magsulat ng sarili kong handler, ngunit ngayon ang impormasyon sa pahina ay na-update halos kaagad.

Anong nangyari: Ang interface ng panel ay naging mas simple. Ginawa namin itong adaptive, at ang mabilis na pag-load ay nagbibigay-daan sa iyo na gamitin ito kahit na mula sa mga mobile phone sa mga huling minuto bago mag-takeoff, nang hindi nag-i-install ng hiwalay na application upang gumana sa panel.

Hakbang 4. Pagsubok at pamamaraan ng paglipat

Nang magsimula ang lahat at lumipas ang mga unang pagsubok, bumangon ang tanong ng migrasyon. Una sa lahat, nag-install kami ng pagsingil at nagsimulang subukan ang pagpapatakbo nito sa ahente ng server.

Pagkatapos ay nagsulat kami ng isang simpleng script na naglilipat ng database mula sa lumang pagsingil patungo sa bago.

Kinailangan kong subukan at suriin muli nang literal ang lahat, dahil ang data ay pinagsama sa isang bagong database mula sa tatlong luma: Billmanager, VMmanager at IPmanager ng manager. Marahil ang mga pagsubok na paglilipat ay ang pinakamahirap na bagay na nakatagpo namin sa proseso ng pagbuo ng isang bagong panel.

Pagkatapos suriin muli, isinara namin ang lumang pagsingil. Ang panghuling paglipat ng data ay isang napaka-troubling sandali, ngunit, salamat sa Diyos, ito ay natapos sa loob ng ilang minuto at walang kapansin-pansing mga problema. May mga maliliit na bug na naayos namin sa loob ng linggo. Karamihan sa mga oras ay ginugol sa pagsubok kung ano ang nangyari.

Pagkatapos ay nagpadala kami ng mga liham sa mga kliyente na may address ng bagong panel at pagsingil at gumawa ng pag-redirect.

Sa buod: ITO'Y BUHAY!

Masayang pagtatapos

Mula sa mga unang oras ng trabaho ng aming software, naramdaman namin ang lahat ng kasiyahan ng paglipat. Ang code ay ganap sa amin at may maginhawang arkitektura, at ang interface ay malinis at lohikal.
ISPsystem, magpatawad at paalam! Bakit at paano namin isinulat ang aming control panel ng server
Unang pagsusuri pagkatapos ng paglunsad ng bagong panel

Inilunsad namin ang proseso ng paglipat noong Disyembre, sa bisperas ng Bagong Taon 2017, kung kailan pinakamaliit ang pag-load, upang gawing mas madali ang paglipat para sa mga customer - halos walang nagtatrabaho sa bisperas ng mga pista opisyal.

Ang pangunahing bagay na nakuha namin kapag lumipat sa aming system (bukod sa pangkalahatang pagiging maaasahan at kaginhawahan) ay ang kakayahang mabilis na magdagdag ng functionality para sa mga pangunahing customer - upang maging kanilang mukha, hindi ang kanilang asno.

Ano ang susunod?

Kami ay lumalaki, ang dami ng data, mga customer, data ng customer ay lumalaki. Kinailangan kong magdagdag ng isang Memcached server at dalawang tagapamahala ng pila na may magkakaibang mga gawain sa backend. Ang frontend ay may caching at sarili nitong mga pila.

Siyempre, nagkaroon pa rin kami ng mga pakikipagsapalaran habang ang produkto ay nabuo at naging mas kumplikado, halimbawa noong nagdagdag kami ng HighLoad.

Sa susunod na artikulo, sasabihin namin sa iyo kung paano inilunsad ang taripa ng Hi-CPU: tungkol sa hardware, software, anong mga gawain ang nalutas namin at kung ano ang aming ginawa.

Pinagmulan: www.habr.com

Magdagdag ng komento