ISP tizimi, kechiring va xayr! Nima uchun va qanday qilib biz server boshqaruv panelini yozdik

ISP tizimi, kechiring va xayr! Nima uchun va qanday qilib biz server boshqaruv panelini yozdik

Salom! Biz "Hosting Technologies"miz va 5 yil oldin ishga tushirilganmiz VDSina — ishlab chiquvchilar uchun maxsus yaratilgan birinchi vds hosting. Biz buni DigitalOcean kabi qulay qilishga intilamiz, lekin Rossiya ko‘magi, to‘lov usullari va Rossiyadagi serverlari bilan. Ammo DigitalOcean nafaqat ishonchlilik va narx, balki xizmatdir.

ISPsystem dasturiy ta'minoti ajoyib xizmat yo'lida qo'limizni bog'laydigan arqon bo'lib chiqdi. Uch yil oldin biz Billmanager billing va VMmanager server boshqaruv panelidan foydalanganmiz va o‘z boshqaruv panelimizsiz yaxshi xizmat ko‘rsatish deyarli imkonsiz ekanligini tezda anglab yetdik.

Qanday qilib ISP tizimi qulaylikni o'ldirdi

Xatolar

Xatoni o'zimiz tuzata olmadik - har safar boshqa birovning yordamiga yozishimiz va kutishimiz kerak edi. Har qanday muammoni hal qilish uchinchi tomon kompaniyasining javobini talab qildi.

ISP tizimini qo'llab-quvvatlash an'anaviy tarzda javob berdi, lekin tuzatishlar faqat bir nechta relizlardan so'ng amalga oshirildi, keyin har doim ham emas, hammasi ham emas. Ba'zida tanqidiy xatolar bir necha hafta davomida tuzatildi. Biz mijozlarni ishontirishimiz, uzr so‘rashimiz va ISPsystem xatolikni tuzatishini kutishimiz kerak edi.

To'xtab qolish xavfi

Yangilanishlar yangi xatolarni keltirib chiqaradigan oldindan aytib bo'lmaydigan uzilishlarni keltirib chiqarishi mumkin.

Har bir yangilanish lotereya edi: men hisob-kitoblarni yashirishim va yangilanishlar xudolariga qurbonlik qilishim kerak edi - bir necha marta yangilanish 10-15 daqiqa davomida ishlamay qolishga olib keldi. O'sha paytda bizning administratorlarimiz o'z ko'zlari bilan o'tirishdi - biz uzilishlar qancha davom etishini hech qachon bilmasdik va ISPsystem yangi yangilanishni qachon chiqarishga qaror qilishini oldindan aytib bera olmadik.

Beshinchi avlodda Billmanager yaxshilandi, ammo kerakli xususiyatlarga kirish uchun men har hafta yangilanib turadigan beta-versiyasini o'rnatishim kerak edi. Agar biror narsa buzilgan bo'lsa, men boshqa ishlab chiquvchilarga biror narsani tuzatishi uchun ruxsat berishim kerak edi.

Noqulay panel interfeysi

Har bir narsa turli panellarga bo'lingan va turli joylardan nazorat qilingan. Misol uchun, mijozlar Billmanager orqali to'lashdi va ular VMManager-da VDS-ni qayta ishga tushirishlari yoki qayta o'rnatishlari kerak edi. Bizning xodimlarimiz mijozga yordam berish, uning serveridagi yukni tekshirish yoki qaysi OS ishlatayotganini ko'rish uchun oynalar o'rtasida almashishlari kerak edi.

Bunday interfeys vaqt talab etadi - ham bizning, ham mijozlarimiz. Bunday vaziyatda DigitalOcean kabi hech qanday qulaylik haqida gap bo'lmaydi.

Tez-tez API yangilanishi bilan qisqa umr tsikllari

Biz o'z plaginlarimizni yozdik - masalan, VMManager-da bo'lmagan qo'shimcha to'lov usullariga ega plagin.

