Dalam aplikasi kita, kita perlu membangun server HTTP di mana, saat startup, sekitar 1.600 koneksi HTTP persisten dibuka oleh berbagai server jarak jauh, dan aliran ribuan permintaan HTTP POST dikirim ke setiap koneksi secara berurutan selama sekitar 30 detik - kita hanya perlu beberapa milidetik untuk merespons tiap detik. Setelah 30 detik, koneksi ditutup dan koneksi lainnya dibuka.
Kami memilih Netty karena menurut sebagian besar akun, Netty sangat cocok untuk membangun server HTTP yang efisien.
Dalam mengimplementasikan server HTTP kami, kami mengikuti Mengintip contoh server HTTP Netty.
Sayangnya kami mengalami masalah yang mungkin disebabkan oleh kelebihan beban Netty, sehingga kami mempertimbangkan kembali apakah Netty sudah dikonfigurasi dengan benar, khususnya dalam cara penanganan thread. Kami mengkonfigurasi server sebagai berikut:
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
Saat kami menerima permintaan, kami menanganinya dalam thread yang sama yang memanggil messageReceived() di SimpleChannelUpstreamHandler kami.
Haruskah pendekatan ini berhasil dalam aplikasi kita?
edit: Rata-rata beban pada kotak saat kegagalan terjadi adalah 0,05, sehingga sangat rendah. Saya telah mengalokasikan 4GB untuk proses Java tetapi hampir tidak menggunakan semua itu. Jadi, pada dasarnya, kotak tersebut kekurangan muatan.