Cara PHP mengendalikan penemuan perkhidmatan dan pengimbangan beban apabila melaksanakan API
Dengan populariti seni bina perkhidmatan mikro, penemuan perkhidmatan dan pengimbangan beban telah menjadi bahagian penting dalam reka bentuk API. Dalam PHP, beberapa projek dan rangka kerja sumber terbuka menyediakan pelaksanaan fungsi ini. Artikel ini akan memperkenalkan cara menggunakan alat ini dalam PHP untuk mencapai penemuan perkhidmatan dan pengimbangan beban.
Penemuan perkhidmatan merujuk kepada proses mencari contoh perkhidmatan dalam sistem teragih. Oleh kerana bilangan perkhidmatan yang banyak dan alamat kejadian yang sentiasa berubah, sistem penemuan perkhidmatan berpusat diperlukan. Sistem penemuan perkhidmatan biasa termasuk Zookeeper dan dll. Sistem ini membenarkan perkhidmatan mendaftarkan diri mereka dengan direktori perkhidmatan terpusat dan boleh menanyakan direktori tersebut untuk meminta alamat contoh perkhidmatan.
Terdapat beberapa alatan untuk penemuan perkhidmatan dalam PHP, antaranya Consul adalah alat yang terkenal. Konsul ialah alat sumber terbuka yang menyediakan penemuan perkhidmatan, pemeriksaan kesihatan, storan KV dan fungsi lain. Consul menyediakan dua kaedah pertanyaan, CLI dan HTTP API, membolehkan kami menggunakan Consul API untuk menanyakan alamat dan status contoh perkhidmatan dalam aplikasi PHP. Berikut ialah contoh mudah menggunakan API Konsul untuk menanyakan alamat contoh perkhidmatan:
28fce3c7e719ec1aaf9a4d695229db95 $consul_host]); ("/v1 /catalog/service/{$service_id}"); // Maklumat perkhidmatan pertanyaan
$data = json_decode($response->getBody(), true); // Parse response
shuffle((); $data); // Kocok pesanan secara rawak
$address = $data0; // Dapatkan alamat contoh perkhidmatan
?>
Coretan kod di atas mula-mula menggunakan perpustakaan GuzzleHttp untuk membuat Pelanggan HTTP, dan kemudian menghantarnya kepada Konsul API menghantar permintaan pertanyaan. Konsul akan mengembalikan respons JSON yang mengandungi maklumat seperti metadata perkhidmatan dan alamat kejadian. Kami boleh menghuraikan dan memproses respons mengikut keperluan kami sendiri untuk mendapatkan maklumat contoh perkhidmatan yang diperlukan.
Pengimbangan beban merujuk kepada memperuntukkan permintaan rangkaian kepada pelayan yang berbeza untuk mengurangkan tekanan pada pelayan tunggal dan meningkatkan kebolehpercayaan dan prestasi sistem. Algoritma pengimbangan beban biasa termasuk round robin, rawak dan wajaran. Dalam PHP, kita boleh menggunakan rangka kerja pengimbangan beban sumber terbuka untuk melaksanakan pengimbangan beban.
Rangka kerja pengimbangan beban sumber terbuka yang lebih terkenal termasuk HAProxy dan Nginx. Memandangkan HAProxy dan Nginx kedua-duanya dijalankan pada lapisan HTTP, aplikasi PHP perlu digunakan di belakang pelayan web. Selain itu, pengimbang beban ini memerlukan beberapa konfigurasi dan pengurusan tambahan, jadi ia boleh menjadi lebih kompleks untuk digunakan. Berikut ialah contoh konfigurasi menggunakan Nginx sebagai pengimbang beban:
ujung belakang hulu {
pelayan 127.0.0.1:8000;
pelayan 127.0.0.1:8001;
pelayan 127.0.0.21: 8 ;
}
pelayan {
dengar 80;
server_name example.com;
lokasi / {
proxy_pass http://backend;
}
}
Konfigurasi Nginx di atas menentukan pengimbang beban bernama backend, yang mengandungi alamat dan nombor port bagi tiga pelayan backend. Apabila permintaan tiba, Nginx akan mengedarkannya kepada mana-mana pelayan bahagian belakang di bahagian belakang. Untuk aplikasi PHP, penggunaan berbilang contoh boleh dicapai dengan mendengar port yang berbeza dalam pelayan web dan memulakan pelbagai proses aplikasi.
Jika anda tidak mahu menggunakan pelayan web sebagai pengimbang beban, maka kami juga boleh memilih untuk menggunakan beberapa perpustakaan pengimbang beban khusus. Sebagai contoh, pengimbangan beban algoritma round-robin boleh dilaksanakan dengan mudah menggunakan perpustakaan round-robin. Dalam aplikasi PHP, kami boleh menambah pelaksanaan pengimbang beban pada kod yang menanyakan contoh perkhidmatan untuk mengedarkan permintaan dalam cara pengundian:
1296b83b14fc767b699738fdbe684560 $consul_host]); // Nyatakan alamat Konsul
$respons = $client->get("/v1/catalog/service/{$service_id}") ; maklumat perkhidmatan
$data = json_decode($response->getBody(), true); // Parse response
$addresses = array_map(function ($item) {
return $item ['Alamat' ];
}, $data);
$lb = new LoadBalancer($addresses); // Buat objek pengimbang beban
$address = $lb->next();
?>
Coretan kod di atas mentakrifkan kelas LoadBalancer, di mana kaedah seterusnya() melaksanakan pengimbangan beban algoritma pengundian. Dalam kod yang menanyakan contoh perkhidmatan, kami mula-mula menghuraikan respons daripada Konsul dan mendapatkan senarai alamat contoh perkhidmatan, dan kemudian mencipta objek pengimbang beban. Pada setiap permintaan pengedaran, kami menggunakan kaedah next() pengimbang beban untuk mendapatkan alamat seterusnya dan menggunakannya sebagai alamat sasaran permintaan. Dengan cara ini, algoritma pengimbangan beban mudah boleh dilaksanakan.
Ringkasnya, penemuan perkhidmatan dan pengimbangan beban ialah komponen penting untuk membina API yang tersedia dan berprestasi tinggi. Dalam PHP, ia boleh dilaksanakan menggunakan alat penemuan perkhidmatan seperti Konsul dan pengimbang beban seperti HAProxy/Nginx. Pada masa yang sama, anda juga boleh menggunakan beberapa perpustakaan pengimbang beban khusus untuk melaksanakan algoritma pengimbangan beban mudah. Pembangun perlu memilih alat dan penyelesaian yang sesuai berdasarkan susunan teknologi mereka sendiri dan keperluan sebenar untuk mencapai penemuan perkhidmatan terbaik dan kesan pengimbangan beban.
Atas ialah kandungan terperinci Cara mengendalikan penemuan perkhidmatan dan pengimbangan beban apabila melaksanakan API dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!