Estoy interesado en desarrollar un sitio web a gran escala orientado al usuario escrito en Java.
En cuanto al diseño, estoy pensando en desarrollar servicios modulares independientes que puedan actuar como proveedores de datos para mi aplicación web principal.
En cuanto a la escritura de estos servicios modulares (proveedores de datos), puedo aprovechar un marco existente como Spring y desarrollar estos servicios siguiendo el patrón de diseño RESTful, y exponer recursos a través de HTTP con un formato de mensaje como JSON ... o puedo aprovechar una red existente marco como Netty ( http://netty.io/ ) y el formato de serialización como Protobufs ( https://developers.google.com/protocol-buffers/docs/overview ) y desarrollan un servidor TCP que envía de ida y vuelta el protobuf serializado carga útil.
¿Cuándo debes elegir uno sobre el otro? ¿Sería beneficioso usar un formato de serialización como Protobufs y enviar un flujo de bytes a través del cable? ¿Habría una sobrecarga al usar JSON? ¿Cuánta sobrecarga hay entre usar TCP / IP y HTTP? ¿Cuándo debería usar Spring sobre Netty, y viceversa para construir dicho servicio?
Respuestas:
Definitivamente hay ventajas y desventajas sobre el uso de JSON sobre REST frente a TCP / IP directo con protocolo binario y creo que ya sospecha que el protocolo binario será más rápido. No puedo decir exactamente cuánto más rápido (y esto dependería de muchos factores), pero supongo que tal vez una diferencia de 1-2 órdenes de magnitud.
A primera vista, si algo es 10-100 veces más lento que otra cosa, es posible que tenga una reacción instintiva e intente "algo rápido". Sin embargo, esta diferencia de velocidad es solo en el protocolo en sí. Si hay acceso a la base de datos / archivos en el lado del servidor, eso no se verá afectado por la elección de la capa de transferencia. En algunos casos, puede hacer que la velocidad de la capa de transferencia sea mucho menos significativa.
HTTP REST y JSON son buenos por varias razones:
Protobufs sobre TCP / IP:
Si fuera mi elección, sin duda iría con HTTP REST y JSON. Hay una razón por la que muchas otras compañías y sitios web tomaron esa ruta. También tenga en cuenta que en el futuro siempre podría admitir 2 puntos finales. Si su diseño es correcto, su elección de punto final debe estar completamente desacoplada de la lógica de negocios del lado del servidor o de la base de datos. Entonces, si luego se da cuenta de que necesita más velocidad para todas / algunas solicitudes, debería poder agregar protobufs con un mínimo de alboroto. Sin embargo, REST / JSON lo levantará del suelo más rápido y lo llevará más lejos.
En cuanto a Netty vs Spring. No he usado Netty directamente, pero creo que es solo un servidor web liviano donde Spring es un marco que proporciona mucho más para ti que eso. Tiene capas de acceso a datos, programación de trabajos en segundo plano y (creo) un modelo MVC, por lo que es mucho más pesado. ¿Cuál elegir? Si decidió seguir el camino HTTP, entonces la siguiente pregunta es, ¿qué tan estándar es su aplicación? Si está a punto de escribir una lógica personalizada loca que no se ajusta al molde estándar y todo lo que necesita es solo una capa de servidor HTTP, vaya con Netty.
Sin embargo, sospecho que su aplicación no es tan especial y probablemente podría beneficiarse de muchas cosas que Spring tiene para ofrecer. Pero eso significa que debe estructurar su aplicación en torno al marco de Spring y hacer las cosas como ellos esperan que haga, lo que significaría aprender más sobre Spring antes de sumergirse en su producto. Los marcos en general son geniales porque nuevamente te hacen despegar más rápido, pero la desventaja es que tienes que encajar en su molde en lugar de hacer tu propio diseño y luego esperar que el marco funcione.
(*) - en el pasado se señaló que mis publicaciones no reflejan las opiniones del mundo entero, así que iré al registro y solo agregaré que tengo una experiencia limitada con Netty (he usado el marco de Play antes que se basa en Netty) o Spring (solo he leído sobre eso). Así que toma lo que digo con un grano de sal.
fuente
Esto no es una pregunta real. Según el conjunto de protocolos de Internet, tcp es un protocolo en la capa de transporte y http es un protocolo en la capa de aplicación. Estás comparando cosas totalmente diferentes entre sí. (Ver más aquí: http://en.wikipedia.org/wiki/Internet_protocol_suite )
De hecho, la mayoría de http está sobre tcp / ip. Entonces, para responder a su pregunta, sí, debe usar tcp / ip. Luego, desea agregar un protocolo de capa de aplicación sobre eso (como http) y luego un formato de datos (como json, xml, html). Netty te permite usar http y protobuff es igual a json, xml, html.
Todo depende de cuáles sean sus requisitos y qué tipo de datos necesitará transportar. ¿Necesita sesiones en su protocolo, puede un apretón de manos mejorar la configuración de su protocolo, cuántos datos enviará a la vez, necesita cifrado? Estas son preguntas que debe responder al elegir un protocolo de aplicación.
Para elegir un formato de representación de datos (json, xml, html, protobuff, etc.) depende de su ancho de banda, legibilidad, soporte de idioma / herramienta, etc.
No puede comparar http con tcp.
Recuerda que la velocidad no lo es todo. La velocidad no sirve de nada si no puede expresarse de manera sensata.
fuente