Rumah >rangka kerja php >Swoole >Cara menggunakan Swoole untuk melaksanakan pelayan pengimbangan beban HTTP berprestasi tinggi
Cara menggunakan Swole untuk melaksanakan pelayan pengimbangan beban HTTP berprestasi tinggi
Dengan peningkatan populariti Internet dan populariti mudah alih peranti, semakin ramai Ramai pengguna menggunakan perkhidmatan Internet. Ini juga telah membawa kepada peningkatan tekanan ke atas perkhidmatan Internet, yang memerlukan penggunaan teknologi pengimbangan beban untuk mengimbangi beban pelayan bagi memastikan ketersediaan dan kestabilan perkhidmatan yang tinggi. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Swoole untuk melaksanakan pelayan pengimbangan beban HTTP berprestasi tinggi dan memberikan contoh kod khusus.
1. Apakah itu Swole?
Swoole ialah enjin komunikasi rangkaian tidak segerak, selari, berprestasi tinggi berdasarkan PHP Ia menyediakan API yang serupa dengan mekanisme penembakan acara Node.js. Swoole menyokong protokol TCP/UDP/Unix Socket dan boleh digunakan untuk membangunkan pelbagai senario aplikasi seperti klien/pelayan, pelayan permainan, Internet of Things dan aplikasi Web.
2. Seni bina pelayan pengimbangan beban HTTP
Seni bina pelayan pengimbangan beban HTTP biasa termasuk pengimbangan beban empat lapisan dan pengimbangan beban tujuh lapisan.
Pengimbangan beban Lapisan 4 menggunakan alamat IP dan nombor port untuk menentukan penghalaan permintaan. Kelebihannya ialah ia pantas, tetapi kelemahannya ialah ia tidak boleh dihalakan berdasarkan kandungan permintaan.
Pengimbangan beban Lapisan 7 menggunakan maklumat seperti URL dan pengepala untuk menentukan penghalaan permintaan. Kelebihannya ialah ia boleh dialihkan mengikut kandungan permintaan, tetapi kelemahannya ialah prestasinya lebih rendah sedikit.
Dalam artikel ini, kami akan menggunakan pengimbangan beban tujuh lapisan untuk melaksanakan pelayan pengimbangan beban HTTP.
3. Pelaksanaan pelayan pengimbangan beban HTTP
Kami akan menggunakan Swoole untuk melaksanakan pelayan pengimbangan beban HTTP. Berikut ialah langkah-langkah untuk melaksanakan pelayan pengimbangan beban HTTP:
(1) Cipta pengimbang beban
Kami menggunakan komponen Pelayan Swoole untuk mencipta pelayan pengimbangan beban HTTP, kod adalah seperti berikut: #🎜 🎜#
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $http->on("start", function ($server) { echo "Swoole http server is started at http://0.0.0.0:9501 "; }); $http->on("request", function ($request, $response) { $response->header("Content-Type", "text/plain"); $response->end("Hello World "); }); $http->start();(2) Tambahkan pelayan bahagian belakang dalam pengimbang bebanKami menggunakan kaedah addServer Swoole untuk menambah pelayan bahagian belakang Selepas permintaan mencapai beban pengimbang, pengimbang beban akan Algoritma pengimbangan beban memajukan permintaan ke salah satu pelayan bahagian belakang untuk diproses. Kodnya adalah seperti berikut:
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $http->on("workerStart", function ($server, $worker_id) { if ($worker_id == 0) { $server->addServer("0.0.0.0", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $server->addServer("0.0.0.0", 9503, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $server->addServer("0.0.0.0", 9504, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); } }); $http->on("request", function ($request, $response) { $response->header("Content-Type", "text/plain"); $response->end("Hello World "); }); $http->start();(3) Laksanakan algoritma pengimbangan beban Kami juga perlu melaksanakan algoritma pengimbangan beban untuk mengagihkan permintaan secara sama rata kepada pelbagai pelayan bahagian belakang . Artikel ini menggunakan algoritma tinjauan pendapat yang paling mudah untuk mengedarkan permintaan kepada pelayan bahagian belakang secara bulat. Kodnya adalah seperti berikut:
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $servers = [ ["host" => "127.0.0.1", "port" => 9502], ["host" => "127.0.0.1", "port" => 9503], ["host" => "127.0.0.1", "port" => 9504], ]; $current = 0; $http->on("workerStart", function ($server, $worker_id) use ($servers, &$current) { if ($worker_id == 0) { foreach ($servers as $server) { $server_id = $server["host"] . ":" . $server["port"]; $server = $server["host"]; $port = $server["port"]; $server = $server->addserver($server, $port, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $server->set(array( 'open_length_check' => true, 'package_max_length' => 81920, 'package_length_type' => 'N', 'package_body_offset' => 16, 'package_length_offset' => 0, )); $server->on('receive', function ($server, $fd, $reactor_id, $data) use ($server_id) { echo "Receive data from $server_id: $data "; $server->send($fd, "Hello, I'm $server_id "); }); } } }); $http->on("request", function ($request, $response) use ($servers, &$current) { $server = $servers[$current]; $host = $server["host"]; $port = $server["port"]; $current = ($current + 1) % count($servers); $client = new SwooleClient(SWOOLE_TCP); $client->connect($host, $port, 0.5); $client->send($request->rawcontent()); $response->end($client->recv()); }); $http->start();4. Uji pelayan pengimbangan beban HTTP Kami boleh menggunakan arahan curl untuk menghantar permintaan HTTP untuk menguji prestasi pengimbangan beban HTTP pelayan. Kami menganggap bahawa alamat IP pelayan pengimbangan beban HTTP ialah 127.0.0.1 dan nombor port ialah 9501. Kami boleh menghantar permintaan HTTP menggunakan arahan berikut:
curl -v "http://127.0.0.1:9501/"Jika semuanya berjalan lancar, pelayan pengimbangan beban HTTP harus mengembalikan respons yang serupa dengan Hello World. Apabila pelayan bahagian belakang menerima permintaan, log yang serupa dengan Terima data daripada 127.0.0.1:9502: GET / HTTP/1.1 juga akan dikeluarkan. Anda boleh menggunakan log ini untuk mengesahkan sama ada algoritma pengimbangan beban HTTP berkesan. 5. Ringkasan Dalam artikel ini, kami memperkenalkan cara menggunakan Swoole untuk melaksanakan pelayan pengimbangan beban HTTP berprestasi tinggi dan memberikan contoh kod khusus. Swoole menyediakan pengaturcaraan rangkaian lengkap dan sokongan coroutine tak segerak, yang boleh membantu pembangun melaksanakan aplikasi dan perkhidmatan web berprestasi tinggi dan berkonkurensi tinggi. Saya harap artikel ini akan membantu semua orang untuk belajar dan bekerja.
Atas ialah kandungan terperinci Cara menggunakan Swoole untuk melaksanakan pelayan pengimbangan beban HTTP berprestasi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!