Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kontrol server kami

Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kontrol server kami

Halo! Kami adalah "Teknologi Hosting" dan diluncurkan 5 tahun yang lalu VDSina β€” hosting vds pertama yang dibuat khusus untuk pengembang. Kami berusaha membuatnya nyaman, seperti DigitalOcean, tetapi dengan dukungan Rusia, metode pembayaran, dan server di Rusia. Tapi DigitalOcean bukan hanya keandalan dan harga, tetapi juga layanan.

Perangkat lunak dari sistem ISP ternyata menjadi tali yang mengikat tangan kami dalam perjalanan menuju layanan yang keren. Tiga tahun lalu, kami menggunakan tagihan Billmanager dan panel kontrol server VMmanager dan segera menyadari bahwa hampir tidak mungkin memberikan layanan yang baik tanpa panel kontrol kami sendiri.

Bagaimana Sistem ISP Membunuh Kenyamanan

Bug

Kami tidak dapat memperbaiki bug itu sendiri - setiap kali kami harus menulis ke dukungan orang lain dan menunggu. Solusi untuk masalah apa pun membutuhkan tanggapan dari perusahaan pihak ketiga.

Dukungan sistem ISP merespons secara normal, tetapi perbaikan datang hanya setelah beberapa rilis, dan kemudian tidak selalu dan tidak semuanya. Terkadang bug kritis diperbaiki selama beberapa minggu. Kami harus meyakinkan pelanggan, meminta maaf dan menunggu sistem ISP memperbaiki bug.

Ancaman Waktu Henti

Pembaruan dapat menghasilkan waktu henti yang tidak dapat diprediksi yang memicu kesalahan baru.

Setiap pembaruan adalah lotre: saya harus menutupi tagihan dan berkorban kepada dewa pembaruan - beberapa kali pembaruan menyebabkan waktu henti selama 10-15 menit. Admin kami saat ini duduk di depan mata mereka - kami tidak pernah tahu berapa lama waktu henti akan berlangsung dan tidak dapat memprediksi kapan sistem ISP akan memutuskan untuk merilis pembaruan baru.

Pada generasi kelima, Billmanager menjadi lebih baik, tetapi untuk mendapatkan akses ke fitur yang diperlukan, saya harus menginstal versi beta, yang telah diperbarui setiap minggu. Jika ada yang rusak, saya harus memberikan akses ke pengembang lain agar mereka dapat memperbaiki sesuatu.

Antarmuka panel yang tidak nyaman

Semuanya dibagi menjadi panel yang berbeda dan dikendalikan dari tempat yang berbeda. Misalnya, klien membayar melalui Billmanager, dan mereka harus mem-boot ulang atau menginstal ulang VDS di VMManager. Staf kami juga harus beralih antar windows untuk membantu klien, memeriksa beban di servernya, atau melihat OS apa yang dia gunakan.

Antarmuka seperti itu membutuhkan waktu - baik milik kami maupun klien kami. Tidak ada pertanyaan tentang kenyamanan apa pun, seperti DigitalOcean, dalam situasi seperti itu.

Siklus hidup pendek dengan pembaruan API yang sering

Kami menulis plugin kami sendiri - misalnya, plugin dengan metode pembayaran tambahan yang tidak ada di VMManager.

Dalam beberapa tahun terakhir, VMManager memiliki siklus hidup yang relatif singkat, dan dalam versi baru, nama variabel atau fungsi di API dapat berubah secara sewenang-wenang - ini merusak plugin kami. Dukungan untuk versi yang lebih lama dengan cepat dihentikan dan harus diperbarui.

Tidak dapat dimodifikasi

Lebih tepatnya, itu mungkin, tetapi sangat tidak efisien. Pembatasan lisensi tidak memungkinkan Anda untuk membuat perubahan pada kode sumber, Anda hanya dapat menulis plugin. Plugin maksimum - beberapa item menu, panduan langkah demi langkah. Sistem ISP dirancang untuk keserbagunaan, tetapi kami membutuhkan solusi khusus.

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

  • Menanggapi kesalahan, bug, dan dapat memperbaikinya sendiri dengan cepat tanpa membuat klien menunggu.
  • Bebas memodifikasi antarmuka untuk alur kerja dan kebutuhan klien.
  • Tingkatkan kegunaan dengan desain yang bersih dan mudah dipahami.

Dan kami memulai pengembangan.

Arsitektur Panel Baru

