Percepatlah Proyek Laravel Anda Menggunakan Laravel Octane & Swoole Server
Seperti yang sudah kita ketahui, framework Laravel memberi kita banyak fitur. Ini juga memiliki banyak paket yang dapat kita gunakan untuk membangun aplikasi hebat berikutnya. Tapi, ini pertanyaan untuk diri sendiri. Tahukah Anda bagaimana siklus hidup Laravel bekerja? Hal ini penting bagi kami, sebagai pengembang, karena jika kami memahami cara kerjanya, kami dapat lebih memahami apa yang ada di sini dan apa yang hilang, dan mungkin kami dapat memperluas fungsionalitas lebih lanjut.
Siklus hidup Laravel cukup rumit untuk dijelaskan dalam artikel singkat ini, tetapi izinkan saya menjelaskan dengan cara ini. Setiap permintaan yang masuk ke aplikasi kita, akan mulai mengeksekusi public/index.php sebagai titik awal. Dari file indeks ini, permintaan akan diteruskan ke Kernel HTTP/Konsol, Penyedia Layanan, Perutean, dan akhirnya mengirim kembali respons ke pengguna. Anda dapat melihat siklus hidup terperinci dalam dokumentasi di sini. Pada langkah-langkah di atas, Laravel akan mengeksekusi, memuat, dan mengkompilasi beberapa skrip. Kemudian, ketika respons dikirim kembali, semua instance akan dimusnahkan.
Untungnya, Swoole datang untuk membantu. Dan baru-baru ini, Laravel menerbitkan paket resmi baru bernama Laravel Octane yang menggunakan Swoole sebagai salah satu server aplikasinya. Apa yang dilakukan Swoole adalah menyimpan skrip/wadah yang dikompilasi ke dalam memori, untuk digunakan kembali nanti dan siap menerima permintaan berikutnya. Dengan fitur tersebut, aplikasi Anda tidak perlu mengkompilasi ulang skrip berulang kali.
Sebelum kita melanjutkan, apa itu Swoole?
Swoole adalah paket untuk PHP yang dibangun dengan C di mana ia menawarkan banyak fitur seperti Coroutine, soket web, dan banyak lagi. Dengan coroutine, kita dapat membangun PHP secara asynchronous sehingga akan jauh lebih efisien daripada yang tradisional. Juga, ada beberapa fitur lain seperti Tabel Swoole yang kita dapat membangun soket web kita sendiri di atasnya. Anda mungkin perlu melihat detail fitur Swoole di sini https://www.swoole.co.uk.
Maka pada artikel kali ini saya ingin melakukan benchmark/perbandingan sederhana antara menjalankan aplikasi Laravel 8 menggunakan Artisan Serve dan menggunakan Swoole.
Gambaran Konten
- Instalasi Laravel Octane
- Benchmark: Permintaan Web
- Benchmark: Permintaan API
#1 Instalasi Octane Laravel
Ada beberapa prasyarat untuk menginstal Laravel Octane ke dalam aplikasi kita. Hal pertama adalah, pastikan Anda memiliki PHP versi 8 karena diperlukan dari paket.
php -v
PHP 8.0.6 (cli) (built: May 13 2021 22:39:30) ( NTS )
Hal kedua adalah, pastikan Anda telah menginstal Swoole ke dalam ekstensi PHP Anda. Anda dapat menginstal Swoole menggunakan pecl.
pecl install swoole
Atau jika Anda mengalami kesulitan saat menginstal Swoole, pertimbangkan untuk melihat dokumentasi resmi di sini https://www.swoole.co.uk/docs/get-started/installation.
Kemudian, kita perlu menginstal paket Laravel Octane ke dalam proyek kita dan mengaktifkan Swoole.
composer require laravel/octane
php artisan octane:install
Hal terakhir yang harus dilakukan, kita dapat memulai server menggunakan Swoole
php artisan octane:start
Itu saja, sekarang server Anda berjalan menggunakan server Swoole dan siap menerima permintaan.
#2 Banchmark: Permintaan Web
Perbandingan pertama yang ingin saya lakukan adalah yang sederhana. Saya akan menjalankan Laravel menggunakan Artisan Serve dan membandingkannya menggunakan server Swoole. Saya tidak akan mengubah apa pun di dalam rute web, yang berarti ini akan menjadi halaman selamat datang default Laravel.
Untuk benchmark, saya menggunakan ApacheBench di terminal dengan perintah ini:
ab -n 1000 -c 100 http://localhost:8000/
Perintah di atas berarti akan ada 1000 permintaan dengan 100 konkurensi.
Berikut hasil dari Swoole Server:
Hasil dari Artisan Servis:
Dari benchmark sederhana di atas, kita dapat melihat bahwa untuk 1000 request dengan 100 concurrency, dibutuhkan 0,452 detik untuk Swoole dan 4,531 detik untuk Artisan Serve. Lalu, untuk total request per second yang bisa ditangani: Swoole bisa menangani 2214 request per second, dimana Artisan Serve hanya bisa menangani 220 request per second. Angka-angka itu membuktikan bahwa mereka memiliki beberapa kesenjangan besar dalam kinerja, hingga 10x lebih cepat menggunakan Swoole.
Artikel Terkait Lainnya :
#3 Permintaan API Banchmark
Untuk benchmark API, ini akan menjadi endpoint /test sederhana yang mengembalikan string "Hello World". Saya akan menempatkan Lumen juga di benchmark ini karena Lumen mengklaim memiliki kinerja yang lebih baik dibandingkan dengan Laravel. Mari kita lihat hasilnya:
Server Swoole Laravel:
Laravel Artisan Serve:
Lumen Artisan Serve:
Berdasarkan benchmark di atas, kita dapat melihat bahwa kinerja Lumen mirip dengan Swoole. Lumen dapat menangani 1168 permintaan per detik dan menyelesaikan tugas dalam 856 md, dibandingkan dengan Swoole dengan 1687 permintaan per detik dan 593 md untuk menyelesaikan tugas.
Sayangnya, saat ini Laravel Octane tidak mendukung aplikasi Lumen, sehingga kita tidak bisa melihat performa Lumen saat dijalankan menggunakan Swoole. Tapi, berdasarkan angka di atas, kinerja Swoole sedikit lebih baik daripada mikro-framework Lumen.
Setelah melihat kemampuan Swoole dari angka-angka di atas, bagaimana menurut Anda? Apakah itu layak untuk dicoba? Perhatikan bahwa fitur Laravel Octane tidak hanya terbatas untuk melayani server di atas Swoole. Sebaliknya, Laravel Octane memiliki banyak fitur yang didukung oleh Swoole, sehingga pasti akan membuat aplikasi Anda lebih cepat dan efisien. Saya harap artikel ini dan perbandingannya dapat membantu Anda memahami apa yang dapat dilakukan Laravel Octane & Swoole dalam proyek Anda.