I Had a Blog

De l'utilité de mod_expire mod_gzip et mod_compress

En ces temps de crise, tout le monde, dans le monde professionnel du moins, fait attention aux coûts en bande passante. Car dans ce “milieu”, la bande passante se paye, et elle se paye souvent très chères.

Il existe un tas de moyen de diminuer ces coûts, allant de l'optimisation des sources html a la compression de tout les éléments envoyés en passant par le rajout des entêtes d'expiration.

Dans le cadre de mon environnement professionnel je me suis donc amusé a chercher les réponses a ces besoins.

J'ai donc réalisé (et recopié/modifié ici) quelques pages de wiki sur le sujet.

Après mise en production nous constatons une diminution de la bande passante utilisée de façon très claire au bout de plusieurs jours.

Par exemple un javascript d'un site “people” à forte audience faisant une taille conséquente de l'ordre de 154Ko sans temps d'expiration se retrouve a 43ko et un temps de cache expirant 24H plus tard et sera donc “gardé” par le navigateur et/ou les serveurs proxy grace a ce temps d'expiration.

L'on pourrait se dire, a prime abord : “qu'est ce que 130Ko de difference après tout ?”. Je vous laisse faire le calcul avec les parametres suivant : moins de deux million de page par jours multiplié par la taille du javascript non compressé.

Ce qui avec des chiffres réel (Le dèces du “King of Pop”) donnerais dans le cas de figure empirique ou _personne_ n'a en cache le dit javascript :

1 829 122 pages x 154 589 octets = 282 762 140 858 octets

Oui 282Go vous avez bien lu. Ramenons ce calul avec un Javascript compressé :

1 829 122 pages x 43468 octets = 79 508 275 096 octets

79Go, soit une différence de 203Go.

Ce n'est pas négligeable après tout, et si en prime les gens “cachent” le dit javascript pendant 24H, la bande passante serais alors a calculer avec les “visiteurs uniques” multiplié par le poids compressé du javascript (en gros, a la louche quoi).

Non ce n'est vraiment pas négligeable …

Audience et Affluence

Lorsqu'on passe son temps sur Internet, que l'on est dans les coulisses, une clé a molette a la main et le manuel de 900 pages (pour le tome I) dans l'autre, on se rends forcement compte des résultats de l'engouement lors de nouvelle “tragique” et de leur impact sur les réseaux. Je prends comme exemple la mort du “King of Pop” dont la nouvelle de son trépas a submergé beaucoup de plateforme connue (twitter, google, etc) par des visiteurs désireux de connaitre les tenants et aboutissant.

Comme dirait Karlesnine : Meme pas mal!. Oui meme pas mal, mais ce résultat est le cout de longue recherche sur chaque maillon de la chaine, a gratter chaque pourcentage de ressource pour en tirer tout le jus du fruit, a torturer interroger les developpeur, a fouiller les manpages (a la pince a épiler) de chaque soft utilisé ligne par ligne pour chercher l'option qui fera la difference.

Le resultat est probant, plusieurs serveurs delivrant un contenu “géré” par EZpublish derriere 3 serveur de cache (Squid en mode Reverse Proxy) ont tenu une charge allant de 60mbps a 170mbps pour totaliser presque 5 millions de pages en 3 jours et le tout sans aucune coupure de service.

Plaisant, mais peu mieux faire, on estime toujours en avoir encore sous le pieds, mais toute nos théorie deviennent fade lorsque survient l'epreuve du feu.

A quand la prochaine nouvelle qui surpassera tout ces records ? Comme dirait G.S., il faudrait que J.H. et M.S. decedent en meme temps pour vérifier cela.

FreeBox HD et reseau personnel

Prenons une Freebox (non CPL) qui ne soit pas en mode routeur, un routeur Linksys WRT54G V3.1, un boitier HD FreeBox (toujours non CPL), un switch NetGear GS608et un NAS Dlink DNS323.

Le but étant d'avoir ceci a terme :

[Freebox]
`--[WRT54G]
   `-- [GS608]
       |-- [FreeboxHD]
       |-- [NAS]
       |-- [PC1]
       |-- [PC2]
       `-- [PC3]

Comment :

  • Avoir l'UPNP du DNS323 servir des media au boitier HD
  • Avoir le boitier HD fonctionel derriere le switch en RJ45 en desactivant le MIMO de la Freebox

Réponse :

  • Disposer d'un switch faisant du 802.1Q (genre un LinkSys SLM2008)
  • Tagger ses VLAN en 100

Ce qui devrait donner a peu pres ceci :

[     Freebox    ]
[ Switch Freebox ]
|
|----------- [ Wan Linksys WRT54G V3.1 ]
|            [   Linksys WRT54G V3.1   ]
`----------- [ Switch WRT54G VLAN 100  ]
             |
	     `-- [ Switch VLAN100 ]
	         |
		 |-- [ Freebox HD ]
		 |-- [ D-Link DNS 323 ]
		 |-- [ PC1 ]
		 |-- [ PC2 ]
		 `-- [ PC3 ]

