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

gambar

Hai Kami adalah "Teknologi Hosting" dan 5 tahun yang lalu meluncurkan VDSina - hosting vds pertama yang dibuat khusus untuk pengembang. Kami berusaha untuk membuatnya nyaman, seperti DigitalOcean, tetapi dengan dukungan Rusia, metode pembayaran, dan server di Rusia. Tapi DigitalOcean tidak hanya keandalan dan harga, tetapi juga layanan.

Perangkat lunak dari ISPsystem ternyata adalah tali yang mengikat tangan kami dalam perjalanan ke layanan yang keren. Tiga tahun lalu, kami menggunakan panel kontrol server Billmanager billing dan VMmanager dan dengan cepat menyadari bahwa hampir tidak mungkin menyediakan layanan yang baik tanpa panel kami sendiri.


Bagaimana ISPsystem membunuh kegunaan


Bug

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

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

Ancaman downtime

Pembaruan dapat memunculkan downtime yang tidak terduga yang memicu bug baru.

Setiap pembaruan adalah lotre: itu perlu untuk menutupi penagihan dan berkorban kepada para dewa pembaruan - beberapa kali pembaruan menyebabkan downtime selama 10-15 menit. Pada saat itu, admin kami menjadi abu-abu di depan mata kami - kami tidak pernah tahu berapa lama downtime akan berlangsung dan tidak dapat memprediksi kapan ISPsystem memutuskan untuk merilis pembaruan baru.

Pada generasi kelima, Billmanager menjadi lebih baik, tetapi untuk mendapatkan akses ke fitur yang diperlukan, saya harus menginstal beta, yang sudah diperbarui setiap minggu. Jika ada yang rusak, Anda harus memberikan akses ke pengembang asing sehingga mereka memperbaiki sesuatu.

Antarmuka panel tidak nyaman

Semuanya dibagi menjadi panel yang berbeda dan dikendalikan dari tempat yang berbeda. Misalnya, klien membayar melalui Billmanager, dan mereka harus reboot atau menginstal ulang VDS di VMManager. Karyawan kami juga harus beralih antar windows untuk membantu klien, memeriksa beban di servernya atau melihat OS mana yang ia gunakan.

Antarmuka seperti itu membutuhkan waktu - baik milik kita maupun pelanggan. Tentang kenyamanan apa pun, seperti DigitalOcean, tidak ada pertanyaan dalam situasi seperti ini.

Siklus hidup pendek dengan pembaruan API yang sering

Kami menulis plugin kami sendiri - misalnya, sebuah 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-nama variabel atau fungsi di API dapat berubah secara sewenang-wenang - ini merusak plugin kami. Dukungan untuk versi yang lebih lama dengan cepat diminimalkan dan harus diperbarui.

Anda tidak dapat memodifikasi

Lebih tepatnya, tetapi sangat tidak efisien. Pembatasan lisensi tidak memungkinkan Anda untuk melakukan perubahan pada sumbernya, Anda hanya dapat menulis plugin. Maksimum plugin adalah beberapa item menu, panduan langkah demi langkah. Sistem ISP dipertajam untuk keserbagunaan, dan kami membutuhkan solusi khusus.

Jadi keputusan untuk menulis panel Anda menjadi matang. Kami menetapkan tujuan:

  • Cepat tanggapi kesalahan, bug, dan perbaiki sendiri, tanpa membuat klien menunggu.
  • Secara bebas memodifikasi antarmuka untuk proses kerja dan kebutuhan pelanggan.
  • Tingkatkan kegunaan dengan desain yang bersih dan mudah dipahami.

Dan mereka memulai pengembangan.

Arsitektur Panel Baru


Kami memiliki tim pengembangan mandiri, jadi kami menulis sendiri panel.
Pekerjaan utama dilakukan oleh tiga insinyur - direktur teknis Sergey datang dengan arsitektur dan menulis agen server, Alexey membuat tagihan, dan Artysh frontend kami mengumpulkan frontend.

Langkah 1. Agen Server



Agen server adalah server web python yang mengelola perpustakaan libvirt , yang selanjutnya mengelola hypervisor Qemu-kvm .

Agen mengelola semua layanan di server: membuat, menghentikan, mencopot pemasangan vds, memasang sistem operasi, mengubah pengaturan, dan sebagainya melalui perpustakaan libvirt. Pada saat publikasi, ini lebih dari empat puluh fungsi yang berbeda, yang kami pelengkap tergantung pada tugas dan kebutuhan klien.

Pada prinsipnya, libvirt dapat dikelola langsung dari penagihan, tetapi memerlukan terlalu banyak kode tambahan dan kami memutuskan untuk mendistribusikan fungsi-fungsi ini antara agen dan penagihan-penagihan hanya membuat permintaan ke agen melalui API JSON.

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

Apa yang diberikan agen server kepada kami: sebuah layer muncul yang menyederhanakan masa pakai untuk semua orang - penagihan tidak perlu mengirim sejumlah besar perintah, tetapi hanya membuat permintaan. Dan agen akan melakukan semua yang Anda butuhkan: misalnya, mengalokasikan ruang disk dan RAM.

Langkah 2. Penagihan


Untuk pengembang kami, Alex, ini bukan panel kontrol pertama - Alex sudah di hosting untuk waktu yang lama, jadi dia umumnya mengerti apa yang dibutuhkan klien dan apa yang dibutuhkan oleh hoster.

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

