Rumah > rangka kerja php > Swoole > teks badan

Cara menggunakan Swoole untuk melaksanakan pelayan pengimbangan beban HTTP berprestasi tinggi

WBOY
Lepaskan: 2023-11-07 15:12:28
asal
813 orang telah melayarinya

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();
Salin selepas log masuk

(2) Tambahkan pelayan bahagian belakang dalam pengimbang beban

Kami 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();
Salin selepas log masuk

(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();
Salin selepas log masuk

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/"
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan