Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kawalan pelayan kami

Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kawalan pelayan kami

hello! Kami adalah "Teknologi Pengehosan" dan dilancarkan 5 tahun lalu VDSina β€” pengehosan vd pertama yang dibuat khusus untuk pembangun. Kami berusaha untuk menjadikannya mudah, seperti DigitalOcean, tetapi dengan sokongan Rusia, kaedah pembayaran dan pelayan di Rusia. Tetapi DigitalOcean bukan sahaja kebolehpercayaan dan harga, ia juga merupakan perkhidmatan.

Perisian dari ISPsystem ternyata menjadi tali yang mengikat tangan kami dalam perjalanan ke perkhidmatan yang hebat. Tiga tahun lalu, kami menggunakan pengebilan Billmanager dan panel kawalan pelayan VMmanager dan dengan cepat menyedari bahawa hampir mustahil untuk menyediakan perkhidmatan yang baik tanpa panel kawalan kami sendiri.

Bagaimana Sistem ISP Membunuh Keselesaan

Pepijat

Kami tidak dapat membetulkan pepijat itu sendiri - setiap kali kami perlu menulis kepada sokongan orang lain dan menunggu. Penyelesaian kepada sebarang masalah memerlukan respons daripada syarikat pihak ketiga.

Sokongan sistem ISP bertindak balas secara normal, tetapi pembetulan datang hanya selepas beberapa keluaran, dan kemudian tidak selalu dan bukan semua. Kadangkala pepijat kritikal telah diperbetulkan selama beberapa minggu. Kami terpaksa meyakinkan pelanggan, memohon maaf dan menunggu sistem ISP membetulkan pepijat.

Ancaman Masa Henti

Kemas kini boleh menjana masa henti yang tidak dapat diramalkan yang mencetuskan ralat baharu.

Setiap kemas kini adalah loteri: Saya terpaksa menutup pengebilan dan membuat pengorbanan kepada dewa kemas kini - beberapa kali kemas kini menyebabkan masa berhenti selama 10-15 minit. Pentadbir kami pada masa ini memerhatikan mereka - kami tidak pernah tahu berapa lama masa henti akan berlangsung dan tidak dapat meramalkan bila ISPsystem akan memutuskan untuk mengeluarkan kemas kini baharu.

Pada generasi kelima, Billmanager menjadi lebih baik, tetapi untuk mendapatkan akses kepada ciri yang diperlukan, saya terpaksa memasang beta, yang telah dikemas kini setiap minggu. Jika ada masalah, saya terpaksa memberi akses kepada pembangun lain supaya mereka boleh membetulkan sesuatu.

Antara muka panel yang menyusahkan

Semuanya dibahagikan kepada panel yang berbeza dan dikawal dari tempat yang berbeza. Contohnya, pelanggan membayar melalui Billmanager, dan mereka perlu but semula atau memasang semula VDS dalam VMManager. Kakitangan kami juga terpaksa bertukar antara tetingkap untuk membantu pelanggan, menyemak beban pada pelayannya atau melihat OS yang dia gunakan.

Antara muka sedemikian memerlukan masa - milik kami dan pelanggan kami. Tidak ada persoalan tentang kemudahan, seperti DigitalOcean, dalam situasi sedemikian.

Kitaran hayat pendek dengan kemas kini API yang kerap

Kami menulis pemalam kami sendiri - contohnya, pemalam dengan kaedah pembayaran tambahan yang tiada dalam VMManager.

Dalam beberapa tahun kebelakangan ini, VMManager mempunyai kitaran hayat yang agak singkat, dan dalam versi baharu, nama pembolehubah atau fungsi dalam API boleh berubah sewenang-wenangnya - ini memecahkan pemalam kami. Sokongan untuk versi lama telah dihapuskan dengan cepat dan perlu dikemas kini.

Tidak boleh diubah suai

Lebih tepat lagi, ia mungkin, tetapi sangat tidak cekap. Sekatan lesen tidak membenarkan anda membuat perubahan pada kod sumber, anda hanya boleh menulis pemalam. Pemalam maksimum - beberapa item menu, wizard langkah demi langkah. Sistem ISP direka untuk serba boleh, tetapi kami memerlukan penyelesaian khusus.

Jadi keputusan sudah matang untuk menulis panel saya sendiri. Kami telah menetapkan matlamat:

  • Bertindak balas dengan cepat kepada ralat, pepijat dan boleh membetulkannya sendiri tanpa membuat pelanggan menunggu.
  • Ubah suai antara muka secara bebas untuk aliran kerja dan keperluan pelanggan.
  • Tingkatkan kebolehgunaan dengan reka bentuk yang bersih dan mudah difahami.

Dan kami memulakan pembangunan.