Untuk beralih dari perangkat lunak ISPSystem, perlu mempertahankan sepenuhnya fungsi sebelumnya untuk pelanggan, mentransfer semua tindakan pengguna keuangan dari tagihan lama ke yang baru, serta semua layanan dan komunikasi di antara mereka. Kami mempelajari apa yang ada dalam produk saat ini, kemudian keputusan para pesaing, terutama DO dan Vultr. Kami melihat kelemahan dan kelebihannya, mengumpulkan umpan balik dari orang-orang yang bekerja dengan produk lama dari ISPsystem.

Dalam penagihan baru, dua tumpukan digunakan: PHP klasik, MySQL (dan di masa depan direncanakan untuk beralih ke PostgreSQL), Yii2 sebagai kerangka kerja di backend dan VueJS di depan. Tumpukan bekerja secara independen satu sama lain, dikembangkan oleh orang yang berbeda, dan berkomunikasi menggunakan API JSON. Untuk pengembangan, dulu dan sekarang kami menggunakan PHPStorm dan WebStorm dari JetBrains dan sangat menyayangi mereka ( kawan , halo!)

Panel dirancang sesuai dengan prinsip modular: modul sistem pembayaran, modul pendaftar domain atau, misalnya, modul sertifikat SSL. Anda dapat dengan mudah menambahkan fungsi baru atau menghapus yang lama. Dasar untuk ekspansi diletakkan secara arsitektur, termasuk ke arah yang berlawanan, "ke besi."
gambar
Apa yang kami dapatkan : panel kontrol yang kami kontrol penuh. Sekarang bug diperbaiki dalam hitungan jam, bukan minggu, dan fungsi baru diimplementasikan atas permintaan pelanggan, dan bukan atas permintaan ISPSystem.

Langkah 3. Antarmuka


gambar
Antarmuka adalah gagasan tim kami.

Pertama, kami melihat apa yang akan terjadi jika kami membuat add-on melalui ISPsystem API tanpa mengubah apa pun secara dramatis di antarmuka. Ternyata begitu-begitu dan kami memutuskan untuk melakukan semuanya dari awal.

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

Desain halaman penagihan pertama kali muncul, karena kami sudah membuat plugin pembayaran untuk ISPsystem.

Frontend

Mereka memutuskan untuk membuat panel aplikasi SPA - tidak menuntut sumber daya dan dengan pemuatan data yang cepat. Artysh front-end kami memutuskan untuk menulisnya di Vue - pada 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 menginstalnya di Vue dan tidak menyesalinya - sekarang menambahkan ke depan fitur baru yang telah diprogram di backend membutuhkan sedikit waktu. Kami akan memberi tahu Anda lebih banyak tentang panel frontend di artikel terpisah.

Komunikasi frontend dengan backend

Frontend diikat ke backend melalui pushies. Saya harus berkeringat dan menulis handler saya sendiri, tetapi sekarang informasi pada halaman diperbarui hampir secara instan.

Apa yang terjadi: antarmuka panel menjadi lebih mudah. Kami membuatnya adaptif, dan pemuatan cepat memungkinkannya digunakan bahkan dari ponsel pada menit-menit terakhir sebelum take-off, tanpa menginstal aplikasi terpisah untuk bekerja dengan panel.

Langkah 4. Pengujian dan skema migrasi


Ketika semuanya dimulai dan tes pertama berlalu, pertanyaan tentang migrasi muncul. Pertama-tama, kami menyiapkan penagihan dan mulai menguji kerjanya dengan agen server.

Kemudian mereka menulis skrip sederhana yang mentransfer database dari tagihan lama ke yang baru.

Saya harus menguji dan mengecek semuanya, karena data dituangkan ke dalam satu database baru dari tiga yang lama: Billmanager, VMmanager, dan manajer IPmanager. Mungkin tes migrasi adalah hal yang paling sulit yang kami temui dalam proses pengembangan panel baru.

Setelah memeriksa ulang, kami menutupi tagihan lama. Migrasi data akhir adalah saat yang sangat mengkhawatirkan, tetapi, syukurlah, itu selesai dalam beberapa menit dan tanpa masalah nyata. Ada bug kecil yang kami perbaiki dalam seminggu. Waktu utama diambil dengan menguji apa yang terjadi.

Kemudian kami mengirimkan surat kepada pelanggan dengan alamat panel baru dan penagihan dan melakukan pengalihan.

Intinya: IT'S HIDUP!

Senang


Dari jam pertama perangkat lunak kami, kami merasakan semua kesenangan dari transisi. Kode sepenuhnya milik kita dan dengan arsitektur yang nyaman, dan antarmuka yang bersih dan logis.
gambar
Ulasan pertama setelah meluncurkan panel baru

Kami memulai proses transisi pada bulan Desember, menjelang Tahun Baru 2017, ketika ada beban paling sedikit untuk membuat transisi lebih mudah bagi pelanggan - hampir tidak ada yang bekerja pada malam liburan.

Hal utama yang kami dapatkan selama transisi ke sistem kami (selain keandalan dan kenyamanan umum) adalah kemampuan untuk dengan cepat menambah fungsionalitas bagi pelanggan utama - untuk menjadi wajah mereka dan bukan keledai mereka.

Apa selanjutnya


Kami tumbuh, jumlah data, pelanggan, data pelanggan tumbuh. Server memcached dan dua manajer antrian dengan tugas yang berbeda harus ditambahkan ke backend. Ada caching dan antrian di ujung depan.

Tentu saja, kami masih memiliki petualangan ketika kami mengembangkan dan mempersulit produk, misalnya, ketika 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.



Berlangganan pengembang Instagram kami


Source: https://habr.com/ru/post/id460107/


All Articles