viernes, 23 de mayo de 2014

introduccion a SQLAlchemy python ORM

Dejo aquí mi paso por pybcn.org, SQLAlchemy es mucho más, pero solo eran 20 minutos de presentación.




El código utilizado en la presentación está aquí

viernes, 9 de mayo de 2014

Degradación de performance de LVM, XFS, ZFS

Esto es solo una nota personal para tenerla a mano.

Aclarado lo anterior en mi computador personal con un disco duro Seagate Barracuda 1TB 7200RPM 64MB Cache y el resto

themanda@weichafe ~ # cat /proc/cpuinfo |grep "model name" |sed -e "s/model\sname\s:\s//g" |uniq
Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz

root@weichafe ~ # free -g
             total       used       free     shared    buffers     cached
Mem:            47         22         24          0          0         20
-/+ buffers/cache:          1         45
Swap:           63          0         63

themanda@weichafe ~ % hwinfo --disk
77: IDE 00.0: 10600 Disk
  [Created at block.245]
  Unique ID: 3OOL.D2T1TfDreW5
  Parent ID: w7Y8.59UHdy+hk47
  SysFS ID: /class/block/sda
  SysFS BusID: 0:0:0:0
  SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0
  Hardware Class: disk
  Model: "ST1000DM003-1CH1"
  Device: "ST1000DM003-1CH1"
  Revision: "CC49"
  Driver: "ahci", "sd"
  Driver Modules: "ahci"
  Device File: /dev/sda
  Device Files: /dev/sda, /dev/disk/by-id/ata-ST1000DM003-1CH162_S1DHEX7W, /dev/disk/by-id/wwn-0x5000c5006d8e35fe
  Device Number: block 8:0-8:15
  BIOS id: 0x80
  Drive status: no medium
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #23 (SATA controller)


Lo relevante es que le he hecho una pequeña prueba para ver la degradación de xfs sobre LVM

themanda@weichafe ~ % cat /etc/fstab
#
# /etc/fstab: static file system information
#
# file system  dir>   type  options       dump  pass
# UUID=9625d321-4c2a-4a3b-aac3-3da3136cfbf4
/dev/sda3               /               xfs             rw,relatime,attr2,inode64,noquota       0 1

# UUID=1559a839-bbea-4420-9b23-093e6c648d18
/dev/mapper/themanda-data       /home           xfs             rw,relatime,attr2,inode64,noquota       0 2

Como se ve en el bloque anterior hare las pruebas sobre 2 particiones con XFS una hecha directamente sobre disco(/dev/sd3) y la otra sobre LVM (/dev/mapper/themanda-data)

Test sobre partición xfs (/dev/sd3)

themanda@weichafe ~ % time sudo dd if=/dev/zero of=/test.img bs=1024M count=10 
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 16.2224 s, 662 MB/s
0.01s user 7.23s system 43% cpu 16.716 total

Test sobre partición con LVM (/dev/mapper/themanda-data)

themanda@weichafe ~ % time sudo dd if=/dev/zero of=/home/test.img bs=1024M count=10
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 64.5999 s, 166 MB/s
0.01s user 11.87s system 18% cpu 1:05.09 total

Bueno los resultados hablan por si solos, el rendimiento con LVM es cinco veces menor que con XFS directo al disco.

Pero tiempo despues he instalado FreeBSD 10 sobre ZFS y noto una degradación bastante menor que con LVM. Es del orden de 2 veces más lento que un partición directa sobre el disco y 3 veces más rapido que LVM.

