Saya tertarik mengembangkan situs web skala besar yang menghadap pengguna yang ditulis dalam Java.
Sedangkan untuk desain, saya berpikir untuk mengembangkan layanan modular independen yang dapat bertindak sebagai penyedia data untuk aplikasi web utama saya.
Sedangkan untuk menulis layanan modular ini (penyedia data), saya dapat memanfaatkan kerangka kerja yang ada seperti Spring dan mengembangkan layanan ini mengikuti pola desain RESTful, dan mengekspos sumber daya melalui HTTP dengan format pesan seperti JSON ... atau saya dapat memanfaatkan jaringan yang ada kerangka kerja seperti Netty ( http://netty.io/ ) dan format serialisasi seperti Protobufs ( https://developers.google.com/protocol-buffers/docs/overview ) dan kembangkan server TCP yang mengirim bolak-balik protobuf bersambung muatan
Kapan Anda harus memilih satu dari yang lain? Apakah ada manfaat menggunakan format serialisasi seperti Protobufs dan mengirim aliran byte melalui kabel? Apakah akan ada overhead hanya dengan menggunakan JSON? Berapa banyak overhead yang ada antara menggunakan TCP / IP dan menggunakan HTTP? Kapan sebaiknya Anda menggunakan Spring over Netty, dan sebaliknya untuk membangun layanan seperti itu?
Jawaban:
Pasti ada pro / kontra tentang menggunakan JSON lebih dari REST vs lurus TCP / IP dengan protokol biner dan saya pikir Anda sudah curiga bahwa protokol biner akan lebih cepat. Saya tidak dapat memberi tahu Anda dengan tepat seberapa cepat (dan ini akan tergantung pada banyak faktor), tetapi saya kira mungkin 1-2 urutan perbedaan besarnya.
Pada pandangan pertama jika sesuatu 10-100 kali lebih lambat daripada yang lain, Anda mungkin memiliki reaksi spontan dan pergi untuk "hal yang cepat". Namun, perbedaan kecepatan ini hanya ada di protokol itu sendiri. Jika ada akses database / file di sisi server, itu tidak akan terpengaruh oleh pilihan Anda dari lapisan transfer. Dalam beberapa kasus, ini mungkin membuat kecepatan lapisan transfer Anda jauh kurang signifikan.
HTTP REST dan JSON baik untuk sejumlah alasan:
Protobuf melalui TCP / IP:
Jika itu pilihan saya, saya akan menggunakan HTTP REST dan JSON. Ada alasan mengapa begitu banyak perusahaan dan situs web lain yang menggunakan rute itu. Juga perlu diingat bahwa di masa depan Anda selalu dapat mendukung 2 poin akhir. Jika desain Anda benar, pilihan titik akhir Anda harus sepenuhnya dipisahkan dari logika bisnis sisi server atau database. Jadi jika Anda kemudian menyadari bahwa Anda membutuhkan lebih banyak kecepatan untuk semua / beberapa permintaan, Anda harus dapat menambahkan protobuf dengan kerepotan minimal. Namun segera, REST / JSON akan membuat Anda turun lebih cepat dan membuat Anda lebih jauh.
Sejauh Netty vs Spring berlangsung. Saya belum pernah menggunakan Netty secara langsung, tetapi saya percaya itu hanya server web yang ringan, di mana Spring adalah kerangka kerja yang menyediakan lebih banyak untuk Anda daripada hanya itu. Ini memiliki lapisan akses data, penjadwalan pekerjaan latar belakang dan (saya pikir) model MVC, sehingga jauh lebih berat. Yang mana yang harus dipilih? Jika Anda memutuskan untuk menggunakan cara HTTP, maka pertanyaan berikutnya mungkin seberapa standar aplikasi Anda? Jika Anda akan menulis beberapa logika kustom gila yang tidak sesuai dengan cetakan standar dan yang Anda butuhkan hanyalah lapisan server HTTP, ikuti Netty.
Namun, saya curiga aplikasi Anda tidak terlalu istimewa dan mungkin dapat mengambil manfaat dari banyak hal yang ditawarkan Spring. Tetapi itu berarti bahwa Anda harus menyusun aplikasi Anda di sekitar kerangka Spring dan melakukan hal-hal seperti yang mereka harapkan Anda lakukan, yang berarti belajar lebih banyak tentang Spring sebelum menyelami produk Anda. Kerangka kerja secara umum bagus karena sekali lagi mereka membuat Anda lebih cepat, tetapi downside adalah bahwa Anda harus masuk ke cetakan mereka daripada melakukan desain Anda sendiri dan kemudian mengharapkan kerangka kerja hanya berfungsi.
(*) - di masa lalu ditunjukkan bahwa posting saya tidak mencerminkan pendapat seluruh dunia, jadi saya akan melanjutkan dan menambahkan bahwa saya memiliki pengalaman yang terbatas dengan Netty (Saya telah menggunakan kerangka bermain sebelumnya yang didasarkan pada Netty) atau Spring (Saya baru saja membacanya). Jadi, ambil apa yang saya katakan dengan sebutir garam.
sumber
Ini sebenarnya bukan pertanyaan. Menurut suite protokol Internet tcp adalah protokol di lapisan transport dan http adalah protokol di lapisan aplikasi. Anda membandingkan hal-hal yang sangat berbeda satu sama lain. (Lihat lebih lanjut di sini: http://en.wikipedia.org/wiki/Internet_protocol_suite )
Bahkan, sebagian besar http lebih dari tcp / ip. Jadi untuk menjawab pertanyaan Anda, ya Anda harus menggunakan tcp / ip. Kemudian Anda ingin menambahkan protokol lapisan aplikasi di atasnya (seperti http) dan kemudian format data (seperti json, xml, html). Netty membiarkan Anda menggunakan http dan protobuff sama dengan json, xml, html.
Semuanya tergantung pada apa kebutuhan Anda dan jenis data apa yang Anda perlukan untuk transportasi. Apakah Anda memerlukan sesi dalam protocoll Anda, bisakah jabat tangan meningkatkan konfigurasi protokol Anda, berapa banyak data yang akan Anda kirim sekaligus, apakah Anda memerlukan enkripsi? Ini adalah pertanyaan yang perlu Anda jawab ketika memilih protokol aplikasi.
Untuk memilih format representasi data (json, xml, html, protobuff, dll.) Itu tergantung pada bandwidth Anda, keterbacaan, dukungan bahasa / alat dll.
Anda tidak dapat membandingkan http dengan tcp.
Ingat bahwa kecepatan bukanlah segalanya. Kecepatan tidak ada gunanya jika Anda tidak dapat mengekspresikan diri dengan cara yang masuk akal.
sumber