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 …
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.
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 :
Réponse :
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 :
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” ^^
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.