ZFS resultados sobre FreeBSD sin tuning
[themanda@weichafe] ~% df -h
Filesystem                   Size    Used   Avail Capacity  Mounted on
zroot/ROOT/default           863G     19G    844G     2%    /
devfs                        1.0K    1.0K      0B   100%    /dev
procfs                       4.0K    4.0K      0B   100%    /proc
linprocfs                    4.0K    4.0K      0B   100%    /compat/linux/proc
zroot/tmp                    844G    3.1M    844G     0%    /tmp
zroot/usr/home               844G    152K    844G     0%    /usr/home
zroot/usr/jails              844G    144K    844G     0%    /usr/jails
zroot/usr/obj                844G    144K    844G     0%    /usr/obj
zroot/usr/pbi                847G    3.0G    844G     0%    /usr/pbi
zroot/usr/ports              844G    152K    844G     0%    /usr/ports
zroot/usr/ports/distfiles    844G    144K    844G     0%    /usr/ports/distfiles
zroot/usr/src                844G    144K    844G     0%    /usr/src
zroot/var/audit              844G    160K    844G     0%    /var/audit
zroot/var/log                844G    276K    844G     0%    /var/log
zroot/var/tmp                844G    3.7M    844G     0%    /var/tmp
zroot/usr/home/themanda      844G     34M    844G     0%    /usr/home/themanda

[themanda@weichafe] ~% ~# sudo time dd if=/dev/zero of=/test.img bs=1024M count=10 
10+0 records in
10+0 records out
10737418240 bytes transferred in 24.417965 secs (419 MB/s)
0.000u 3.300s 0:24.44 13.5%     25+172k 0+1io 0pf+0w

viernes, 2 de mayo de 2014

Varnish install vmod trick

Ok, here is the thing.
Me encuentro en el siguiente dilema, en producción tengo instalados diez varnish, en modo cache y pretendemos reemplazar nuestro CDN en akami.
Entre las cosas que necesito migrar de akamai, está el soporte para QueryString. Por lo tanto necesito implementar vmod-libquerystring.

Como los varnish ya estás instalados de rpm y no quiero desinstalar y volver a instalar desde las fuentes, ¿que hago en este caso? me saco un truco de la manga y descargando los fuentes de la misma versión, desde el repo, junto con le vmod que quiero compilar. Claro ya que estoy por la labor también me bajo otros vmod y dejo soporte, para lo que necesite o crea que pueda necesitar, mi vida sea más fácil en el futuro.

Dicho lo anterior lo explico step by step lo que hice empíricamente a continuación:
Estas pruebas las he efectuado sobre CentOS 6.5.
Para poder compilar varnish he requerido un montón de bibliotecas como:


yum install -y automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig libedit libedit-devel readline-devel python-docutils git

Para replicar lo que tenia agrego el repositorio de varnish e instalo con yum:

rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el6/noarch/varnish-release/varnish-release-3.0-1.el6.noarch.rpm
yum install -y varnish

Con el varnish instalado desde el rpm tengo toda la estructura en su sitio y funcionando, bajas las fuentes de varnish y las dejas en un sitio seguro.

wget http://repo.varnish-cache.org/source/varnish-3.0.7.tar.gz
tar xzf varnish-3.0.7.tar.gz
git clone https://github.com/Dridi/libvmod-querystring.git
sudo mv libvmod-querystring varnish-3.0.7 /usr/src/

Con privilegios de root a compilar. (ojo: sin make install)

sudo -i
cd /usr/src/varnish-3.0.7
./autogen.sh
./configure PKG_CONFIG_PATH=/usr/lib/pkgconfig
make

Hora que ya están las fuentes compilados  y generados los objetos test, el vmod compilara y generara las biblotecas en donde se indique, para lo cual un paso previo es buscar el directorio varnish/vmods

find /usr -name vmods |grep lib |grep varnish
/usr/lib64/varnish/vmods

Ya lo tienes a compilar e instalar el modulo:

cd /usr/src/libvmod-querystring
./autogen.sh
./configure VARNISHSRC=/usr/src/varnish-3.0.7 VMODDIR=/usr/lib64/varnish/vmods
make && make install && make check

Plaf se instala correctamente en /etc/varnish/default.vcl importar el modulo y a utilizar sus características.

import querystring;

Nota: otros módulos puede tener otras dependencias. Recomiendo vmod-boltsort para complementar querystring y mejorar el hit ratio.