So'nggi yillarda VMManager nisbatan qisqa hayot aylanishiga ega edi va yangi versiyalarda APIdagi o'zgaruvchilar yoki funktsiyalarning nomlari o'zboshimchalik bilan o'zgarishi mumkin edi - bu bizning plaginlarimizni buzdi. Eski versiyalarni qo'llab-quvvatlash tezda to'xtatildi va yangilanishi kerak edi.

O‘zgartirib bo‘lmaydi

Aniqrog'i, bu mumkin, lekin juda samarasiz. Litsenziya cheklovlari manba kodiga o'zgartirish kiritishga imkon bermaydi, siz faqat plaginlarni yozishingiz mumkin. Maksimal plaginlar - ba'zi menyu elementlari, bosqichma-bosqich sehrgar. ISP tizimi ko'p qirrali bo'lishi uchun yaratilgan, ammo bizga maxsus echimlar kerak edi.

Shunday qilib, o'z panelimni yozishga qaror qildim. Biz maqsadlar qo'ydik:

  • Xatolar, xatolarga tezda javob bering va mijozni kutmasdan ularni o'zingiz tuzating.
  • Ish oqimlari va mijoz ehtiyojlari uchun interfeysni erkin o'zgartiring.
  • Toza va tushunarli dizayn bilan foydalanish imkoniyatini oshiring.

Va biz rivojlanishni boshladik.

Yangi panel arxitekturasi

Bizda o'z-o'zini rivojlantirish guruhi bor, shuning uchun panelni o'zimiz yozdik.
Asosiy ishni uchta muhandis amalga oshirdi - CTO Sergey arxitektura bilan chiqdi va server agentini yozdi, Aleksey hisob-kitob qildi va frontendni bizning fronterimiz Artysh yig'di.

1-qadam: Server agenti

Server agenti kutubxonani boshqaradigan python veb-serveridir libvirt, bu esa o'z navbatida boshqaradi Qemu-kvm gipervisor.

Agent serverdagi barcha xizmatlarni boshqaradi: libvirt kutubxonasi orqali vds yaratish, to'xtatish, o'chirish, operatsion tizimlarni o'rnatish, parametrlarni o'zgartirish va hokazo. Maqola nashr etilganda, bu qirqdan ortiq turli funktsiyalar bo'lib, biz mijozning vazifasi va ehtiyojlariga qarab to'ldiramiz.

Nazariy jihatdan, libvirtni toʻgʻridan-toʻgʻri billing orqali boshqarish mumkin edi, lekin bu juda koʻp qoʻshimcha kodni talab qildi va biz bu funksiyalarni agent va billing oʻrtasida ajratishga qaror qildik – billing JSON API orqali agentga soʻrovlar yuboradi.

Agent biz qilgan birinchi ish, chunki u hech qanday interfeysni talab qilmagan va uni to'g'ridan-to'g'ri server konsolidan sinab ko'rish mumkin edi.

Server agenti bizga nima berdi: hamma uchun hayotni soddalashtiradigan qatlam paydo bo'ldi - hisob-kitob qilish uchun bir nechta buyruqlar yuborish kerak emas, faqat so'rov yuborish kerak. Va agent zarur bo'lgan hamma narsani qiladi: masalan, u disk maydoni va RAMni ajratadi.

2-qadam. Hisob-kitob

Bizning dasturchimiz Aleks uchun bu birinchi boshqaruv paneli emas edi - Aleks uzoq vaqtdan beri hosting bilan shug'ullanadi, shuning uchun u umuman mijozga nima kerakligini va hosterga nima kerakligini tushundi.

Biz billingni o'zimiz "boshqaruv paneli" deb ataymiz: u nafaqat pul va xizmatlarni, balki ularni boshqarish, mijozlarni qo'llab-quvvatlash va boshqalarni o'z ichiga oladi.