Eh bien il ne me reste plus qu'a changer de switch pour tester ca :D

Explications logique : La Freebox annonce deux réseau, un non taggé ou le “Wan” passe, et un taggé “100” par lequel passe les communications entre la Freebox et son boitier HD. En mettant le NAS et les PC dans ce meme VLAN normalement (ca reste du théorique pour l'instant) les PC voient le NAS et la Freebox HD aussi, et la Freebox HD devrait voir le NAS en UPNP.

Sources :

Google Chrome et Gentoo

Ma douce et tendre testant Seven (Oui Madame n'est pas une Linuxienne) je lui ai suggéré d'essayer Google Chrome, depuis elle ne le lache plus. Ayant moi aussi Seven sur une machine (Bah oui faut bien se tenir au courant des technologies :p), j'ai donc aussi installé Chrome, et j'attendais avec impatience la version Linux.

Eh bien la version bêta viens de tomber !

Premierement il faut installer “deb2targz”

~ # eix deb2targz
[I] app-arch/deb2targz
     Available versions:  1
     Installed versions:  1(11:43:52 06/05/09)
     Homepage:            http://www.miketaylor.org.uk/tech/deb/
     Description:         Convert a .deb file to a .tar.gz archive

~ # emerge -av deb2targz

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] app-arch/deb2targz-1  0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No] 

Ensuite l'on se rend sur la page de developpement de Google Chrome se trouvant a cette adresse, l'on récupère la version qui nous interesse (32 ou 64bit) et l'on convertit le .deb en .tar.gz avec deb2targz

~/Desktop $ deb2targz google-chrome-unstable_current_i386.deb 
deb2targz: converting 'google-chrome-unstable_current_i386.deb' ...
deb2targz: skipping section 'debian-binary'
deb2targz: skipping section 'control.tar.gz'
deb2targz: wrote 'google-chrome-unstable_current_i386.tar.gz'

“yapuka” decompresser le contenu du .tar.gz à la racine

/ # tar -zxvf /home/kathryl/Desktop/google-chrome-unstable_current_i386.tar.gz -C /
./
./opt/
./opt/google/
./opt/google/chrome/
./opt/google/chrome/locales/
./opt/google/chrome/locales/en-US.pak
./opt/google/chrome/themes/
./opt/google/chrome/themes/default.pak
./opt/google/chrome/chrome
./opt/google/chrome/chrome.pak
./opt/google/chrome/resources/
./opt/google/chrome/resources/inspector/
[...]
./opt/google/chrome/resources/inspector/Images/
[...]
./opt/google/chrome/product_logo_16.png
./opt/google/chrome/product_logo_256.png
./opt/google/chrome/product_logo_32.png
./opt/google/chrome/product_logo_48.png
./opt/google/chrome/google-chrome
./opt/google/chrome/google-chrome.desktop
./usr/
./usr/bin/
./etc/
./etc/cron.daily/
./etc/cron.daily/google-chrome
./usr/bin/google-chrome

Les plus prudent auront bien entendu regarder le contenu avant de decompresser, mais il n'y a pas mort d'homme, on ira juste jeter un oeil au cron rajouté par méfiance.

Mais bon ce n'est pas tout mais le binaire a des besoins bien spécifique, premierement il faut un GCC supérieur ou égal a la 4.2 et des librairies spécifique.

~ $ ldd /opt/google/chrome/chrome
/opt/google/chrome/chrome: /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /opt/google/chrome/chrome)
        linux-gate.so.1 =>  (0xffffe000)
        libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7b9d000)
        libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb7b19000)
        libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb7afe000)
        libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb7ae6000)
        libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb7adc000)
        libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7aa0000)
        libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb7a3e000)
        libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7a03000)
        libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb79fe000)
        libdl.so.2 => /lib/libdl.so.2 (0xb79fa000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb792d000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7928000)
        librt.so.1 => /lib/librt.so.1 (0xb791e000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xb7835000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb782c000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xb781d000)
        libnss3.so.1d => not found
        libnssutil3.so.1d => not found
        libsmime3.so.1d => not found
        libssl3.so.1d => not found
        libplds4.so.0d => not found
        libplc4.so.0d => not found
        libnspr4.so.0d => not found
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7804000)
        libm.so.6 => /lib/libm.so.6 (0xb77de000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb77b4000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7732000)
        libgconf-2.so.4 => /usr/lib/libgconf-2.so.4 (0xb7708000)
        libasound.so.2 => /usr/lib/libasound.so.2 (0xb765b000)
        libstdc++.so.6 => /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libstdc++.so.6 (0xb7578000)
        libgcc_s.so.1 => /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libgcc_s.so.1 (0xb756d000)
        libc.so.6 => /lib/libc.so.6 (0xb743d000)
        libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0xb7439000)
        libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0xb7435000)
        libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb742f000)
        libgio-2.0.so.0 => /usr/lib/libgio-2.0.so.0 (0xb73d0000)
        libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb73a8000)
        libz.so.1 => /lib/libz.so.1 (0xb7395000)
        libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb7391000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0xb7388000)

