¿Cuáles son los mayores pros y contras de Apache Thrift vs Protocol Buffers de Google ?
¿Cuáles son los mayores pros y contras de Apache Thrift vs Protocol Buffers de Google ?
Respuestas:
Ambos ofrecen muchas de las mismas características; sin embargo, hay algunas diferencias:
Set
tipo incorporadoBásicamente, son bastante equivalentes (con Protocol Buffers ligeramente más eficientes de lo que he leído).
map
también
Otra diferencia importante son los idiomas admitidos por defecto.
Ambos podrían extenderse a otras plataformas, pero estos son los enlaces de idiomas disponibles listos para usar.
RPC es otra diferencia clave. Thrift genera código para implementar clientes y servidores RPC donde Protocol Buffers parece diseñado principalmente como un formato de intercambio de datos solo.
option optimize_for = SPEED
.Para ver más de cerca las diferencias, consulte las diferencias de código fuente en este proyecto de código abierto .
Como dije como tema "Thrift vs Protocol buffers" :
En referencia a Thrift vs Protobuf vs JSON comparación :
Además, hay muchas herramientas adicionales interesantes disponibles para esas soluciones, que podrían decidir. Estos son ejemplos de Protobuf: Protobuf-wireshark , protobufeditor .
Protocol Buffers parece tener una representación más compacta, pero esa es solo una impresión que obtengo al leer el documento técnico de Thrift. En sus propias palabras:
Decidimos optar por algunas optimizaciones de almacenamiento extremas (es decir, empaquetar enteros pequeños en ASCII o usar un formato de continuación de 7 bits) por simplicidad y claridad en el código. Estas alteraciones se pueden hacer fácilmente si encontramos un caso de uso crítico para el rendimiento que lo exige.
Además, puede ser solo mi impresión, pero Protocol Buffers parece tener algunas abstracciones más gruesas en torno a las versiones de estructura. Thrift tiene cierto soporte de versiones, pero se necesita un poco de esfuerzo para que esto suceda.
Pude obtener un mejor rendimiento con un protocolo basado en texto en comparación con protobuff en python. Sin embargo, no hay verificación de tipos u otras sofisticadas conversiones utf8, etc. que ofrece protobuff.
Entonces, si la serialización / deserialización es todo lo que necesita, entonces probablemente pueda usar algo más.
http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html
Una cosa obvia que aún no se menciona es que puede ser tanto un pro o un contra (y es lo mismo para ambos) es que son protocolos binarios. Esto permite una representación más compacta y posiblemente más rendimiento (pros), pero con una legibilidad reducida (o más bien, depuración), una desventaja.
Además, ambos tienen un poco menos de soporte de herramientas que los formatos estándar como xml (y tal vez incluso json).
(EDITAR) Aquí hay una comparación interesante que aborda las diferencias de tamaño y rendimiento, e incluye números para algunos otros formatos (xml, json) también.
Y según la wiki, el tiempo de ejecución de Thrift no se ejecuta en Windows.
ProtocolBuffers es MÁS RÁPIDO.
Aquí hay un buen punto de referencia:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
También es posible que desee ver Avro, ya que Avro es aún más rápido.
Microsoft tiene un paquete aquí:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro
Por cierto, el más rápido que he visto es Cap'nProto ;
La implementación de AC # se puede encontrar en el repositorio de Github de Marc Gravell .
Creo que la mayoría de estos puntos han pasado por alto el hecho básico de que Thrift es un marco RPC, que tiene la capacidad de serializar datos utilizando una variedad de métodos (binario, XML, etc.).
Protocol Buffers están diseñados exclusivamente para la serialización, no es un marco como Thrift.
Por un lado, protobuf no es una implementación completa de RPC. Requiere algo como gRPC para acompañarlo.
gPRC es muy lento en comparación con Thrift:
Hay algunos puntos excelentes aquí y voy a agregar otro en caso de que alguien se cruce aquí.
Thrift te ofrece la opción de elegir entre serializador (de) thrift-binary y thrift-compact, thrift-binary tendrá un excelente rendimiento pero un tamaño de paquete más grande, mientras que thrift-compact te dará una buena compresión pero necesita más potencia de procesamiento. Esto es útil porque siempre puede cambiar entre estos dos modos tan fácilmente como cambiar una línea de código (diablos, incluso hacerlo configurable). Por lo tanto, si no está seguro de cuánto debe optimizarse su aplicación para el tamaño del paquete o la potencia de procesamiento, el ahorro puede ser una opción interesante.
PD: vea este excelente proyecto de referencia mediante el thekvs
cual compara muchos serializadores, incluidos thrift-binary, thrift-compact y protobuf: https://github.com/thekvs/cpp-serializers
PD: Hay otro serializador llamado YAS
que también ofrece esta opción, pero no tiene esquema. Vea el enlace de arriba.
También es importante tener en cuenta que no todos los idiomas compatibles se comparan consistentemente con el ahorro o el protofoto. En este punto, se trata de la implementación de módulos, además de la serialización subyacente. Asegúrese de verificar los puntos de referencia para cualquier idioma que planee usar.