Senibina Panel Baharu

Kami mempunyai pasukan pembangunan mandiri, jadi kami sendiri yang menulis panel itu.
Kerja utama telah dilakukan oleh tiga jurutera - pengarah teknikal Sergey menghasilkan seni bina dan menulis ejen pelayan, Alexey melakukan pengebilan, dan bahagian depan dipasang oleh Artysh kami.

Langkah 1: Ejen Pelayan

Ejen pelayan ialah pelayan web python yang menguruskan perpustakaan kebebasan, yang seterusnya mentadbir Hipervisor Qemu-kvm.

Ejen menguruskan semua perkhidmatan pada pelayan: mencipta, menghentikan, memadam vd, memasang sistem pengendalian, menukar parameter dan sebagainya melalui perpustakaan libvirt. Pada masa penerbitan artikel, ini adalah lebih daripada empat puluh fungsi yang berbeza, yang kami tambah bergantung pada tugas dan keperluan pelanggan.

Secara teorinya, libvirt boleh dikawal terus daripada pengebilan, tetapi ini memerlukan terlalu banyak kod tambahan dan kami memutuskan untuk memisahkan fungsi ini antara ejen dan pengebilan - pengebilan hanya membuat permintaan kepada ejen melalui API JSON.

Ejen adalah perkara pertama yang kami lakukan, kerana ia tidak memerlukan sebarang antara muka dan mungkin untuk mengujinya terus dari konsol pelayan.

Perkara yang diberikan ejen pelayan kepada kami: lapisan telah muncul yang memudahkan kehidupan untuk semua orang - pengebilan tidak perlu menghantar sejumlah besar arahan, tetapi hanya membuat permintaan. Dan ejen akan melakukan semua yang diperlukan: sebagai contoh, ia akan memperuntukkan ruang cakera dan RAM.

Langkah 2. Pengebilan

Bagi Alex pembangun kami, ini bukan panel kawalan pertama - Alex telah lama mengehos, jadi dia secara amnya memahami perkara yang diperlukan oleh pelanggan dan apa yang diperlukan oleh hos.

Kami memanggil pengebilan di kalangan kami sebagai "panel kawalan": ia mengandungi bukan sahaja wang dan perkhidmatan, tetapi juga pengurusan mereka, sokongan pelanggan dan banyak lagi.

Untuk beralih daripada perisian ISPSystem, adalah perlu untuk mengekalkan sepenuhnya fungsi sebelumnya untuk pelanggan, memindahkan semua tindakan kewangan pengguna daripada pengebilan lama kepada yang baharu, serta semua perkhidmatan dan sambungan antara mereka. Kami mengkaji apa yang ada dalam produk semasa, kemudian penyelesaian pesaing, terutamanya DO dan Vultr. Kami melihat keburukan dan kelebihan, mengumpul maklum balas daripada orang yang bekerja dengan produk lama daripada ISPsystem.

Pengebilan baharu menggunakan dua tindanan: PHP klasik, MySQL (dan pada masa hadapan ia dirancang untuk beralih kepada PostgreSQL), Yii2 sebagai rangka kerja di bahagian belakang dan VueJS di hadapan. Tindanan berfungsi secara bebas antara satu sama lain, dibangunkan oleh orang yang berbeza, dan berkomunikasi menggunakan API JSON. Untuk pembangunan dahulu dan sekarang kita gunakan Ribut PHPS ΠΈ ribut web daripada JetBrains dan amat menyayangi mereka (hey guys!)

Panel direka bentuk secara modular: modul sistem pembayaran, modul pendaftar domain atau, sebagai contoh, modul sijil SSL. Anda boleh menambah ciri baharu atau mengalih keluar ciri lama dengan mudah. Asas untuk pengembangan diletakkan secara seni bina, termasuk dalam arah yang bertentangan, "ke arah perkakasan".
Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kawalan pelayan kami
Apa yang kami dapat: panel kawalan di mana kami mempunyai kawalan penuh. Kini pepijat dibetulkan dalam beberapa jam, bukan minggu, dan ciri baharu dilaksanakan atas permintaan pelanggan, dan bukan atas permintaan ISPSystem.

Langkah 3 Antara Muka

Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kawalan pelayan kami
Antara muka adalah idea pasukan kami.

Mula-mula, kami melihat apa yang akan berlaku jika kami membuat tambahan pada API Sistem ISP tanpa mengubah apa-apa pada antara muka secara asas. Ternyata begitu-begitu dan kami memutuskan untuk melakukan segala-galanya dari awal.