Kami memiliki tim pengembangan mandiri, jadi kami menulis sendiri panelnya.
Pekerjaan utama dilakukan oleh tiga insinyur - direktur teknis Sergey datang dengan arsitektur dan menulis agen server, Alexey melakukan penagihan, dan front-end dirakit oleh Artysh front-end kami.

Langkah 1: Agen Server

Agen server adalah server web python yang mengelola perpustakaan libvirt, yang pada gilirannya memerintah Hypervisor Qemu-kvm.

Agen mengelola semua layanan di server: membuat, menghentikan, menghapus vds, menginstal sistem operasi, mengubah parameter, dan seterusnya melalui pustaka libvirt. Pada saat publikasi artikel, ini adalah lebih dari empat puluh fungsi berbeda, yang kami tambahkan tergantung pada tugas dan kebutuhan klien.

Secara teori, libvirt dapat dikontrol langsung dari penagihan, tetapi ini memerlukan terlalu banyak kode tambahan dan kami memutuskan untuk memisahkan fungsi ini antara agen dan penagihan - penagihan hanya membuat permintaan ke agen melalui JSON API.

Agen adalah hal pertama yang kami lakukan, karena tidak memerlukan antarmuka apa pun dan memungkinkan untuk mengujinya langsung dari konsol server.

Apa yang diberikan agen server kepada kami: sebuah lapisan telah muncul yang menyederhanakan hidup semua orang - penagihan tidak perlu mengirim banyak perintah, tetapi hanya membuat permintaan. Dan agen akan melakukan semua yang diperlukan: misalnya, akan mengalokasikan ruang disk dan RAM.

Langkah 2. Penagihan

Untuk pengembang kami Alex, ini bukan panel kontrol pertama - Alex telah lama menjadi hosting, jadi dia umumnya memahami apa yang dibutuhkan klien dan apa yang dibutuhkan penghosting.

Kami menyebut penagihan di antara kami sendiri sebagai "panel kontrol": tidak hanya berisi uang dan layanan, tetapi juga pengelolaannya, dukungan pelanggan, dan banyak lagi.

Untuk beralih dari perangkat lunak ISPSystem, fungsionalitas sebelumnya untuk pelanggan harus sepenuhnya dipertahankan, mentransfer semua tindakan keuangan pengguna dari penagihan lama ke yang baru, serta semua layanan dan koneksi di antara mereka. Kami mempelajari apa yang ada di produk saat ini, lalu solusi pesaing, terutama DO dan Vultr. Kami melihat kekurangan dan kelebihannya, mengumpulkan umpan balik dari orang-orang yang bekerja dengan produk lama dari sistem ISP.

Penagihan baru menggunakan dua tumpukan: PHP klasik, MySQL (dan di masa mendatang direncanakan untuk beralih ke PostgreSQL), Yii2 sebagai kerangka kerja di backend dan VueJS di bagian depan. Tumpukan bekerja secara independen satu sama lain, dikembangkan oleh orang yang berbeda, dan berkomunikasi menggunakan API JSON. Untuk pengembangan dulu dan sekarang kami gunakan PHP Badai ΠΈ WebBadai dari JetBrains dan sangat mencintai mereka (hai teman-teman!)

Panel dirancang berdasarkan modul: modul sistem pembayaran, modul pendaftar domain atau, misalnya, modul sertifikat SSL. Anda dapat dengan mudah menambahkan fitur baru atau menghapus yang lama. Dasar untuk ekspansi diletakkan secara arsitektural, termasuk ke arah yang berlawanan, "menuju perangkat keras".
Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kontrol server kami
Apa yang kami dapatkan: panel kontrol yang kami kendalikan sepenuhnya. Sekarang bug diperbaiki dalam hitungan jam, bukan minggu, dan fitur baru diimplementasikan atas permintaan pelanggan, dan bukan atas permintaan ISPSystem.

Langkah 3 Antarmuka

Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kontrol server kami
Antarmuka adalah gagasan tim kami.

Pertama, kami melihat apa yang akan terjadi jika kami membuat add-on melalui API sistem ISP tanpa mengubah apa pun secara mendasar di antarmuka. Ternyata biasa saja dan kami memutuskan untuk melakukan semuanya dari awal.

Kami percaya bahwa yang utama adalah membuat antarmuka menjadi logis, dengan desain yang bersih dan minimalis, dan kemudian kami akan mendapatkan panel yang indah. Lokasi elemen telah dibahas di Megaplan dan antarmuka yang dilihat pengguna di panel kontrol sekarang akan lahir secara bertahap.

