¿De qué manera son los servicios aguas abajo y aguas arriba?

45

Para un sistema que consiste en múltiples servicios que se llaman entre sí (por ejemplo, Front End -> Backend -> Storage), a menudo escuché a personas que usan terminología como servicios "downstream" o "upstream". No tengo claro qué dirección significan. Los datos fluyen en ambas direcciones. Las solicitudes fluyen de un servicio más orientado al usuario a un servicio de backend, pero las respuestas fluyen en la dirección opuesta, por lo que me parece que se puede argumentar de cualquier manera

usuario69715
fuente
3
Curiosamente, la especificación HTTP RFC 7230 incluye definiciones de los términos "aguas arriba" y "aguas abajo" en la Sección 2.3: tools.ietf.org/html/rfc7230#section-2.3
Jack

Respuestas:

56

Los servicios descendentes son los que consumen el servicio ascendente. En particular, dependen del servicio ascendente. Entonces, el front-end está aguas abajo del back-end porque depende del back-end. El back-end puede existir significativamente sin el front-end, pero el front-end no tiene sentido sin el back-end.

La dependencia no tiene que ser tan fuerte como lo hice en el párrafo anterior. En términos más generales, los servicios ascendentes no necesitan saber ni preocuparse por la existencia de servicios descendentes. Los servicios descendentes se preocupan por la existencia de servicios ascendentes, incluso si solo los consumen opcionalmente.

Derek Elkins
fuente
Creo que debería ser "servicios posteriores " en lugar de "servicios posteriores" .
Nawaz
8

Desafortunadamente, existen diferencias de opinión sobre el significado de upstream / downstream. Cuando hablo de la arquitectura del sistema, la defino de la siguiente manera:

Dado un sistema de interés, los sistemas que inician el intercambio de mensajes / datos al sistema de interés son sistemas ascendentes, y los sistemas de los que depende el sistema de interés (es decir, aquellos de los cuales mi sistema inicia el intercambio de datos) son sistemas descendentes.

Este enlace de ibm que describe las interacciones con uno de sus productos corrobora esta visión: Integración con sistemas ascendentes y descendentes https://www.ibm.com/support/knowledgecenter/en/SSWSR9_11.3.0/com.ibm.pim.dev.doc /integration/pim_con_dev_creatingjobsforintegrationcontainer.html

Un sistema ascendente es cualquier sistema que envía datos al sistema Collaboration Server. Un sistema posterior es un sistema que recibe datos del sistema Collaboration Server.

Dada la terminología 'aguas arriba' y 'aguas abajo', puede ayudar hacer una analogía con un río. Si suelta un mensaje (datos) en el río, fluye aguas arriba (iniciador) a aguas abajo (receptor).

Como anécdota, descubrí que los arquitectos y los desarrolladores de middleware usan esta definición y los desarrolladores web lo contrario (tal vez debido a la "carga").

Con las líneas de tiempo del evento, un evento está en sentido ascendente cuando ocurre antes de un punto en la línea de tiempo (es decir, desencadena otro evento) y en sentido descendente cuando ocurre después (es decir, recibe el evento). Lo que está en sentido ascendente y descendente en una secuencia de eventos, por lo tanto, depende de dónde se encuentre en la línea de tiempo. Un evento puede ser tanto aguas abajo como aguas arriba, dependiendo de si su punto de partida es antes o después.

Como @Jack señala RFC7230 tools.ietf.org/html/rfc7230#section-2.3 tiene esto:

Los términos "en sentido ascendente" y "en sentido descendente" se utilizan para describir los
requisitos direccionales en relación con el flujo de mensajes: todos los
mensajes fluyen en sentido ascendente a descendente

Me gustaría ver en los votos, ¡cuál es el uso más común!

roj
fuente
1
Esto es simplemente confuso porque estás confundido sobre el asunto. No hay discrepancia, solo una diferencia en el punto de vista.
Martin Maat
@MartinMaat No estoy de acuerdo con su primera oración, y estoy de acuerdo con la segunda.
roj
3

La mejor manera de pensar en esto es pensar en un río.

La parte aguas abajo del río no puede obtener agua a menos que provenga de aguas arriba, es decir, aguas abajo depende de aguas arriba para su agua.

Si alguien destruye la parte río abajo del río, esto no tendría impacto río arriba. Si alguien destruyera la parte aguas arriba del río, esto impactaría aguas abajo, es decir, no recibiría agua.

Por lo tanto, los servicios aguas abajo dependen de los servicios aguas arriba. Si se eliminan los servicios ascendentes, los servicios descendentes no funcionarán correctamente.

Gaz_Edge
fuente
Y por un poco más de claridad; En una relación estándar de cliente-servidor CRUD, ambos extremos son ascendentes y descendentes entre sí. El cliente no puede obtener datos o actualizaciones si el servidor está inactivo, y el servidor no tiene instrucciones para ejecutar si no hay un cliente.
Delioth
1
@Delioth no está de acuerdo. El backend puede tener muchos clientes, pero no depende de ninguno de ellos. Si eliminó un cliente, el backend aún funcionaría. El cliente puede tener muchos backends que podría usar. Si se elimina un backend sin que el cliente lo sepa, el cliente no puede funcionar correctamente. El cliente está aguas abajo. El backend es ascendente.
Gaz_Edge
1

Esto puede ser más un problema lingüístico y geográfico que técnico.

  • La solicitud de información va en sentido ascendente. Proviene de un sistema aguas abajo.

  • La respuesta a la solicitud de información (la información solicitada) va en sentido descendente y es enviada por un sistema en sentido ascendente.

No hay diferencia entre la vista clásica de IBM y el uso actual de los términos por parte de la comunidad web.

  • Un proveedor de servicios (servidor) se ubicará aguas arriba en comparación con un consumidor de servicios y enviará información aguas abajo al consumidor.

  • Un consumidor de servicio (cliente) se ubicará en sentido descendente en comparación con el proveedor de servicio y enviará solicitudes en sentido ascendente al proveedor.

Teóricamente, los roles de los sistemas físicos podrían cambiar instantáneamente y también lo haría la dirección de la corriente entre esos sistemas. En una red de igual a igual, este puede ser el caso.

Los términos de carga y descarga son términos centrados en el cliente. Desde la perspectiva del cliente, se carga una solicitud y se descarga una respuesta, que es coherente con la metáfora de la secuencia.

Martin Maat
fuente