Kami percaya bahawa perkara utama adalah untuk menjadikan antara muka logik, dengan reka bentuk yang bersih dan minimalis, dan kemudian kami akan mendapat panel yang cantik. Lokasi elemen telah dibincangkan dalam Megaplan dan antara muka yang pengguna lihat dalam panel kawalan sekarang akan secara beransur-ansur dilahirkan.

Reka bentuk halaman pengebilan adalah yang pertama muncul, kerana kami telah membuat pemalam pembayaran untuk sistem ISP.

Bahagian hadapan

Mereka memutuskan untuk menjadikan panel sebagai aplikasi SPA - tidak memerlukan sumber dan dengan pemuatan data yang pantas. Pemimpin hadapan kami, Artysh memutuskan untuk menulisnya di Vue β€” pada masa itu Vue baru sahaja muncul. Kami mengandaikan bahawa rangka kerja itu akan berkembang secara dinamik, seperti React, selepas beberapa ketika komuniti Vue akan berkembang dan lautan perpustakaan akan muncul. Kami bertaruh pada Vue dan tidak menyesal - kini memerlukan sedikit masa untuk menambah fungsi baharu pada bahagian hadapan yang telah diprogramkan di bahagian belakang. Kami akan memberitahu anda lebih lanjut tentang panel hadapan dalam artikel berasingan.

Menyambungkan bahagian hadapan ke bahagian belakang

Bahagian hadapan disambungkan ke bahagian belakang melalui pemberitahuan tolak. Saya terpaksa bekerja keras dan menulis pengendali saya sendiri, tetapi kini maklumat pada halaman dikemas kini hampir serta-merta.

Apa yang berlaku: Antara muka panel telah menjadi lebih mudah. Kami menjadikannya adaptif, dan pemuatan pantas membolehkan anda menggunakannya walaupun dari telefon mudah alih pada minit terakhir sebelum berlepas, tanpa memasang aplikasi berasingan untuk berfungsi dengan panel.

Langkah 4. Skim ujian dan migrasi

Apabila segala-galanya bermula dan ujian pertama berlalu, persoalan penghijrahan timbul. Pertama sekali, kami memasang pengebilan dan mula menguji operasinya dengan ejen pelayan.

Kemudian kami menulis skrip ringkas yang memindahkan pangkalan data daripada pengebilan lama kepada yang baharu.

Saya terpaksa menguji dan menyemak semula secara literal segala-galanya, kerana data telah digabungkan menjadi satu pangkalan data baharu daripada tiga pangkalan data lama: Billmanager, VMmanager dan IPmanager pengurus. Mungkin migrasi ujian adalah perkara paling sukar yang kami temui dalam proses membangunkan panel baharu.

Selepas menyemak semula, kami menutup pengebilan lama. Penghijrahan data terakhir adalah saat yang sangat membimbangkan, tetapi, alhamdulillah, ia selesai dalam beberapa minit dan tanpa masalah yang ketara. Terdapat pepijat kecil yang kami perbaiki sepanjang minggu. Kebanyakan masa dihabiskan untuk menguji apa yang berlaku.

Kemudian kami menghantar surat kepada pelanggan dengan alamat panel baharu dan pengebilan serta membuat ubah hala.

Secara ringkasnya: IA HIDUP!

pengakhiran yang bahagia

Dari jam pertama perisian kami bekerja, kami merasakan semua keseronokan peralihan. Kod itu sepenuhnya milik kami dan dengan seni bina yang mudah, dan antara muka adalah bersih dan logik.
Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kawalan pelayan kami
Semakan pertama selepas pelancaran panel baharu

Kami melancarkan proses peralihan pada bulan Disember, pada malam Tahun Baru 2017, apabila beban adalah paling sedikit, untuk memudahkan peralihan untuk pelanggan - hampir tiada siapa yang bekerja pada malam hari cuti.

Perkara utama yang kami dapat apabila beralih kepada sistem kami (selain daripada kebolehpercayaan dan kemudahan umum) ialah keupayaan untuk menambah fungsi dengan cepat untuk pelanggan utama - untuk menjadi wajah mereka, bukan keldai mereka.

Apa seterusnya?

Kami semakin berkembang, jumlah data, pelanggan, data pelanggan semakin meningkat. Saya terpaksa menambah pelayan Memcached dan dua pengurus baris gilir dengan tugas yang berbeza ke bahagian belakang. Bahagian hadapan mempunyai caching dan baris gilirnya sendiri.

Sudah tentu, kami masih mempunyai pengembaraan apabila produk berkembang dan menjadi lebih kompleks, contohnya apabila kami menambah HighLoad.

Dalam artikel seterusnya, kami akan memberitahu anda bagaimana tarif Hi-CPU dilancarkan: tentang perkakasan, perisian, tugas apa yang kami selesaikan dan apa yang kami lakukan.

Sumber: www.habr.com

Tambah komen