¿Cuándo son los enfoques RPC-ish más apropiados que REST?

33

Después de ver esta charla sobre REST, Reuse and Serendipity por Steve Vinoski, me pregunto si hay casos de negocios en proyectos nuevos para configuraciones (XML-) RPC-ish, que REST no podría resolver de una mejor manera.

Algunos problemas de RPC que menciona:

  • Concéntrese en el idioma (ajuste el sistema distribuido al idioma, no al revés)
  • "Hacer que parezca local" (y hacer frente a fallas y latencia como excepciones en lugar de la regla)
  • pretende ser independiente del idioma, pero aún tiene "llamadas a funciones" en todos los idiomas como ingrediente principal
  • Placa de IDL
  • Ilusión de seguridad tipo
  • y algunos mas ...

Solo para dramatizarlo un poco, algunos resultados instantáneos de Google para RPC vs REST:

RPC

DESCANSO

miku
fuente

Respuestas:

20

En general, RPC ofrece mucha más integración de lenguaje que REST. Como mencionó, esto viene con una serie de problemas en términos de escala, manejo de errores, seguridad de tipos, etc., especialmente cuando un solo sistema distribuido involucra múltiples hosts que ejecutan código escrito en múltiples idiomas. Sin embargo, después de haber escrito sistemas empresariales que usan RPC, REST e incluso ambos simultáneamente, descubrí que hay algunas buenas razones para elegir RPC en lugar de REST en ciertos casos.

Estos son los casos en los que he encontrado que RPC encaja mejor:

  • Acoplamiento apretado. Los componentes (distribuidos) del sistema están diseñados para trabajar juntos, y cambiar uno probablemente afectará a todos los demás. Es poco probable que los componentes tengan que adaptarse para comunicarse con otros sistemas en el futuro.
  • Comunicación confiable Los componentes se comunicarán entre sí, ya sea completamente en el mismo host o en una red que es poco probable que experimente problemas de latencia, pérdida de paquetes, etc. (Sin embargo, esto todavía significa que necesita diseñar su sistema para manejar estos casos).
  • Lenguaje uniforme Todos los componentes (o casi todos) se escribirán en un solo idioma. Es poco probable que en el futuro se agreguen componentes adicionales escritos en un idioma diferente.

Con respecto al punto sobre IDL, en un sistema REST también debe escribir código que convierta los datos en las solicitudes y respuestas REST a cualquier representación interna de datos que esté utilizando. Las fuentes IDL (con buenos comentarios) también pueden servir como documentación de la interfaz, que debe escribirse y mantenerse por separado para una API REST.

Los tres elementos anteriores a menudo ocurren cuando está buscando construir un componente de un sistema más grande. En mi experiencia, estos componentes son a menudo aquellos en los que sus subsistemas necesitan fallar independientemente y no causar la falla total de otros subsistemas o de todo el componente. Muchos sistemas están escritos en Erlang para lograr estos objetivos también, y en algunos casos Erlang puede ser una mejor opción que escribir un sistema en otro idioma y usar RPC solo para obtener estos beneficios.

Como la mayoría de los problemas de ingeniería, no existe una solución única para el problema de la comunicación entre procesos. Debe mirar el sistema que está diseñando y elegir la mejor opción para su caso de uso.

ndm
fuente
1

Hay algunas ventajas importantes de REST cuando los productos se amplían a través de un centro de datos y se está haciendo una alta disponibilidad y equilibrio de carga.

Sin embargo, piense en un proyecto a menor escala. ¿Necesita un servicio web que tendrá unos cientos de solicitudes por hora? WCF se ocupa de todos los problemas de transporte. Tiene una interfaz conveniente para enviar objetos a través de la red y permite configurar, cifrar y certificar la conexión de red con programación cero utilizando solo el archivo application.config.

Michael Shaw
fuente
1

En realidad puedes tener ambos. Los complementos como RestRPC para Grails proporcionan anotaciones que interceptarán las llamadas a sus métodos y las manejarán de manera tranquila mientras le permiten tener tantas como desee (que sería muy similar a RPC).

orubel
fuente