Cómo reducir la latencia de los datos enviados a través de una API REST
-
22-09-2019 - |
Pregunta
Tengo una aplicación que obtiene los datos en formato JSON de uno de nuestros otros servidores. El problema que estoy enfrentando, allí hay un retraso significativo cuando al solicitar esta información. Dado que se pasa una gran cantidad de datos (aproximadamente 1000 registros por solicitud, donde cada registro es bastante grande) ¿Hay alguna manera de que la compresión ayudaría a reducir la velocidad. Si es así, que esquema de compresión recomendaría usted.
He leído en otro hilo que el patrón de los datos también importa mucho en que tipo de compresión que debe utilizarse. El patrón de datos es coherente y similar a la siguiente
:desc=>some_description
:url=>some_url
:content=>some_content
:score=>some_score
:more_attributes=>more_data
Puede alguien recomendar una solución a cómo podría reducir este retraso. Se demora es de aproximadamente 6-8 segundos. Estoy usando Ruby on Rails para desarrollar esta aplicación y el servidor que proporciona los datos de Python utiliza en su mayor parte.
Solución
La primera vez que se vería en qué parte de este retraso 8s se relaciona con:
-
procesamiento del lado del servidor (cuánto tomó para los datos que se generen) Hay una gran cantidad de técnicas para mejorar este tiempo, incluyendo:
-
índices DB
-
almacenamiento en caché
-
un rápido a_json biblioteca
-
Algunos excelentes recursos son los podcasts NewRelic sobre rieles escalabilidad http : //railslab.newrelic.com/2009/02/09/episode-7-fragment-caching
-
Retardo de transmisión (cuánto tiempo tomó para que los datos que deben enviarse entre el servidor y el cliente)
-
si las claves son más o menos la misma, es posible implementar la sollution de compresión algoritmo para JSON codificado paquetes ?; Es posible que desee ver en https://github.com/WebReflection/json. hpack / wiki / Especificaciones detalles y http://www.nwhite.net/? p = 242
-
Además de esto, también puede comprimir (gzip) desde su servidor frontend http://httpd.apache.org/docs/2.0/mod/mod_deflate. html http://wiki.nginx.org/NginxHttpGzipModule
-
Si la estructura de datos es constante y también se puede tratar de implementar un servicio binaria, que es mucho más rápido, incluye la compresión, pero también más difíciles de MANTENER, como de segunda mano: http://www.igvita.com / 2007/11/30 / ruby-web-servicios-con-facebooks-Thrift /
-
Si esto es adecuado a sus necesidades, tal vez se puede hacer algún tipo de un servidor del lado del sistema de control de versiones / cache, y enviar sólo los registros que se modificaron (pero que es bastante pesado para poner en práctica)
-