Desain halaman billing adalah yang pertama kali muncul, karena kami sudah membuat plugin pembayaran untuk sistem ISP.

Paling depan

Mereka memutuskan untuk menjadikan panel aplikasi SPA - tidak menuntut sumber daya dan dengan pemuatan data yang cepat. Front-end kami Artysh memutuskan untuk menulisnya di Vue β€” saat itu Vue baru saja muncul. Kami berasumsi bahwa kerangka kerja akan berkembang secara dinamis, seperti Bereaksi, setelah beberapa waktu komunitas Vue akan tumbuh dan lautan perpustakaan akan muncul. Kami bertaruh pada Vue dan tidak menyesalinya - sekarang hanya perlu sedikit waktu untuk menambahkan fungsi baru ke bagian depan yang telah diprogram di bagian belakang. Kami akan memberi tahu Anda lebih banyak tentang panel front-end di artikel terpisah.

Menghubungkan frontend ke backend

Frontend terhubung ke backend melalui pemberitahuan push. Saya harus bekerja keras dan menulis penangan saya sendiri, tetapi sekarang informasi di halaman diperbarui hampir secara instan.

Apa yang telah terjadi: Antarmuka panel menjadi lebih sederhana. Kami membuatnya adaptif, dan pemuatan cepat memungkinkan Anda menggunakannya bahkan dari ponsel di menit-menit terakhir sebelum lepas landas, tanpa menginstal aplikasi terpisah untuk bekerja dengan panel.

Langkah 4. Skema pengujian dan migrasi

Ketika semuanya dimulai dan tes pertama berlalu, muncul pertanyaan tentang migrasi. Pertama-tama, kami menginstal billing dan mulai menguji operasinya dengan agen server.

Kemudian kami menulis skrip sederhana yang mentransfer database dari penagihan lama ke yang baru.

Saya harus menguji dan memeriksa ulang semuanya secara harfiah, karena data digabungkan menjadi satu database baru dari tiga database lama: Billmanager, VMmanager, dan IPmanager manajer. Mungkin migrasi percobaan adalah hal tersulit yang kami temui dalam proses pengembangan panel baru.

Setelah dilakukan pengecekan ulang, billing lama kami tutup. Migrasi data terakhir adalah momen yang sangat meresahkan, tetapi, alhamdulillah, selesai dalam beberapa menit dan tanpa masalah yang berarti. Ada bug kecil yang kami perbaiki selama seminggu. Sebagian besar waktu dihabiskan untuk menguji apa yang terjadi.

Kemudian kami mengirim surat ke klien dengan alamat panel dan tagihan baru dan melakukan pengalihan.

Singkatnya: INI HIDUP!

Akhir yang bahagia

Dari jam pertama kerja perangkat lunak kami, kami merasakan semua kenikmatan transisi. Kode itu sepenuhnya milik kami dan dengan arsitektur yang nyaman, dan antarmukanya bersih dan logis.
Sistem ISP, maafkan dan selamat tinggal! Mengapa dan bagaimana kami menulis panel kontrol server kami
Tinjauan pertama setelah peluncuran panel baru

Kami meluncurkan proses transisi pada bulan Desember, menjelang Tahun Baru 2017, saat beban paling sedikit, untuk mempermudah transisi bagi pelanggan - hampir tidak ada yang bekerja pada malam hari raya.

Hal utama yang kami dapatkan saat beralih ke sistem kami (selain keandalan dan kenyamanan umum) adalah kemampuan untuk menambahkan fungsionalitas dengan cepat untuk pelanggan utama - menjadi wajah mereka, bukan pantat mereka.

Apa selanjutnya?

Kami tumbuh, jumlah data, pelanggan, data pelanggan tumbuh. Saya harus menambahkan server Memcached dan dua manajer antrian dengan tugas berbeda ke backend. Frontend memiliki caching dan antriannya sendiri.

Tentu saja, kami masih memiliki petualangan saat produk berkembang dan menjadi lebih kompleks, misalnya saat kami menambahkan HighLoad.

Pada artikel berikutnya, kami akan memberi tahu Anda bagaimana tarif Hi-CPU diluncurkan: tentang perangkat keras, perangkat lunak, tugas apa yang kami selesaikan, dan apa yang kami lakukan.

Sumber: www.habr.com

Tambah komentar