Keduanya menyediakan fungsi yang kira-kira sama. Mana yang harus saya pilih untuk mengembangkan server TCP kinerja tinggi saya? Apa kelebihan dan kekurangannya?
Tautan referensi:
Apache MINA ( sumber )
Keduanya menyediakan fungsi yang kira-kira sama. Mana yang harus saya pilih untuk mengembangkan server TCP kinerja tinggi saya? Apa kelebihan dan kekurangannya?
Tautan referensi:
Apache MINA ( sumber )
Jawaban:
Meskipun MINA dan Netty memiliki ambisi yang sama, mereka sangat berbeda dalam praktiknya dan Anda harus mempertimbangkan pilihan Anda dengan cermat. Kami beruntung karena kami memiliki banyak pengalaman dengan MINA dan memiliki waktu untuk bermain-main dengan Netty. Kami terutama menyukai API yang lebih bersih dan dokumentasi yang jauh lebih baik. Performanya juga tampak lebih baik di atas kertas. Lebih penting lagi, kami tahu bahwa Trustin Lee akan siap menjawab semua pertanyaan yang kami miliki, dan dia tentu saja melakukannya.
Kami menemukan segalanya lebih mudah di Netty. Titik. Sementara kami mencoba menerapkan kembali fungsi yang sama dengan yang sudah kami miliki di MINA, kami melakukannya dari awal. Dengan mengikuti dokumentasi dan contoh-contoh yang bagus kami berakhir dengan lebih banyak fungsionalitas dalam kode yang jauh lebih sedikit.
Pipa Netty bekerja lebih baik untuk kita. Entah bagaimana itu lebih sederhana daripada MINA, di mana semuanya adalah handler dan terserah Anda untuk memutuskan apakah akan menangani acara hulu, acara hilir, keduanya atau mengkonsumsi lebih banyak barang tingkat rendah. Menggigit byte dalam decoder "replaying" hampir menyenangkan. Itu juga sangat bagus untuk dapat mengkonfigurasi ulang pipa on-the-fly dengan mudah.
Tapi daya tarik bintang Netty, imho, adalah kemampuan untuk membuat penangan pipa dengan "cakupan satu". Anda mungkin telah membaca tentang penjelasan cakupan ini sudah dalam dokumentasi, tetapi pada dasarnya itu memberi Anda negara bagian dalam satu baris kode. Tanpa main-main, tidak ada peta sesi, sinkronisasi dan hal-hal seperti itu, kami hanya dapat mendeklarasikan variabel biasa (katakanlah, "nama pengguna") dan menggunakannya.
Tapi kemudian kami menabrak penghalang jalan. Kami sudah memiliki server multi-protokol di bawah MINA, di mana protokol aplikasi kami menggunakan TCP / IP, HTTP, dan UDP. Ketika kami beralih ke Netty kami menambahkan SSL dan HTTPS ke daftar dalam hitungan menit! Sejauh ini bagus, tetapi ketika sampai di UDP kami menyadari bahwa kami telah tergelincir. MINA sangat baik bagi kami karena kami dapat memperlakukan UDP sebagai protokol "terhubung". Di bawah Netty tidak ada abstraksi semacam itu. UDP tidak terhubung dan Netty memperlakukannya demikian. Netty memaparkan lebih banyak sifat tanpa koneksi UDP pada tingkat yang lebih rendah daripada MINA. Ada hal-hal yang dapat Anda lakukan dengan UDP di bawah Netty daripada yang tidak dapat Anda lakukan di bawah abstraksi tingkat tinggi yang disediakan MINA, tetapi yang menjadi sandaran kami.
Tidaklah mudah untuk menambahkan pembungkus "UDP terhubung" atau apalah. Mengingat keterbatasan waktu dan atas saran Trustin bahwa cara terbaik untuk melanjutkan adalah dengan mengimplementasikan penyedia transportasi kami sendiri di Netty, yang tidak akan cepat, kami harus meninggalkan Netty pada akhirnya.
Jadi, perhatikan perbedaan di antara mereka dan cepatlah ke tahap di mana Anda dapat menguji fungsionalitas rumit yang berfungsi seperti yang diharapkan. Jika Anda puas bahwa Netty akan melakukan pekerjaan itu, maka saya tidak akan ragu untuk melakukannya dengan MINA. Jika Anda pindah dari MINA ke Netty maka hal yang sama berlaku, tetapi perlu dicatat bahwa kedua API benar-benar berbeda secara signifikan dan Anda harus mempertimbangkan penulisan ulang virtual untuk Netty - Anda tidak akan menyesal!
sumber
MINA memiliki lebih banyak fitur out-of-the-box dengan biaya kompleksitas dan kinerja yang relatif buruk. Beberapa fitur diintegrasikan ke dalam inti terlalu ketat untuk dihapus bahkan jika mereka tidak diperlukan oleh pengguna. Di Netty, saya mencoba mengatasi masalah desain seperti itu sambil mempertahankan kekuatan MINA yang diketahui.
Saat ini, sebagian besar fitur yang tersedia di MINA juga tersedia di Netty. Menurut saya, Netty memiliki API yang lebih bersih dan lebih terdokumentasi karena Netty adalah hasil dari upaya membangun kembali MINA dari awal dan mengatasi masalah yang diketahui. Jika Anda menemukan bahwa fitur penting tidak ada, jangan ragu untuk mengirim saran Anda ke forum. Dengan senang hati saya akan menyampaikan kekhawatiran Anda.
Penting juga untuk dicatat bahwa Netty memiliki siklus pengembangan yang lebih cepat. Cukup, periksa tanggal rilis dari rilis terbaru. Juga, Anda harus mempertimbangkan bahwa tim MINA akan melanjutkan ke penulisan ulang besar, MINA 3, yang berarti mereka akan menghancurkan kompatibilitas API sepenuhnya.
sumber
Kinerja saya menguji 2 implementasi "Google Protobuffer RPC" di mana satu didasarkan pada Netty (netty-protobuf-rpc) dan yang lainnya berdasarkan mina (protobuf-mina-rpc). Netty akhirnya secara konsisten lebih cepat (+ - 10%) untuk semua ukuran pesan - yang mendukung klaim kinerja keseluruhan di situs web Netty. Karena Anda ingin memeras setiap bit efisiensi dari kode Anda ketika Anda menggunakan perpustakaan RPC, saya akhirnya menulis protobuf-rpc-pro berdasarkan Netty. Saya telah menggunakan MINA di masa lalu, tetapi menemukan dokumentasi mereka tentang barang-barang 2.0 memiliki lubang besar, dan melanggar kompatibilitas API mundur minus besar.
sumber
MINA dan Netty awalnya dirancang dan dibangun oleh penulis yang sama. Itu sebabnya mereka begitu mirip satu sama lain. MINA dirancang pada tingkat yang sedikit lebih tinggi dengan sedikit lebih banyak fitur, sementara Netty sedikit lebih cepat. Saya pikir tidak ada banyak perbedaan sama sekali, konsep dasarnya sama.
sumber
Di situs Netty Anda dapat menemukan beberapa laporan kinerja . Seperti yang diharapkan :-) mereka menunjukkan Netty sebagai kerangka kerja dengan kinerja terbaik.
Saya tidak pernah menggunakan Netty, tetapi saya sudah menggunakan MINA untuk mengimplementasikan protokol TCP. Implementasi encoding dan decoding mudah, tetapi implementasi mesin negara tidak begitu mudah. MINA menyediakan beberapa kelas untuk membantu Anda ketika menerapkan mesin negara, tetapi saya menemukan mereka agak sulit digunakan. Pada akhirnya kami memutuskan untuk membuang MINA dan mengimplementasikan protokol dari awal, dan anehnya kami berakhir dengan server yang lebih cepat.
sumber
Saya lebih suka Netty.
Twitter juga memilih Netty untuk membangun Sistem Pencarian baru dan mempercepatnya hingga 3x lebih cepat.
Ref: Pencarian Twitter Sekarang 3x Lebih Cepat
sumber
Saya hanya pernah menggunakan MINA untuk membangun server kecil seperti http. Masalah terbesar yang saya temui sejauh ini:
Hal-hal baik tentang itu:
sumber