Get Firefox

Firefox 4.0

stopsoftwarepatents.eu petition banner Manifiesto por la liberación de la cultura 
No a la traza privada
Últimos cambios
Últimos Cambios
Vote for Public Maps - Reject INSPIRE! Geocaching
Mi estado actual en Jabber/XMPP: - jabberES - jabber.org

Persistencia de tráfico y cuotas de subida

Última Actualización: 13 de febrero de 2008 - Miércoles

Recientemente, uno de los lugares P2P que frecuento ha instaurado una política de cuota de tráfico de subida, que complementa su ya legendario SR ("Share Ratio"). El objetivo que busca esa medida es que los usuarios que disponen de poco ancho de banda de salida puedan mantener un SR decente, evitando que los que tienen un gran caudal les "pisen" los "peers" y les dejen sin nadie a quien subir.

Dado que mi cliente BitTorrent no permite esa funcionalidad, me tocaba o cambiar de cliente o -dado que el programa está escrito en Python- programarla yo mismo.

Sobra decir qué camino elegí :-)

Para poder realizar un control de la cuota, es preciso llevar contabilidad del tráfico. Dicha contabilidad debe conservarse entre ejecuciones del programa, así que utilizo tecnología de persistencia. Esta tecnología novedosa apenas se emplea por ser poco conocida, pero es muy potente y simple de utilizar. Qué lástima. ¡Ellos se lo pierden! :-).

Así pues, nos hacen falta tres cosas:

Aquí tienes el parche para BitTornado 0.3.17.

Como podemos ver, el parche es relativamente simple:

La mayoría de mis programas "persistentes" integran dentro un servidor Durus. De esta forma tengo todo junto, pero sigo manteniendo la posibilidad de interacturar con el sistema de persistencia de forma manual y externa, si es necesario. En este caso, en cambio, podemos tener muchas instancias de BitTornado funcionando simultáneamente, así que he preferido segregar, en esta ocasión y sin que sirva de precedente, el servidor de persistencia en un proceso aparte y separado. El código del servidor de persistencia es trivial:

#!/usr/local/bin/python

import sys
sys.path.extend(("/video/0/durus-berkeleydbstorage",))

import berkeleydb_storage
storage=berkeleydb_storage.BerkeleyDBStorage("/video/0/durus-berkeleydbstorage/db", \
          durable=False,async_log_write=True,do_recover=True)

from durus.storage_server import StorageServer
StorageServer(storage, address="/video/0/durus-berkeleydbstorage/db/unix_socket").serve()

Este programa debe arrancarse antes de los BitTornado. Como veis, un servidor de persistencia simple es muy... simple :-). El único detalle a tener en cuenta es que, por razones de explicaré en otro artículo, configuro un "storage" ACI (no ACID), pero indico escrituras asíncronas de log (lo que indica que es "casi" ACID, salvo fallo del sistema operativo o que se corte la electricidad). Este programa utiliza mi "backend" para Durus y el propio Durus, claro.


Historia



Firefox 4.0 Python Zope ©2008 jcea@jcea.es