Login Form

Supongamos que tenemos un servicio A que recibe unos 5 millones de requests al día lo cual da en promedio un total de 3,472 requests por minuto. El servicio, en ciertos casos, necesita llamar un servicio B para obtener parte de la información que necesita para generar la respuesta adecuada pero dicho servicio no soporta tanta carga y tiene un extraño requerimiento de no permitir, en un momento dado, más de 20 requests simultáneos por parte del servicio A, es decir, en un momento dado, el servicio A no debe de tener más de 20 conexiones abiertas esperando una respuesta del servicio B.

Para complicar un poco más las cosas, el servicio A corre en la nube y es auto-escalable por lo que podríamos llegar a tener varias instancias corriendo en un momento dado, todas ellas haciendo peticiones al servicio B.

 

La tarea entonces, es encontrar una manera de asegurarnos que, en un momento dado, la suma de las peticiones hechas al servicio B por todas las instancias del servicio A no pasen de 20. A las técnicas que resuelven este tipo de problemas, en inglés, se les conoce como "rate limiters", "metering" o "throttle mechanisms" y son bastante comunes en servicios que manejan un gran volumen de usuarios concurrentes siendo utilizadas por lo general por grandes empresas para proteger sus back-ends o limitar el uso de sus servicios entre otras posibles razones.

 

En este artículo describo tres variantes de una solución utilizando colas junto con una pequeña implementación de la misma en java. La propuesta, a alto nivel, consiste en un micro-servicio que funja como intermediario entre los servicios AB regulando el tráfico.

 

 El siguiente diagrama ilustra el concepto poniendo como ejemplo 3 instancias del servicio A

 

 

 

 

 

Read more: Control de Tráfico en Java (Rate Limit / Throttling mechanism)

En este artículo describiremos un proyecto pequeño, más bien una prueba de concepto, de un solucionador de puzzles que funciona utilizando un árbol Trie para almacenar las palabras de un diccionario y realizar una búsqueda dirigida a través del puzzle.

La ventaja de este tipo de enfoque, es que permite realizar búsquedas eficientes de manera dirigida a través del espacio de soluciones sin necesidad de aplicar búsquedas exhaustivas que intenten abarcar todas las posibles combinaciones, las cuales podrian crecer de manera exponencial, si no es que factorial.

 A continuación daremos una breve introducción a los Árboles Trie (también conocidos como Prefix Trees) y después explicaremos de qué trata el problema seguido de un link a una pequeña implementación en Java

 

Árboles Trie

 

Un árbole Trie, es una estructura de tipo árbol que como tal, contiene un nodo raíz con una serie de nodos hijos, representando ramas, los cuales pueden tener a su vez más hijos. Los hijos que se encuentran en el último nivel del árbol se llaman hojas. A diferencia de los árboles regulares donde cada nodo contiene una llave que tiene por sí misma un valor, las llaves de cada nodo en un árbol Trie representan parte de un prefijo el cuál es compartido por todos sus hijos y por lo general cada nodo puede tener una bandera para indicar si es parte del prefijo o representa el final de una entrada completa que a su vez puede ser prefijo de una entrada más grande. 

Read more: Solucionador de Puzzles usando Árboles Trie (Trie Trees o Prefix Trees)

A continuación se presentan los pasos a seguir para crear una aplicación Web Java con:

  • Maven 3.1.1
  • eclipse Indigo 3.7.0
  • JDK 1.6

 Instrucciones

Click en File > New > Other

Seleccionamos un "Maven Project" y damos click en Next >

Read more: Crear un proyecto Web con Maven y Eclipse

contacts Contactanos

 

bugs Reportar bugs

about Acerca de www.tecnohobby.net

Go to top