ISPSystem dasturiy ta'minotidan o'tish uchun mijozlar uchun avvalgi funksionallikni to'liq saqlab qolish, foydalanuvchilarning barcha moliyaviy harakatlarini eski hisob-kitobdan yangisiga, shuningdek, ular o'rtasidagi barcha xizmatlar va ulanishlarni o'tkazish kerak edi. Biz joriy mahsulotda nima borligini, so'ngra raqobatchilarning, asosan DO va Vultrning echimlarini o'rgandik. Biz kamchiliklar va afzalliklarni ko'rib chiqdik, ISPsystem'dan eski mahsulotlar bilan ishlagan odamlarning fikr-mulohazalarini to'pladik.

Yangi hisob-kitobda ikkita stek ishlatilgan: klassik PHP, MySQL (va kelajakda PostgreSQL-ga o'tish rejalashtirilgan), orqa tomonda ramka sifatida Yii2 va old tomonda VueJS. Staklar bir-biridan mustaqil ishlaydi, turli odamlar tomonidan ishlab chiqiladi va JSON API yordamida muloqot qiladi. Rivojlanish uchun o'sha paytda va hozir foydalanamiz PHPStorm и Veb -bo'ron JetBrains-dan va ularni juda yaxshi ko'raman (salom bolalar!)

Panel modulli asosda ishlab chiqilgan: to'lov tizimining modullari, domen ro'yxatga oluvchi moduli yoki, masalan, SSL sertifikat moduli. Siz osongina yangi xususiyatni qo'shishingiz yoki eskisini olib tashlashingiz mumkin. Kengaytirish uchun zamin me'moriy jihatdan, shu jumladan, qarama-qarshi yo'nalishda, "apparat tomon" yotqizilgan.
ISP tizimi, kechiring va xayr! Nima uchun va qanday qilib biz server boshqaruv panelini yozdik
Biz nima oldik: biz to'liq nazorat qiladigan boshqaruv paneli. Endi xatolar haftalar emas, soatlar ichida tuzatiladi va yangi funksiyalar ISPSystem talabiga binoan emas, balki mijozlar talabiga binoan amalga oshiriladi.

3-qadam Interfeys

ISP tizimi, kechiring va xayr! Nima uchun va qanday qilib biz server boshqaruv panelini yozdik
Interfeys - bu bizning jamoaviy fikrimiz.

Birinchidan, biz interfeysda hech narsani tubdan o'zgartirmasdan ISPsystem API orqali qo'shimchani yaratsak nima bo'lishini ko'rib chiqdik. Bu shunday bo'ldi va biz hamma narsani noldan qilishga qaror qildik.

Biz asosiy narsa interfeysni mantiqiy, toza va minimalist dizayn bilan qilish, keyin biz chiroyli panelga ega bo'lamiz deb ishondik. Elementlarning joylashuvi Megaplanda muhokama qilindi va endi foydalanuvchilar boshqaruv panelida ko'radigan interfeys asta-sekin tug'iladi.

Billing sahifasining dizayni birinchi bo'lib paydo bo'ldi, chunki biz allaqachon ISPsystem uchun to'lov plaginlarini yaratganmiz.

Foydalanuvchi interfeysi

Ular panelni SPA ilovasiga aylantirishga qaror qilishdi - resurslarga talab qilmaydigan va ma'lumotlarni tez yuklash. Bizning oldingi ishtirokchimiz Artysh buni Vue-da yozishga qaror qildi - o'sha paytda Vue endigina paydo bo'lgan edi. Biz ramka React singari dinamik ravishda rivojlanadi deb taxmin qilgandik, bir muncha vaqt o'tgach, Vue hamjamiyati o'sib boradi va kutubxonalar dengizi paydo bo'ladi. Biz Vue-ga pul tikdik va bundan afsuslanmadik - endi old qismga backendda dasturlashtirilgan yangi funksiyalarni qo'shish uchun oz vaqt kerak bo'ladi. Old panel haqida batafsil ma'lumotni alohida maqolada aytib beramiz.

Frontendni orqa qismga ulash

Frontend orqa qismga push-bildirishnomalar orqali ulangan. Men qattiq mehnat qilishim va o'z ishlovchimni yozishim kerak edi, lekin hozir sahifadagi ma'lumotlar deyarli bir zumda yangilanadi.

Nima bo'ldi: Panel interfeysi soddalashdi. Biz uni moslashtirdik va tez yuklash, panel bilan ishlash uchun alohida dasturni o'rnatmasdan, hatto parvozdan oldin so'nggi daqiqalarda mobil telefonlardan foydalanish imkonini beradi.

Qadam 4. Sinov va migratsiya sxemasi

Hamma narsa boshlanganda va birinchi sinovlar o'tganida, migratsiya masalasi paydo bo'ldi. Avvalo, biz billingni o'rnatdik va uning ishlashini server agenti bilan sinab ko'rishni boshladik.

Keyin biz ma'lumotlar bazasini eski hisob-kitobdan yangisiga o'tkazadigan oddiy skriptni yozdik.

Men hamma narsani sinab ko'rishim va qayta tekshirishim kerak edi, chunki ma'lumotlar uchta eski ma'lumotlar bazasidan bitta yangi ma'lumotlar bazasiga birlashtirildi: Billmanager, VMmanager va menejerning IPmanager. Ehtimol, sinov migratsiyalari yangi panelni ishlab chiqish jarayonida duch kelgan eng qiyin narsadir.

Qayta tekshirgandan so'ng, biz eski hisob-kitobni yopdik. Yakuniy ma'lumotlar ko'chishi juda tashvishli daqiqa edi, lekin Xudoga shukur, u bir necha daqiqada va sezilarli muammolarsiz yakunlandi. Hafta davomida biz tuzatgan kichik xatolar bor edi. Ko'p vaqt nima bo'lganini sinab ko'rishga sarflandi.

Keyin biz mijozlarga yangi panel va hisob-kitob manzili ko'rsatilgan xatlar yubordik va qayta yo'naltirishni amalga oshirdik.

Natijada: U TIRIK!

Baxtli xotima

Bizning dasturiy ta'minotimiz ishlagan dastlabki soatlardan boshlab biz o'tishning barcha zavqlarini his qildik. Kod butunlay bizniki va qulay arxitekturaga ega edi va interfeys toza va mantiqiy edi.
ISP tizimi, kechiring va xayr! Nima uchun va qanday qilib biz server boshqaruv panelini yozdik
Yangi panel ishga tushirilgandan keyin birinchi ko'rib chiqish

Biz o'tish jarayonini dekabr oyida, yangi 2017 yil arafasida, eng kam yuk bo'lgan vaqtda, mijozlar uchun o'tishni osonlashtirish uchun boshladik - bayramlar arafasida deyarli hech kim ishlamaydi.

Bizning tizimimizga o'tishda biz olgan asosiy narsa (umumiy ishonchlilik va qulaylikdan tashqari) asosiy mijozlar uchun tezkor funktsiyalarni qo'shish qobiliyati - ularning eshagi emas, balki ularning yuzi bo'lish.

Keyin nima?

Biz o'sib bormoqdamiz, ma'lumotlar miqdori, mijozlar, mijozlar ma'lumotlari o'sib bormoqda. Memcached serverini va turli vazifalarga ega ikkita navbat menejerini backendga qo'shishim kerak edi. Frontend keshlash va o'z navbatlariga ega.

Albatta, mahsulot ishlab chiqilgan va murakkablashgan sarguzashtlarga duch keldik, masalan, HighLoad-ni qo'shganimizda.

Keyingi maqolada sizga Hi-CPU tarifi qanday ishga tushirilganligini aytib beramiz: apparat, dasturiy ta'minot, qanday vazifalarni hal qildik va nima qildik.

Manba: www.habr.com

a Izoh qo'shish