Ribbon adalah komponen yang bertanggung jawab untuk menyeimbangkan beban di ember keluarga Spring Cloud Netflix. Ini adalah kumpulan perpustakaan kelas. Melalui pita, programmer dapat menggunakan penyeimbangan beban "transparan" tanpa melibatkan detail implementasi spesifik, tanpa harus menulis terlalu banyak kode untuk mengimplementasikan penyeimbangan beban dalam proyek.
Misalnya, dalam sebuah cluster yang berisi eureka dan pita, layanan (yang dapat dipahami sebagai paket jar) digunakan pada beberapa server. Ketika beberapa pengguna layanan menghubungi layanan pada saat yang sama, permintaan bersamaan ini dapat diteruskan ke setiap server menggunakan strategi yang masuk akal.
Faktanya, ketika menggunakan berbagai komponen lain dari Spring Cloud, kita dapat melihat jejak pita, seperti Eureka dapat diintegrasikan dengan pita, dan komponen Zuul yang menyediakan fungsi gateway juga dapat diintegrasikan dengan pita saat penerusan permintaan.
Dari tingkat kode, Pita memiliki tiga antarmuka yang lebih penting berikut.
Pertama, Iloadbalancer, yang juga disebut penyeimbang beban. Melalui itu, kami dapat meneruskan permintaan secara wajar dalam proyek sesuai dengan aturan tertentu. Kelas implementasi umum adalah Baseloadbalancer.
Kedua, Irule, antarmuka ini memiliki beberapa kelas implementasi, seperti RandomRule dan Roundrobinrule. Kelas implementasi ini secara khusus mendefinisikan strategi penyeimbangan beban seperti "acak" dan "pemungutan suara", dll. Kami juga dapat menulis ulang metode dalam antarmuka ini untuk menyesuaikan strategi penyeimbangan beban.
Di kelas Baseloadbalancer, kami dapat mengatur kebijakan penyeimbangan beban melalui kelas implementasi Irule, sehingga penyeimbang beban dapat secara wajar meneruskan permintaan berdasarkan ini.
Ketiga, antarmuka IPING, melalui antarmuka ini, kami dapat memperoleh server mana yang tersedia saat ini, dan kami juga dapat menyesuaikan aturan untuk menentukan apakah server tersedia dengan menulis ulang metode dalam antarmuka ini. Di kelas Baseloadbalancer, kami juga dapat menetapkan kebijakan untuk menentukan apakah server tersedia melalui kelas implementasi IPING.
1 Iloadbalancer: Antarmuka LoadBalancer
Dalam pita, kami juga dapat memilih server berdasarkan kebijakan penyeimbangan beban tertentu melalui antarmuka Iloadbalancer.
Melalui Iloadbalancerdemo.java di bawah ini, mari kita lihat penggunaan dasar antarmuka ini. Kelas ini ditempatkan dalam proyek RabbionBasicDemo yang dibuat di Bagian 4.2, dan kodenya adalah sebagai berikut.
// Hilangkan paket yang diperlukan dan kode Impor kelas publik IloadbalanCerdemo {public static void main (string [] args) {// Buat objek iloadbalancer iloadbalancer loadBalancer = new BaseloadBalanCer (); // Tentukan daftar daftar server <server> myServer = new ArrayList <ver> (); // buat dua server server server s1 = server baru ("eKserver1", 8080); Server S2 = server baru ("Ekserver2", 8080); // Masukkan dua objek server ke dalam Jenis Daftar Objek MyServer MyServer.Add (S1); MyServer.Add (S2); // Masukkan MyServer ke dalam Load Balancer LoadBalancer.addservers (MyServer); // inisiasi 10 panggilan di loop for for (int i = 0; i <10; i ++) {// Gunakan aturan penyeimbang beban default untuk mendapatkan server jenis objek server s = loadBalancer.chooseserver ("default"); // output alamat IP dan nomor port System.out.println (s.getHost () + ":" + s.getport ()); }}}Di baris 5, kami membuat objek LoadBalancer dari tipe Baseloadbalancer, dan Baseloadbalancer adalah kelas implementasi dari antarmuka Iloadbalancer Load Balancer.
Dalam baris 6 hingga 13, kami membuat dua objek tipe server dan memasukkannya ke myServer. Di baris 15, kami memasukkan objek MyServer tipe daftar ke dalam penyeimbang beban.
Dalam loop pada baris 17 hingga 22, kami mensimulasikan pemilihan server 10 kali melalui penyeimbang beban. Secara khusus, di baris 19, kami memilih server dengan aturan penyeimbangan beban default melalui metode Choiceserver dari LoadBalancer. Di baris 21, kami menggunakan tindakan "cetak" untuk mensimulasikan tindakan aktual "menggunakan server untuk menangani permintaan".
Hasil berjalan dari kode di atas adalah sebagai berikut. Kita dapat melihat bahwa penyeimbang beban loadbalancer mendistribusikan 10 permintaan ke 2 server, dan kita memang dapat melihat efek "penyeimbangan beban".
Kedua, Irule, antarmuka ini memiliki beberapa kelas implementasi, seperti RandomRule dan Roundrobinrule. Kelas implementasi ini secara khusus mendefinisikan strategi penyeimbangan beban seperti "acak" dan "pemungutan suara", dll. Kami juga dapat menulis ulang metode dalam antarmuka ini untuk menyesuaikan strategi penyeimbangan beban.
Di kelas Baseloadbalancer, kami dapat mengatur kebijakan penyeimbangan beban melalui kelas implementasi Irule, sehingga penyeimbang beban dapat secara wajar meneruskan permintaan berdasarkan ini.
Ketiga, antarmuka IPING, melalui antarmuka ini, kami dapat memperoleh server mana yang tersedia saat ini, dan kami juga dapat menyesuaikan aturan untuk menentukan apakah server tersedia dengan menulis ulang metode dalam antarmuka ini. Di kelas Baseloadbalancer, kami juga dapat menetapkan kebijakan untuk menentukan apakah server tersedia melalui kelas implementasi IPING.
EKSERVER2: 8080 EKSERVER1: 8080 EKSERVER2: 8080 EKSERVER1: 8080 EKSERVER2: 8080 EKSERVER1: 8080 EKSERVER2: 8080 EKSERVER1: 8080 EKSERVER2: 8080 EKSERVER1: 8080 EKSERVER1: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080: 8080
2 Irule: Antarmuka yang mendefinisikan aturan penyeimbangan beban
Dalam pita, kami dapat menetapkan aturan yang sesuai untuk penyeimbang beban dengan mendefinisikan kelas implementasi antarmuka Irule. Dalam tabel berikut, kita dapat melihat beberapa kelas implementasi yang umum digunakan dari antarmuka Irule.
Nama kelas implementasi | Aturan penyeimbangan beban |
RandomRule | Mengadopsi strategi yang dipilih secara acak |
Roundrobinrule | Mengadopsi strategi pemungutan suara |
Retryrule | Saat menggunakan strategi ini, tindakan coba lagi disertakan |
Ketersediaan filterrule | Itu akan memfilter server dengan beberapa kegagalan koneksi dan konkurensi permintaan yang berlebihan |
WeightedResponsetimerule | Tetapkan bobot untuk setiap server sesuai dengan waktu respons rata -rata, dan pilih server dengan waktu respons rata -rata yang lebih kecil berdasarkan nilai berat ini. |
ZoneAvoidancerule | Prioritas diberikan untuk mengalokasikan permintaan ke server dengan zona yang sama dengan permintaan |
Dalam program Iruledemo.java berikut, mari kita lihat penggunaan dasar Irule.
// Hilangkan paket yang diperlukan dan kode Impor kelas publik iruledemo {public static void main (string [] args) {// Harap dicatat bahwa ini digunakan untuk BaseloadBalancer, bukan Iloadbalancer antarmuka BaseloadBalancer LoadBalancer = baru BaseloadBalancer (); // menyatakan kebijakan penyeimbangan beban berdasarkan aturan irule polling = roundrobinrule baru (); // atur kebijakan loadbalancer.setroLe (aturan); // Tentukan 3 server sebagai berikut dan masukkan ke dalam kumpulan daftar jenis daftar <server> myServer = new ArrayList <Server> (); Server S1 = server baru ("Ekserver1", 8080); Server S2 = server baru ("Ekserver2", 8080); Server S3 = server baru ("Ekserver3", 8080); MyServer.Add (S1); MyServer.Add (S2); MyServer.Add (S3); // atur daftar server LoadBalancer.addservers (MyServer); // output hasil penyeimbangan beban untuk (int i = 0; i <10; i ++) {server s = loadBalancer.chooseserver (null); System.out.println (s.getHost () + ":" + s.getport ()); }}}Kode ini sangat mirip dengan Iloadbalancerdemo.java dalam artikel di atas, tetapi ada perbedaan berikut.
1 Di baris 5, kami mendefinisikan penyeimbang beban melalui kelas Baseloadbalancer alih -alih antarmuka karena kelas berisi metode setRule.
2 Tentukan objek aturan berdasarkan aturan pemungutan suara di baris 7 dan atur ke penyeimbang beban di baris 9.
3 Di baris 19, kami menempatkan objek daftar yang berisi 3 server ke dalam penyeimbang beban, bukan dua sebelumnya. Karena disimpan di sini untuk tujuan demonstrasi, kami akan memasukkan server "Ekserver3" yang tidak ada sama sekali.
Setelah menjalankan program, kita dapat melihat bahwa ada 10 output, dan memang mengeluarkan nama 3 server secara berurutan sesuai dengan aturan "pemungutan suara". Jika kita mengubah kode pada baris 7 ke yang berikut, kita akan melihat nama server "secara acak" output.
Aturan irule = randomRule baru ();
3 iPing: Antarmuka untuk menentukan apakah server tersedia
Dalam proyek ini, kami biasanya membiarkan antarmuka Iloadbalancer secara otomatis menentukan apakah server tersedia (layanan ini dienkapsulasi dalam kode yang mendasari Ribbon). Selain itu, kami juga dapat menggunakan antarmuka IPING di komponen pita untuk mengimplementasikan fungsi ini.
Dalam kode iruledemo.java berikut, kami akan menunjukkan penggunaan umum antarmuka IPING.
// Hilangkan paket yang diperlukan dan kelas Kode Impor Myping mengimplementasikan Iping {public boolean isAlive (server server) {// Jika nama server adalah Ekserver2, kembalikan false if (server.gethost (). Equals ("eKserver2")) {return false; } return true; }}Kelas myping yang didefinisikan pada baris 2 mengimplementasikan antarmuka IPING dan mengesampingkan metode isalive di baris 3.
Dalam metode ini, kami menilai berdasarkan nama server. Secara khusus, jika namanya Ekserver2, ia mengembalikan false, yang berarti bahwa server tidak tersedia, jika tidak ia mengembalikan true, yang berarti bahwa server saat ini tersedia.
kelas publik iruledemo {public static void main (string [] args) {BaseloadBalancer loadBalancer = new BaseloadBalanCer (); // Tentukan objek myping dari tipe iping Iping myping = new myping (); // Gunakan objek myping loadbalancer.setping (myping); // Buat tiga objek server dan letakkan di daftar Load Balancer <server> myServer = new ArrayList <Server> (); Server S1 = server baru ("Ekserver1", 8080); Server S2 = server baru ("Ekserver2", 8080); Server S3 = server baru ("Ekserver3", 8080); MyServer.Add (S1); MyServer.Add (S2); MyServer.Add (S3); loadbalancer.addservers (MyServer); // Minta server beberapa kali melalui loop untuk untuk (int i = 0; i <10; i ++) {server S = loadBalancer.chooseserver (null); System.out.println (s.getHost () + ":" + s.getport ()); }}}Dalam fungsi utama di baris 12, kami membuat objek myping tipe IPING di baris 15, dan memasukkan objek ini ke penyeimbang beban di baris 17. Melalui kode pada baris 18 hingga 26, kami membuat tiga server dan memasukkannya ke penyeimbang beban juga.
Di loop pada baris 28, kami masih meminta dan mengeluarkan nama server. Karena penyeimbang beban di sini berisi objek tipe iPing, setelah mendapatkan server sesuai dengan kebijakan, itu akan menentukan apakah server tersedia berdasarkan metode isaktif di Myping.
Karena dalam metode ini, kami mendefinisikan bahwa server Ekserver2 tidak tersedia, objek Load Balancer LoadBalancer tidak akan pernah mengirim permintaan ke server, yaitu, dalam hasil output, kami tidak akan melihat output "Ekserver2: 8080".
Dari sini kita dapat melihat penggunaan umum antarmuka IPING. Kami dapat mendefinisikan logika "menilai apakah server tersedia" dengan menulis ulang metode iSalive. Dalam proyek aktual, dasar penilaian tidak lebih dari "apakah server merespons terlalu lama" atau "apakah jumlah permintaan yang dikirim ke server terlalu banyak". Metode penilaian ini dienkapsulasi dalam antarmuka Irule dan kelas implementasinya, jadi dalam skenario umum kami menggunakan antarmuka IPING.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.