udistrital / planeacion_cliente

:heavy_check_mark: Check: Cliente del proyecto de planeación de la universidad Distrital
0 stars 0 forks source link

Aplicación de Go routines en todos los Micromids PT 4 #1152

Closed milo19980525 closed 1 week ago

milo19980525 commented 3 weeks ago

Se requiere continuar con la aplicación de rutinas en Go, a partir de lo desarrollado en #1064 , #1128 y #1132 .

Especificaciones técnicas

  1. planeacion_formulacion_mid
  2. planeacion_seguimiento_mid
  3. planeacion_evaluacion_mid
  4. planeacion_reportes_mid
  5. planeacion_arbol_mid

Subtareas

Criterios de aceptación

Requerimientos

Dependencias

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

C0C045 commented 2 weeks ago

FORMULACION_MID implementación de Go Routines

En este apartado se comentará todo lo relacionado a la implementación de Go Routines en el Micromid de Formulación, teniendo en cuenta el cuadro comparativo por petición en cada uno de los servicios o 'helpers'.

Servicio de Formulación

En este servicio es posible aplicar Go Routines para varias peticiones, sin embargo, hay otras peticiones que pertenecen a consultas tipo PUT; por ende, según los lineamientos no es recomendable usar rutinas para este tipo de consultas. (Líneas 126, 229, 263).

En contraste, para la petición PonderacionActividades() fue exitosa la implementación de rutinas y se procede a comparar el resultado actual de la consulta con el resultado original sin rutinas:

Original: image

Go Routines: image

Como podemos notar ambas peticiones responden de igual forma, por ende, podemos proceder a realizar un cuadro comparativo con 10 iteraciones de tiempo para identificar si vale la pena la implementación de Go Routines en la petición:

Petición utilizada: http://localhost:8082/v1/formulacion/actividad/ponderacion/65bf03d30c1fc945b06aee5b Iteración Tiempo Original (ms) Tiempo Go Routines (ms)
1 361.98 407.44
2 237.15 235.70
3 233.65 246.67
4 232.25 241.93
5 237.41 235.73
6 235.25 241.50
7 237.42 238.10
8 243.93 258.80
9 233.51 244.40
10 235.62 235.06
Promedio 248.82 258.53

Ahora bien, como se puede apreciar la implementación de Go Routines no fue beneficiosa para la petición con una diferencia negativa de -9.71 ms. Por ende, no se ve necesaria la implementación de rutinas, ya que el resultado se retorna en un tiempo similar o superior a la lógica sin rutinas.

Por otro lado, para la petición Planes() fue exitosa la implementación de rutinas y se procede a comparar el resultado actual de la consulta con el resultado original sin rutinas:

Original: image

Go Routines: image

Como podemos notar ambas peticiones responden de igual forma, pero en orden diferente; sin embargo, esto no esta mal, ya que para este tipo de petición no importa el orden de los planes. Por ende, podemos proceder a realizar un cuadro comparativo con 10 iteraciones de tiempo para identificar si vale la pena la implementación de Go Routines en la petición:

Petición utilizada: http://localhost:8082/v1/formulacion/planes Iteración Tiempo Original (ms) Tiempo Go Routines (ms)
1 13050 1003
2 12752 875.93
3 12784 811.96
4 12837 796.39
5 12844 822.48
6 12834 850.53
7 12756 790.71
8 12854 800.38
9 12755 797.59
10 12773 772.73
Promedio 12823.9 832.17

Ahora bien, como se puede apreciar la implementación de Go Routines fue beneficiosa para la petición con una diferencia de 11991.73 ms. Sin embargo, hay que tener en cuenta que estas pruebas fueron realizadas localmente y por tanto los tiempos son relativos.

Servicio de Inversión

En este servicio es posible aplicar Go Routines para varias peticiones, sin embargo, hay otras peticiones que pertenecen a consultas tipo PUT y POST; por ende, según los lineamientos no es recomendable usar rutinas para este tipo de consultas. (Líneas 539, 572, 954, 987, 1071, 1104, 1168, 1201, 1364).

En contraste, para la petición GetProyectoId() fue exitosa la implementación de rutinas y se procede a comparar el resultado actual de la consulta con el resultado original sin rutinas:

Original: image

Go Routines: image

Como podemos notar ambas peticiones responden de igual forma, por ende, podemos proceder a realizar un cuadro comparativo con 10 iteraciones de tiempo para identificar si vale la pena la implementación de Go Routines en la petición:

Petición utilizada: http://localhost:8082/v1/inversion/proyecto/65bf03d30c1fc945b06aee5b Iteración Tiempo Original (ms) Tiempo Go Routines (ms)
1 976.23 537.22
2 728.76 428.51
3 723.07 435.11
4 767.79 419.05
5 746.83 409.00
6 765.63 399.46
7 733.68 413.84
8 709.85 411.33
9 750.20 406.14
10 770.16 405.91
Promedio 767.22 426.56

Ahora bien, como se puede apreciar la implementación de Go Routines fue beneficiosa para la petición con una diferencia de 340.66 ms. Sin embargo, hay que tener en cuenta que estas pruebas fueron realizadas localmente y por tanto los tiempos son relativos.

Por otro lado, para la petición GetMetasProyect() fue exitosa la implementación de rutinas y se procede a comparar el resultado actual de la consulta con el resultado original sin rutinas:

Original: image

Go Routines: image

Como podemos notar ambas peticiones responden de igual forma, por ende, podemos proceder a realizar un cuadro comparativo con 10 iteraciones de tiempo para identificar si vale la pena la implementación de Go Routines en la petición:

Petición utilizada: http://localhost:8082/v1/inversion/proyectos/63ed9908ccee4953c184a651/metas Iteración Tiempo Original (ms) Tiempo Go Routines (ms)
1 605.65 524.09
2 392.37 333.87
3 342.22 337.49
4 353.62 358.93
5 428.62 335.22
6 423.05 344.97
7 389.46 330.37
8 368.79 334.49
9 414.02 335.46
10 438.06 327.18
Promedio 415.59 356.21

Ahora bien, como se puede apreciar la implementación de Go Routines fue beneficiosa para la petición con una diferencia de 59.38 ms. Sin embargo, hay que tener en cuenta que estas pruebas fueron realizadas localmente y por tanto los tiempos son relativos.

C0C045 commented 2 weeks ago

PR

formulacion_mid: https://github.com/udistrital/planeacion_formulacion_mid/pull/10