¿Cuáles son los casos de uso de Thrift, es decir, qué razones hay para considerar el uso de Thrift cuando uno podría confiar en JSON y solicitudes HTTP estándar?

Hay varias razones por las que es posible que desee utilizar Thrift sobre algo como JSON / HTTP.

Mecanografía fuerte . JSON es excelente si está trabajando con lenguajes de script (Python, Ruby, PHP, JS, etc.). Sin embargo, si está creando porciones significativas de su aplicación en un lenguaje fuertemente tipado como C ++ o Java, JSON a menudo se convierte en un poco de dolor de cabeza para trabajar, ofuscando lo que está tratando de hacer en lugar de aclararlo. Thrift le permite trabajar de forma transparente con tipos nativos fuertes y también proporciona un mecanismo para lanzar excepciones a nivel de aplicación a través del cable.

Actuación. El rendimiento es una de las principales consideraciones de diseño de Thrift. JSON / HTTP están mucho más orientados a la legibilidad humana, lo que tiene el costo de hacerlos más intensivos en CPU para trabajar.

Eficiencia de serialización. Si está serializando grandes cantidades de datos, el protocolo binario de Thrift es más eficiente que JSON. (Notaré que definitivamente hay mecanismos más eficientes que Thrift, y también puede ahorrar espacio usando la compresión, por lo que se trata de encontrar una compensación que prefiera entre la facilidad de uso y la sobrecarga de CPU / espacio).

Soporte de versiones. Thrift tiene mecanismos incorporados para versionar datos. Esto puede ser muy útil en un entorno distribuido donde sus interfaces de servicio pueden cambiar, pero no puede actualizar atómicamente todo el código de su cliente y servidor.

Implementaciones de servidor. Thrift incluye implementaciones de servidor RPC para varios idiomas. Debido a que están optimizados para admitir solo solicitudes Thrift, son más livianos y de mayor rendimiento que las implementaciones típicas de servidores HTTP.

Dicho todo esto, creo que HTTP / JSON es una buena opción para muchos proyectos. Agregar una etapa de generación de código complica los procesos de compilación / implementación, y la mayoría de los beneficios clave de Thrift realmente no comienzan a funcionar hasta que está implementando software a una escala significativa y trabajando con al menos un lenguaje fuertemente tipado en su back-end.

En realidad no es una respuesta a la pregunta, pero quería señalar que no tiene que rodar su propio protocolo para hacer RPC con JSON. Hay un estándar bastante sólido llamado JSON-RPC:

http://en.wikipedia.org/wiki/JSO

Esta es la especificación para 2.0:

http://groups.google.com/group/j

Se puede implementar a través de HTTP, TCP desnudo o cualquier cosa realmente.