Dalam posting ini, kita akan berbicara tentang perpustakaan yang mendaftarkan node itu sendiri dan mengarahkan permintaan dari luar ke node tertentu.
Bagaimana Anda mendapat ide untuk menulis proyek ini?
Setelah ada kebutuhan untuk mengurai situs dalam jumlah besar, saya mencoba menerapkan hal seperti itu menggunakan selenium grid, kemudian saya mengambil selenoid. selenoid muncul, tetapi ada banyak hal yang tidak saya butuhkan, misalnya, versi dan opsi peramban, dan yang paling penting, kurangnya penskalaan otomatis (tetapi selenoid bukan untuk itu). 90% dari waktu cluster menganggur, dan kemudian muncul beban besar, yang tidak bisa diatasi oleh server. Ternyata pengeluaran besar untuk besi, yang hampir sepanjang waktu tidak berfungsi, dan bahkan tidak bisa mengatasinya. Saya pikir akan lebih baik jika, ketika beban tiba, jumlah browser yang dapat dieksekusi akan meningkat, tetapi bagaimana beban menghilang dan browser dihapus. Untungnya, ini dapat diimplementasikan, misalnya, melalui
AWS EC2 .
Sedikit tentang strukturnya
- Hub
Hub diluncurkan di tempat yang nyaman bagi Anda, diperlukan dalam satu contoh.
Saat membuat wadah buruh pelabuhan dengan hub, ia harus meneruskan variabel lingkungan token ke sana.
Setelah itu ia mulai mengharapkan koneksi masuk dari node dan dari pengguna.
Hub mengingat rute, ia mengingatnya tepat satu menit tidak aktif , kemudian menghapus rute ini dan membebaskan node untuk klien lain.
- Node.
Node dapat dikonfigurasi sebagai wadah dasar untuk sistem penskalaan otomatis, misalnya, dengan beban rata-rata pada wadah penampung, tambahkan yang lain, atau, dalam kasus ekstrem, Anda dapat memulai server virtual dengan wadah ini pada waktu peluncuran, asalkan Anda membayar biaya aktual waktu penggunaan server.
Saat membuat wadah buruh pelabuhan dengan sebuah simpul, ia perlu meneruskan token dan variabel lingkungan server ke dalamnya. Server adalah ip dari hub kami.
Nomor opsi 1. Permintaan dari simpul
Node membuat permintaan ke hub dengan
set token - yang merupakan token dari variabel lingkungan. Hub memeriksa token dari permintaan dan jika cocok, ia mengingatnya. Hub mulai melakukan ping node ini setiap 4 detik sekali. Jika 5 upaya ping gagal, simpul dihapus dengan catatan kehilangan koneksi. Node, pada gilirannya, menginisialisasi ping respons, setiap 10 detik sekali, jika koneksi dengan hub terputus. Hal ini dilakukan sehingga setelah koneksi terputus, cluster itu sendiri akan mengembalikan negaranya.
Opsi nomor 2. Permintaan dari pengguna
Pengguna membuat permintaan ke hub dengan
token dan header
nomor yang ditetapkan. Token diperlukan agar hanya node tepercaya yang dapat mengoperasikan cluster, dan memberi nomor agar kami dapat membuat sesi berbeda dalam ip klien yang sama. Setiap sesi memiliki nomor uniknya sendiri.
Untuk setiap permintaan, hub memeriksa apakah sudah ada rute yang dibuat atau tidak, jika ada - permintaan hanya dialihkan ke node yang diinginkan, jika tidak ada rute seperti itu, permintaan dari pengguna di antri untuk membebaskan node. Segera setelah salah satu node dibebaskan, hub membuat rute untuk sesi pengguna dan rute yang dibebaskan. Sekarang semua permintaan untuk sesi ini akan menuju ke simpul tertentu.
Semenit kemudian. bagaimana pengguna menutup koneksi - node dibebaskan dan ditransfer ke permintaan pengguna lain.
Tautan ke repositori proyekRingkasan
Posnya ternyata lebih seperti instruksi untuk digunakan, tetapi bagaimanapun, saya percaya bahwa proyek ini dapat bermanfaat.
PS Beberapa klarifikasi
Ini adalah proyek pertama yang saya mulai menulis di GOLANG, sehubungan dengan itu, jika seseorang memiliki saran atau komentar, silakan tulis di komentar (Saya bahkan tidak mengandalkan PR, tetapi itu akan sangat keren!)