La manera de balancear carga a "la chilena" (hacerla cortita)

En este última época he dedicado un tiempo a la investigación de áreas que son de mi interés en particular, como el balanceo de carga. (Sí, soy un geek) y llegué a una area muy específica que es el balanceo de carga con memcached. Me entero que una forma de hacerlo muy simple es con un método que se le denomina ingenuo ("naive"), porque realmente hace la pega pero tiene algunos inconvenientes. Inconvenientes que trataré de abordar en un próximo artículo. Si de inmediato se te vino a la mente "round robin", déjame decirte que hay mejores formas de encontrar una solución.

Este método utiliza el resultado de una función hash a una consulta cualquiera y el operador matemático módulo (el mismo que si estudiabas programación, usabas para determinar números pares e impares), con esto se determina fácilmente cual es el nodo que debería tener el registro que buscas y poder distribuir. Por lo tanto, si necesito distribuir carga en N servidores, la fórmula para determinar el nodo n se puede escribir como: n = hash(q) % N  Donde q es la consulta que queremos distribuir y hash una función que puede ser MD5 o SHA.

Una implementación como prueba de concepto en Python se puede ser como lo siguiente:


#-*-coding: utf8 -*-
from md5 import md5
class Naive(object):
def __init__(self):
self.servers = [1,2,3]
def numarize(self, hashed_str):
return long (hashed_str, 16)
def assign_node(self, query):
hashed_str = md5(query)
hash_key = self.numarize(hashed_str.hexdigest())
return hash_key % len(self.servers)
Si pruebas este código, sólo debes llamar al método assign_node(<consulta>) y te devolverá el nodo n que debería tener la respuesta que buscas.

Comments

Popular posts from this blog

Mysql Fabric is eager to do failover

En la carrera por la Virtualización