Facebook publica una herramienta de código abierto para simular distintas condiciones de red

Augmented Traffic Control (ATC) es una herramienta de código abierto (GitHub) desarrollada por Facebook para simular distintas condiciones de red para probar como se comportan sus aplicaciones. Se creó sobretodo para simular entornos de peor conectividad que los de sus laboratorios. De forma genérica permite controlar la conexión que tiene un dispositivo hacia Internet, concretamente:

- Ancho de banda
- Latencia
- Pérdida de paquetes
- Paquetes corruptos
- Orden de paquetes

Para que ATC sea capaz de controlar y modificar el tráfico debe ejecutarse en un dispositivo que enrute el tráfico y tengan un IP real, como la del gateway de la LAN del entorno.

ATC está hecho de múltiples componentes que interaccionan entre sí:

- atcd: el demonio de ATC responsable de configurar/desconfigurar el traffic shaping. atcd tiene un interfaz de Apache Thrift para interactuar.
- django-atc-api: Un aplicación Django basada en Django Rest Framework que facilita a atcd un interfaz RESTful.
- django-atc-demo-ui: Un aplicación Django que provee un sencillo Web UI para usar ATC desde un teléfono móvil.
- django-atc-profile-storage: Un aplicación Django que puede ser usada para salvar los perfiles de control de tráfico, haciendo más fácil reusarlo después sin tener que volver a introducir manualmente las configuraciones.

Al dividir ATC en sub-componentes, es más fácil trastear con él. Aunque django-atc-demo-ui se distribuye en el repositorio principal para facilitar su uso, también se facilita una REST API para interactuar con atcd vía comandos y permitir a la comunidad crear nuevas herramientas.


Instalación

La forma más fácil de instalar ATC es usando PIP:

apt-get install python-pip
pip install Django==1.7.7

for pkg in \
    atc_thrift atcd django-atc-api \
    django-atc-demo-ui django-atc-profile-storage
do
    pip install $pkg
done

Si te devuelve algún error con los READMEs (manifiestos) puedes descargar el repo de GitHub e instalarlo de forma local:

git clone https://github.com/facebook/augmented-traffic-control.git
pip install -e atc_thrift/
...


Después tendremos que crear un nuevo proyecto en Django que usaremos con nuestra app.

django-admin startproject atcui
cd atcui


A continuación editamos atcui/settings.py y activamos las aplicaciones ATC añadiéndolas a INSTALLED_APPS:

INSTALLED_APPS = (
    ...
    # Django ATC API
    'rest_framework',
    'atc_api',
    # Django ATC Demo UI
    'bootstrap_themes',
    'django_static_jquery',
    'atc_demo_ui',
    # Django ATC Profile Storage
    'atc_profile_storage',
)

Posteriormente abrimos atcui/urls.py y activamos el routing a las apps ATC añadiendo las rutas a urlpatterns:

...
...
from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    ...
    # Django ATC API
    url(r'^api/v1/', include('atc_api.urls')),
    # Django ATC Demo UI
    url(r'^atc_demo_ui/', include('atc_demo_ui.urls')),
    # Django ATC profile storage
    url(r'^api/v1/profiles/', include('atc_profile_storage.urls')),
    url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
)

Finalmente actualizamos la BD de Django:

python manage.py migrate

Operations to perform:
  Synchronize unmigrated apps: rest_framework, django_static_jquery
  Apply all migrations: admin, atc_profile_storage, contenttypes, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
  Installing custom SQL...
  Installing indexes...
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying atc_profile_storage.0001_initial... OK
  Applying sessions.0001_initial... OK

Corriendo ATC

Ahora que hemos instalado y configurado los paquetes tenemos que ejecutar el demonio y el interfaz UI.

atcd modifica la configuración de la red y por lo tanto necesita ejecutarse en modo privilegiado:

sudo atcd

Suponiendo que eth0 es tu interfaz para conectar a Internet y eth1 el interfaz para conexiones a la red LAN, esto debería funcionar. Si la configuración es un poco diferente, utiliza los argumentos de la línea de comandos --atcd-wan y --atcd-lan para adaptarse a la configuración del entorno.

La interfaz de usuario por el contrario es una aplicación web estándar de Django y se puede ejecutar con un usuario normal. Asegúrate de que está en el directorio que se creó cuando ejecutó django-admin startproject atcui y ejecuta:

python manage.py runserver 0.0.0.0:8000

Ahora deberías ser capaz de acceder a la interfaz web en http://localhost:8000:



En ambos casos se recomienda poner en el arranque ambos:

sysvinit y upstart scripts.

Fuente: Augmented Traffic Control: A tool to simulate network conditions

Comentarios

  1. Muy buenos contenidos. Me encanta este blog, sobre todo es muy entretenido. Seguid así

    ResponderEliminar

Publicar un comentario