Dalam aplikasi web berbasis Spring Boot, paket spring-boot mencakup server web bawaan, termasuk tomcat, jetty, undertow, dan netty.
Pengantar kontainer web umum
Tomcat
Tomcat saat ini termasuk dalam proyek Apache, dan tautan resminya adalahLogin hyperlink terlihat. Tomcat adalah Java Web Server arus utama, sehingga sangat stabil dan matang, dan komunitasnya aktif dan kaya akan dokumentasi dan sumber daya. Tomcat mendukung protokol Http, Http/2, AJP, WebSocket, dan mendukung Servlet 6.0
Jetty
Jetty adalah server yang disediakan oleh Eclipse, tautan resminya adalahLogin hyperlink terlihat. Ini lebih ringan daripada Tomcat dan memiliki dukungan asinkronnya sendiri. Jetty mendukung protokol Http, Http/2, Http/3, AJP, WebSocket, dan mendukung Servlet 6.0
Netty
Netty adalah kerangka kerja jaringan asinkron berbasis waktu yang banyak digunakan dalam aplikasi web berkinerja tinggi, terutama aplikasi sisi server yang menangani sejumlah besar koneksi bersamaan, tautan resminya adalahLogin hyperlink terlihat. Netty mendukung hampir semua protokol, termasuk SSL / TLS, HTTP, HTTP / 2, HTTP / 3, WebSockets, DNS, SPDY, SMTP, dll
Kapal penarik
Undertow adalah server yang disediakan oleh JBoos, alamat resminya adalahLogin hyperlink terlihat. Undertow dicirikan oleh bobotnya yang ringan, kinerja tinggi, dan konsumsi sumber daya lokal, sekaligus mendukung aplikasi tertanam dan layanan mikro. Undertow mendukung protokol Http, Http/2, WebSocket, dan mendukung Servlet 4.0
Apache Tomcat
Apache Tomcat adalah server web dan wadah servlet yang banyak digunakan. Ini adalah pilihan default untuk aplikasi Spring Boot tradisional karena kekokohan, kemudahan penggunaan, dan kompatibilitas dengan API Servlet.
Fitur utama:
Berdasarkan Servlet: Tomcat dibangun di sekitar API Servlet, yang membuatnya ideal untuk aplikasi Spring MVC tradisional. Pemblokiran I/O: Tomcat beroperasi pada model satu utas per permintaan, yang berarti bahwa setiap permintaan masuk ditangani oleh utas terpisah. Konfigurasi Mudah: Tomcat dapat dengan mudah diatur dan dikonfigurasi dengan Spring Boot, menjadikannya ideal untuk berbagai aplikasi web.
Arsitektur internal
Konektor: Kelola koneksi jaringan, terima, dan proses permintaan HTTP. Kontainer: Bertanggung jawab atas manajemen siklus hidup servlet, termasuk pemuatan, inisialisasi, dan pemanggilan. Model Utas: Tomcat menggunakan kumpulan utas, di mana setiap permintaan ditangani oleh utas terpisah dalam kumpulan. Model ini sederhana tetapi dapat menyebabkan masalah skalabilitas di bawah beban tinggi karena perselisihan utas dan overhead memori.
Contoh skenario: Menangani permintaan paralel
Mari kita pertimbangkan skenario di mana lima permintaan paralel tiba di server Tomcat:
Satu utas per permintaan: Tomcat menetapkan utas terpisah untuk masing-masing dari lima permintaan dari kumpulan utasnya. Memblokir I/O: Setiap utas memproses permintaannya secara sinkron, memblokir jika ada operasi I/O yang diperlukan, seperti panggilan database.
Manajemen sumber daya: Jika kumpulan utas memiliki utas gratis yang cukup, kelima permintaan diproses secara bersamaan. Jika tidak, permintaan lain akan menunggu dalam antrean hingga utas tersedia.
Merit:
Sederhana dan mudah dipahami. Ideal untuk aplikasi web tradisional. Matang, stabil, dan dengan dukungan masyarakat yang luas.
Kekurangan:
Skalabilitas terbatas di bawah beban tinggi karena overhead ulir. Konsumsi memori yang lebih tinggi per permintaan.
Netty
Netty adalah kerangka kerja aplikasi web berbasis peristiwa asinkron berkinerja tinggi. Ini adalah kerangka kerja default untuk Spring WebFlux, yang dirancang untuk pemrograman responsif.
Fitur utama:
Berbasis Peristiwa: Netty menggunakan arsitektur berbasis peristiwa, sehingga cocok untuk menangani koneksi simultan dalam volume tinggi secara efisien. I/O non-pemblokiran: Netty menggunakan I/O non-pemblokiran, memungkinkannya menangani banyak koneksi dengan utas yang lebih sedikit. Skalabilitas: Dirancang untuk aplikasi konkurensi tinggi, latensi rendah, dan throughput tinggi.
Arsitektur internal
Perulangan Peristiwa: Komponen inti Netty adalah perulangan peristiwa, yang mengelola operasi I/O secara asinkron. Grup perulangan peristiwa berisi satu atau beberapa perulangan peristiwa. Saluran: Mewakili koneksi, seperti permintaan HTTP masuk, dan dikaitkan dengan perulangan peristiwa. Model Benang: Netty menggunakan sejumlah kecil utas untuk menangani sejumlah besar koneksi. Setiap perulangan peristiwa berjalan dalam satu utas dan menangani beberapa saluran, membuatnya sangat terukur.
Contoh skenario: Menangani permintaan paralel
Pertimbangkan skenario di mana lima permintaan paralel tiba di server Netty:
Model Berbasis Peristiwa: Netty mendistribusikan lima permintaan dalam perulangan peristiwanya. I/O non-pemblokiran: Operasi tidak memblokir utas loop peristiwa. Sebagai gantinya, operasi I/O ditangani secara asinkron, memungkinkan utas yang sama untuk mengelola beberapa koneksi secara efisien.
Skalabilitas: Karena sifatnya yang tidak memblokir, Netty dapat menangani sejumlah besar koneksi dengan jumlah utas yang relatif kecil.
Merit:
Sangat efisien untuk tugas-tugas intensif I/O. Skalabilitas dan kinerja yang unggul pada konkurensi tinggi. Ideal untuk pemrograman reaktif dan aplikasi web modern.
Kekurangan:
Lebih kompleks untuk dipahami dan dikonfigurasi. Dibandingkan dengan aplikasi berbasis servlet tradisional, diperlukan model pemrograman yang berbeda (reaktif).
kesimpulan
Netty dan Tomcat melayani area yang berbeda di bidang kerangka kerja server. Netty adalah kerangka kerja dasar yang sangat fleksibel yang dirancang untuk protokol jaringan khusus dan skenario berkinerja tinggi; Tomcat adalah pilihan yang terbukti untuk aplikasi web Java yang sesuai dengan standar Java EE dan Jakarta EE. Pilihan di antara keduanya tergantung pada kebutuhan spesifik proyek, apakah itu membangun server web dengan protokol khusus atau aplikasi web tradisional.
Referensi:
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat. |