On commence donc par GCC

~ # eix sys-devel/gcc
[U] sys-devel/gcc
     Available versions:  
        (2.95)  2.95.3-r9 ~2.95.3-r10
        (3.1)   3.1.1-r2
        (3.2)   **3.2.2 3.2.3-r4
        (3.3)   ~3.3.6-r1
        (3.4)   3.4.6-r2
        (4.0)   ~*4.0.4
        (4.1)   4.1.2
        (4.2)   ~4.2.4-r1
        (4.3)   4.3.2-r3 ~4.3.2-r4 ~4.3.3-r2
        (4.4)   [M]~4.4.0
        {altivec bootstrap boundschecking build d doc fixed-point fortran gcj graphite gtk hardened ip28 ip32r10k java libffi mudflap multilib multislot n32 n64 nls nocxx nopie nossp objc objc++ objc-gc openmp static test vanilla}
     Installed versions:  4.1.2(4.1)(17:47:28 11/13/08)(fortran mudflap nls -altivec -bootstrap -build -d -doc -gcj -gtk -hardened -ip28 -ip32r10k -libffi -multilib -multislot -n32 -n64 -nocxx -objc -objc++ -objc-gc -test -vanilla)
     Homepage:            http://gcc.gnu.org/
     Description:         The GNU Compiler Collection. Includes C/C++, java compilers, pie+ssp extensions, Haj Ten Brugge runtime bounds checking

C'est partit !

 
~ # emerge -av gcc

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  NS   ] sys-devel/gcc-4.3.2-r3 [4.1.2] USE="fortran mudflap nls openmp (-altivec) -bootstrap -build -doc (-fixed-point) -gcj -gtk (-hardened) -ip28 -ip32r10k -libffi (-multilib) -multislot (-n32) (-n64) -nocxx -nopie -objc -objc++ -objc-gc -test -vanilla" 0 kB

Total: 1 package (1 in new slot), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No]

On va prendre un café pendant ce temps …

Une fois votre café coulé et bu, il faudra appliquer (voir emerger) quelque librairie NSS et NSPR

 
[U] dev-libs/nss
     Available versions:  3.11.9-r1 3.12.2 (~)3.12.3 {utils}
     Installed versions:  3.12(17:09:59 10/03/08)(-utils)
     Homepage:            http://www.mozilla.org/projects/security/pki/nss/
     Description:         Mozilla's Network Security Services library that implements PKI support

 ~ # eix nspr    
[U] dev-libs/nspr
     Available versions:  4.6.8 4.7.3 4.7.4 {debug ipv6}
     Installed versions:  4.7.1(17:07:40 10/03/08)(-debug -ipv6)
     Homepage:            http://www.mozilla.org/projects/nspr/
     Description:         Netscape Portable Runtime

Mais les noms n'étant pas techniquement les mêmes on va être gentil et lui linker

~ # ln -s /usr/lib/nss/libnss3.so /usr/lib/libnss3.so.1d
~ # ln -s /usr/lib/nss/libnssutil3.so /usr/lib/libnssutil3.so.1d
~ # ln -s /usr/lib/nss/libsmime3.so /usr/lib/libsmime3.so.1d
~ # ln -s /usr/lib/nss/libssl3.so /usr/lib/libssl3.so.1d
~ # ln -s /usr/lib/nspr/libplds4.so /usr/lib/libplds4.so.0d
~ # ln -s /usr/lib/nspr/libplc4.so /usr/lib/libplc4.so.0d
~ # ln -s /usr/lib/nspr/libnspr4.so /usr/lib/libnspr4.so.0d

Et une fois qu'on a fait tout ça a la main, une fois qu'on a recompilé GCC, écrit cet article, on s'apercoit que …

~ # eix chromium-bin
* www-client/chromium-bin
     Available versions:  ~0_p17395 [M]~9999
     Homepage:            http://code.google.com/chromium/
     Description:         Open-source version of Google Chrome web browser

“Vie de Merde” ^^

Le monitoring n'est pas compatible avec le sommeil

Se faire reveiller par une rafale de SMS a 7H du matin ca n'a pas de prix.

OVH continue de galérer avec leur routeur VSS-1-6K et mon monitoring, effectué par OVH et perle via sysmon à donc crié au loup dans ces heures la.

J'ai donc ajusté mes parametres sysmon pour prendre en compte les differentes route que prends mon monitoring pour avoir moins d'alerte si ce damné routeur tombe a nouveau en rade. Au passage je me suis dit qu'une doc dans mon Wiki pour sysmon serait une bonne idée.

start.txt · Dernière modification: mercredi 01 juillet 2009 par kathryl
Recent changes RSS feed Driven by DokuWiki Gentoo Powered Valid XHTML1.0 Powered by Apache PHP Powered Coffee Powered