Mantener y documentar puntos finales API de muchas aplicaciones en una arquitectura de microservicio

8

Creo que uno de los mayores puntos débiles al trabajar con microservicios es asegurarse de que las API estén bien documentadas y que las API no cambien su comportamiento sin afectar las aplicaciones posteriores. Este problema se amplifica cuando tiene muchos servicios que son interdependientes entre sí. Quizás en ese momento estás haciendo mal los microservicios, pero estoy divagando.

Digamos que hemos heredado 20 microservicios que son propiedad de diferentes equipos y no existe una documentación clara sobre qué aplicación utiliza qué punto final de la API de otra aplicación. ¿Existe una forma prescrita de documentar esto? Al principio pensé en analizar los puntos finales de cada aplicación y agregarlos a una tabla de base de datos, luego crear una relación FK entre cada aplicación y la ruta de una aplicación en una tabla de muchos a muchos (casi todas estas son aplicaciones de rieles). Pero no estoy seguro si esta es una buena manera de manejar esto, o si estoy reinventando la rueda aquí.

En retrospectiva, esta podría ser una forma no tan mala de documentar la interacción de la aplicación si está comenzando con microservicios desde cero. Esto solo exigiría que se mantenga una única fuente de verdad mediante el uso de una base de datos y que cualquier cambio en los puntos finales se realizaría en la aplicación junto con el cambio en la base de datos. Pensamientos?

Hyde
fuente

Respuestas:

4

Una gran parte del beneficio de una "arquitectura de microservicios" es que no está documentando todas esas relaciones. Cada servicio es su propio producto. Y cada propietario del servicio es responsable de la operación de su servicio como un producto independiente. Eso puede incluir cosas como:

  • Publicación de documentos de "marketing", documentos de usuario y registros de cambios (incluidas las depreciaciones )
  • Proporcionar una forma para que los clientes / consumidores soliciten funciones / denuncien errores
  • Mantener un SLA
  • Realizar actualizaciones tan compatibles con versiones anteriores como sea posible y romper los cambios
  • Conocer y ver las noticias de los servicios que consumen directamente
  • Poda de dependencias cuando sea posible
  • Depreciar todo el servicio cuando se vuelve irrelevante o demasiado costoso de mantener

Y así.

Sobre todo, enfatizaría, como uno de los principales beneficios de un microservicio, la oportunidad para que los propietarios de servicios realmente se concentren y se especialicen en la "única cosa" que hace su servicio.

En cuanto a dónde cada propietario del producto o servicio debe documentar sus propias dependencias, eso debería suceder "naturalmente" a medida que se agregan a la configuración de su compilador (o script de compilación). Si necesita saber de qué depende ServiceA , ServiceA/Configuration.xml(o lo que sea ) se lo informará. También normalmente esperaría que cada propietario del servicio diagramara inicialmente sus propias dependencias inmediatas , pero no dependencias de dependencias, etc. Y, dado que la información ya está en el código, no necesariamente esperaría que esos diagramas se mantengan en el futuro.

Si realmente desea una imagen global, escanee las secuencias de comandos de configuración / compilación. Lo que haga con ese resultado, cómo lo almacena, etc., depende completamente de las decisiones que los datos le ayudarán a tomar.

svidgen
fuente
Creo que esta es una buena manera de atacar el problema si está comenzando a construir con microservicios, pero para la configuración existente estoy planeando analizar registros de apache para obtener información de uso y documentarlos, así como tener una reunión con la aplicación propietarios
hyde
@hyde ¿Está usted en una posición en la que razonablemente puede exigir que los propietarios del servicio justifiquen la existencia de su servicio? (¿Compatible con métricas y datos de registro?) ¿O es usted el propietario del servicio? ... ¿Tiene un repositorio centralizado de repositorios donde puede buscar en esas configuraciones de aplicaciones referencias de servicio?
svidgen
No, no estoy en condiciones de cambiar la forma en que se configuran estas aplicaciones en este momento, lo que creo que es lo que estaba implicando al pedirles a los propietarios de los servicios que justifiquen su existencia. ;) Tuve la suerte de encontrarme con archivos JSON en nuestros servidores de producción que enumeran los servicios y las URL que usan para llegar a ellos. Si bien esto no proporciona una imagen completa de la configuración, creo que es un buen punto de partida.
hyde
Umm No es realmente lo que estaba implicando. Pero, redacté mi comentario muy mal ... básicamente, si cada propietario del servicio está haciendo de manera responsable las cosas que mencioné anteriormente, cada propietario debería poder decirle dónde encaja su servicio y cuáles son sus dependencias (o si está siendo usado).
svidgen
... Más allá de eso, en la compañía particularmente grande para la que trabajo actualmente, las interacciones de servicio son tan complicadas que no se pueden diagramar completamente. Y eso está bien. Cada propietario conoce las dependencias de su servicio y hace promesas a sus consumidores en la combinación de promesas de compatibilidad con versiones anteriores (generalmente), listas de correo para las excepciones y SLA.
svidgen
1

Creo que una buena idea es crear un diagrama de integraciones e incluirlo en su repositorio. Elija alguna herramienta gratuita (como draw.io) que pueda exportar el diagrama en un archivo XML o JSON y confirme este archivo en su repositorio. Si usa Github o Gitlab, genere la imagen de este diagrama e inclúyala en el Wiki o incluso en el archivo README.md, de modo que la imagen sea visible cada vez que el desarrollador visualice el repositorio desde el navegador.

Se puede usar la misma estrategia para la base de datos.

Acerca de la documentación de recursos de API, Swagger es una buena opción.

Este problema se amplifica cuando tiene muchos servicios que son interdependientes entre sí. Quizás en ese momento estás haciendo mal los microservicios, pero estoy divagando.

Esto es un problema, seguro.

Dherik
fuente
2
Hay otras alternativas, pero vale la pena vigilar qué entornos de prueba de API (como PostMan) admiten. RAML es otra opción en el mismo espacio. La misma descripción JSON puede generar documentos de API HTML y usarse para describir su servicio a otros. Es decir, puede usarlo para generar enlaces web. (tanto Swagger como RAML lo admiten).
Berin Loritsch