Cassandra la base de données distribuée

Cassandra est une base de données distribuée dite de « seconde génération »:
  • Tolérante aux pannes. Chaque nœud de données est répliqués sans interruption de services.
  • Ni goulot d’étranglement réseau (bottleneck), ni point individuel de défaillance (SPOF) puisque chaque noeud du cluster est identique.
  • Possibilité de choisir entre une réplication synchrone / asynchrone des données.
  • Modèle de données clef / valeur

App

MySQL – Améliorer export et import de données

Exporter des données

SELECT name, age, city INTO OUTFILE '/tmp/data' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; FROM test.people;

Exporte le fichier /tmp/data contenant les champs name, age, city de la table people:

"alexandre","30","paris"
"mark","26","new york"

Importer des données

LOAD DATA INFILE '/tmp/data' INTO TABLE people FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Importe le fichier /tmp/data dans la table people

App

Firefox – Optimiser le démarrage avec des Vacuum SQLite

Les extensions de Firefox écrivent leurs données dans des tables issues de base de données SQLite.
L’historique Firefox, les marques-pages et d’autre fichiers dont voici la liste sont également stockés au format SQLite:

  • urlclassifier2.sqlite
  • search.sqlite
  • places.sqlite
  • webappsstore.sqlite
  • index.sqlite
  • cookies.sqlite
  • content-prefs.sqlite
  • downloads.sqlite
  • signons.sqlite
  • permissions.sqlite
  • formhistory.sqlite

Afin d’optimiser le démarrage de Firefox il peut être intéressant de lancer des Vacuum des différentes bases SQLite.

On va créer pour cela un script Bash que l’on pourra par la suite exécuter en Cron:

vi firefox_sqlite.sh

#!/bin/bash
pgrep -x firefox -U $(id -u) > /dev/null && echo "Vous devez arrêter Firefox avant de lancer les Vaccum SQLite !" && exit 1
find ~/.mozilla/firefox -name "*.sqlite" -ls -exec sqlite3 {} "VACUUM" \;
echo "Vaccum SQLite terminé.";

Rendre le script Bash éxécutable:

chmod +x firefox_sqlite.sh

Exécuter le script Bash:

./firefox_sqlite.sh

Relancer firefox

firefox &

App

Javascript – Debug application en Ajax

Une utilisation originale d’AJAX pour tracker un dysfonctionnement entre le client et votre applicatif.

  • Le javascript code :

  • <script Language="JavaScript">
    var from_time = new Date();
    from_time = from_time.getTime();
    function benchmark_loading_time() {
    var to_time = new Date();
    to_time = to_time.getTime();
    var msecs = (to_time - from_time);
    //submit the result
    var req = null;
    try { req = new XMLHttpRequest(); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
    if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
    req.open("GET", '/benchmark_loading_time.php?msecs=' + msecs + '&url=' + location.href, false);
    req.send(null);
    }
    </script>

  • L’appel dans l’HTML page:


<body onLoad="benchmark_loading_time()>

  • Cote serveur, le script PHP benchmark_loading_time.php se chargera de jouer avec les paramètres msecs et url

Source : lien

Web

Tuning Apache 2 pour WordPress

Tuning

Désactivation de modules non utilisés

a2dismod authz_default authz_groupfile status cgi env python

apache2.conf

Timeout 10

KeepAlive Off

<IfModule mpm_prefork_module>
StartServers          3
MinSpareServers       3
MaxSpareServers      10
ServerLimit         50
MaxClients          50
MaxRequestsPerChild   2000
</IfModule>

/etc/init.d/apache2 restart

Benchmark

Server version: Apache/2.2.9 (Debian)
Server built:   Jul 14 2009 20:03:28

Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
expires_module (shared)
headers_module (shared)
info_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
ssl_module (shared)
status_module (shared)

Créer un fichier de 10Ko:

dd if=/dev/zero of=/tmp/10K bs=10K count=1

autobench
version: 2.1.2

${HOME}/.autobench.conf

host1 = www.benjaminbaudouin.com
uri1  = /10K
port1 = 80
low_rate  = 20
high_rate = 200
rate_step = 20
num_conn  = 5000
num_call  = 10
timeout   = 5
output_fmt = tsv

run.sh

#!/bin/bash
graph_title="Apache/2.2.9"
dir="$(date +%Y%m%d)";
[ -e ${dir} ] && rm -rf ${dir}
mkdir ${dir}
[ ! -e ${dir}/output.tsv ] && autobench --single_host --file ${dir}/output.tsv
[ ! -e ${dir}/output.ps ] && echo -e "[copy/paste] graph title: ${graph_title}" && bench2graph ${dir}/output.tsv ${dir}/output.ps
[ ! -e ${dir}/output.gif ] && convert -rotate 90 ${dir}/output.ps ${dir}/output.gif

Conclusion

La limite basse Apache 2.2.9 (Tuned) est visiblement de 35 req/sec pour des pages de 10ko.

Liens

Autobench

Optimize apache slow vps wordpress

Apache Performance Tuning

App

Tracer une Application LAMP avec les logs Apache Blackbox

Logger avec Apache 2.0

C’est grâce au module Apache mod_logio.c (Logging of input and output bytes per request) que nous allons réaliser des logs de type blackbox.

Liste des modules compilés statiquement:
apache2 -l

Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c

Configuration Apache 2.0

# Blackbox log format
<IfModule mod_logio.c>
LogFormat "%a/%S %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D %I/%O/%B" blackbox
</IfModule>
<IfModule !mod_logio.c>
LogFormat "%a/%S %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D 0/0/%B" blackbox
</IfModule>
CustomLog /var/opt/apache2/logs/blackbox blackbox

Si le port source du client ne vous intéresse pas, remplacer %S par 0

Attention!

Pour utiliser pleinement les logs de type BlackBox if va falloir patcher le code source mod_log_config.c ou en créant un module de log dédié. Dans les deux cas, un nouveau format permettra à la directive d’enregistrer le port source de la connexion initiée par le client.

Si vous souhaitez logger le port source du client voici les modifications à opérer.  Pour Apache 2.0 cela se trouve dans les sources modules/loggers/mod_log_config.c

Trouver la fonction définit pour log_remote_address. Ajouter la fonction suivante après elle:

/*
 * log_remote_port patch
 */

static const char *log_remote_port(request_rec *r, char *a)
{
        apr_port_t rport;
        apr_sockaddr_port_get(&rport, r->connection->remote_addr);
        return apr_itoa(r->pool, rport);
}

Trouver une fonction initulée log_pre_config à la fin du fichier et ajouter ce qui suit :

static int log_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
{
        .....
        log_pfn_register(p, "s", log_status, 1);
        /* log_remote_port patch */
        log_pfn_register(p, "S", log_remote_port, 0);
    }
    return OK
}

Sauvegarder les modifications, puis recompiler Apache.

Grapher avec Munin

Source: http://www.oreillynet.com/pub/a/apache/2004/04/22/blackbox_logs.html


App

Firefox – Amélioration des performances mémoire

Suite à la mise à jour automatique de Firefox nous voici désormais avec la version 3.0.11

En lisant les nouvelles fonctionnalités je me suis arrêté sur celle qui me paraissait sans doute la plus importante: l’amélioration des performances mémoire du navigateur.

En substance voici ce qui a changé:

performance1

Une gestion de la mémoire améliorée

Avec toutes les nouvelles fonctions de gestion en place, Firefox 3 garde le contrôle sur l’utilisation de la mémoire. Le collecteur de cycles XPCOM nettoie continuellement la mémoire inutilisée. De plus, des centaines de fuites mémoire ont été corrigées.

JavaScript plus rapide

Firefox bénéficie maintenant des améliorations de JavaScript 1.8 (dont « expression closures », « generator expression » et « array reduce »).

Une empreinte mémoire plus petite

Compact, Firefox utilise maintenant moins de mémoire sur votre ordinateur lorsqu’il fonctionne.

Un chargement des pages plus rapide

Un remodelage du moteur de rendu et d’affichage des pages permet un chargement des pages Web plus rapide (et de la façon dont elles sont supposées être vues).

Améliorations du moteur graphique

L’amélioration du rendu de texte est juste une petite partie de tous les bénéfices apportés par le tout nouveau moteur graphique de Firefox 3.

App

MySQL – Haut Disponibilité : Réplication

Avec des bases de données Mysql et des tables contenant plusieurs millions d’enregistrements, les sauvegardes deviennent assez lourdes. Si un serveur tombe, cela peut entrainer plusieurs heures perdues, le temps de mettre en place un nouveau serveur, de réimporter les données depuis la backup. Nous ne parlons même pas des pertes financières potentielles due à cette période. On peut parvenir à une meilleure stabilité avec Mysql soit grâce à un cluster ou une réplication. Nous allons nous concentrer sur la réplication dans cet article. Quoiqu’il en soit, ceci est un rapide tutorial pour mettre une réplication en place; Faîtes un tour dans la documentation Mysql pour en savoir plus.

replication

Le master peut répliquer ses données vers plusieurs esclaves, auxquels des clients web différents peuvent envoyer leurs requêtes. Les écritures doivent toujours être envoyées au master. Si elles sont envoyées à un esclave, elles ne seraient pas répliquées sur les autres serveurs.

Note La réplication est asynchrone puisque l’esclave a besoin d’un petit délai pour être mis à jour. C’est particulièrement adapté pour les applications comme les datawarehouses.

Fail-over

La réplication ne fournit pas d’auto-failover car elle requiert une intervention manuelle. Un autre article est disponible sur l’implementation du failover avec Heartbeat. Cela donne la possibilité de basculer le trafic automatiquement vers le serveur esclave en quelques secondes.

Démarrage

Nous assumerons avoir un serveur seul contenant déjà les informations précieuses, et où l’on veut implémenter un système de redondance. Procédez de la manière suivante pour que votre serveur soit prêt à la réplication:

  • Activatez le log binaire sur le serveur maître. C’est absolument nécessaire, l’esclave doit lire ces fichiers binaires pour se synchroniser. my.cnf contient log-bin=mysql-bin dans la section [mysqld] dans mon cas
  • Ajoutez server-id=1 dans my.cnf.
    Cet id doit être unique pour chaque serveur (L’esclave sera 2). Redémarrez le service si ces options n’étaient pas activées.
  • Créez un compte pour l’esclave sur le master pour qu’il soit autorisé à répliquer:
    GRANT REPLICATION SLAVE ON *.*
    TO 'slave'@'192.168.0.3' IDENTIFIED BY 'mypassword';

    où ’slave’ est le nom d’utilisateur avec lequel le serveur esclave va se connecter, 192.168.0.3 l’adresse IP de l’esclave.

  • Mettez en place une nouvelle machine pour le serveur esclave et installez Mysql. my.cnf doit contenir ceci:
    [mysqld]
    server-id=2
    . Ne démarrez pas le service maintenant!

Transfer des données vers l’esclave

  • Bloquez tout d’abord les opérations d’écriture sur le master et enregistrez les dernières valeurs depuis le log binaire:
    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> SHOW MASTER STATUS;

    Vous devriez obtenir quelque chose de similaire à ceci:

    +-------------------+----------+--------------+------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------+----------+--------------+------------------+
    | my-db1-bin.000002 |      239 |              |                  |
    +-------------------+----------+--------------+------------------+

    Soyez sûrs d’enregistrer ces valeurs, elles seront nécessaires pour la suite.

  • Arrétez le processus Mysql sur le maître et faîtes une copie du répertoire de données avec tar par exemple. Après avoir exécuté tar, redémarrez le service. C’est la seule fois que le master sera arrété.
  • Copiez le fichier tar sur l’esclave dans le répertoire temp par exemple, décompressez le et copiez les fichiers vers le répertoire de données. Ne copiez pas les fichiers de log.
    Vérifiez que les droits sont corrects (Ils doivent être identiques aux fichiers originaux). Vous avez maintenant les données du master sur l’esclave.

Activation de la réplication sur l’esclave

Démarrez l’esclave avec l’option suivante:
–skip-slave-start

Vous pouvez aussi logguer les warnings dans le log d’erreurs pour avoir une meilleure idée de se qui se passe
–log-warnings

Maintenant que le serveur est démarré, connectez-vous dessus avec un client Mysql, et ajoutez les détails du master:

mysql> CHANGE MASTER TO
mysql> MASTER_HOST='192.168.0.2',
mysql> MASTER_USER='slave',
mysql> MASTER_PASSWORD='mypassword',
mysql> MASTER_LOG_FILE='my-db1-bin.000002',
mysql> MASTER_LOG_POS=239;

Les 2 dernières lignes contiennent bien sûr les valeurs récupérées sur le master.

mysql> START SLAVE;

La réplication peut commencer!
Le status de l’esclave peut être vérifiée via la commande suivante:

mysql> show slave status;
+---------------------+-------------+-------------+-///-+---------------+-------------------+
| Slave_IO_State      | Master_Host | Master_User |     | Connect_Retry | Master_Log_File   |
+---------------------+-------------+-------------+-///-+---------------+-------------------+
| Waitin...send event | 192.168.0.2 | slave       |     |            60 | my-db1-bin.000006 |
+---------------------+-------------+-------------+-///-+---------------+-------------------+

+---------------------+---------------+---------------+-----------------------+-----------------+
| Read_Master_Log_Pos | Relay_Log_File| Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running|
+---------------------+---------------+---------------+-----------------------+-----------------+
|           514457737 | s...in.000007 |      26082745 | my-db1-bin.000006     | Yes             |
+---------------------+---------------+---------------+-----------------------+-----------------+

+-------------------+-///-+---------------------+-----------------+-///-+-----------------------+
| Slave_SQL_Running |     | Exec_Master_Log_Pos | Relay_Log_Space |     | Seconds_Behind_Master |
+-------------------+-///-+---------------------+-----------------+-///-+-----------------------+
| Yes               |     |           514457737 |        26082745 |     |                     0 |
+-------------------+-///-+---------------------+-----------------+-///-+-----------------------+

Si la réplication arrête de fonctionner pour quelque raison que ce soit, la dernière erreur sera affichée ici. Vous pouvez aussi les trouver dans le fichier de log d’erreurs mysql.
Désactivez l’option –skip-slave-start du script de démarrage pour que la réplication soit activée après le redémarrage du serveur.

David Roze

Source: http://www.netexpertise.eu/fr/mysql/replication-haute-disponibilite.html

Plus d’infos sur : http://www.dbnewz.com/tag/replication/

App

Consommation réelle et cout d’une eee box sous Linux

eee-box-consommation

Mesures de puissance:

eee box (seul): 12W
eee box (+clef usb): 12,5W
eee box (+disque dur autoalimenté 160G): 14,5W

Finalement la consommation (réelle) n’est pas de 20W.

Cout électricité:

mensuel

  • 2€ pour une eee box seul alimenté 24h/24 7j/7
  • 2,5€ pour une eee box seul alimenté 24h/24 7j/7 + clef usb + disque dur 160G autoalimenté

annuel

  • 24€ pour une eee box seul alimenté 24h/24 7j/7
  • 30€ pour une eee box seul alimenté 24h/24 7j/7 + clef usb + disque dur 160G autoalimenté

Pour information une eee box consomme moins que le boitier HD Freebox !

freebox-hd

FreeBox HD (veille): 14W
FreeBox HD (lecture TV): 15,5W

Accélérer les performances de votre blog ou de vos applications Web pour mobile

Il y a un petit moment que je me demandais à quoi servait ce bouton Turbo dans le panel d’admnistration de WordPress.

En cliquant sur le lien Turbo il est possible d’installer Google Gears.

Google Gears améliore les temps d’accés à des pages webs. Il est utilisé par des produits comme Google Docs, Google Reader. Zoho l’intègre déjà dans sa suite bureautique en ligne.

 

Une fois installé l’application va accélérer l’accès aux sites compatibles Gears.
Tous les sites ne permettent pas à leur internautes de profiter de Google Gears.

Activons Gears pour www.benjaminbaudouin.com

 

En réalité Gears stocke en local (cache) tous le site :

  • css
  • js
  • images 
  • html
  • php 

 

Le résultat est tout simplement HALLUCINANT !
Normal me diriez vous: tous le site est en local. 

Gears est disponible sous Linux, Mac et Windows, Windows Mobile.
Firefox et Safari (Chrome ?) sont supportés.

Je pense que cela peut ouvrir des portes (meilleurs performances en temps d’accès) notamment pour

  • les blogs souvent gourmands en images et javascript.
  • applications web pour mobiles
  • (autres ?)

Web

Eee Box, le serveur Linux parfait pour héberger un blog chez soi

Le contexte

Un salon est un endroit ou l’on aime lire et se détendre: il ne doit donc pas y avoir de bruit.
Un serveur placé à cet endroit doit être suffisamment silencieux pour ne pas troubler cet espace harmonieux.

A la recherche du silence et d’une faible consommation


L’Eee Box consommerait très peu d’énergie (20 Watts en moyenne), serait peu bruyante (26 dB) et démarrerait en moins de temps qu’il ne faut pour le dire (7 secondes selon ASUS).

Fiche technique

  • 250 – 300 €
  • Intel Atom 1,6 GHz (N270)
  • 1 Go de DDR2 (PC5300)
  • lecteur de cartes-mémoire (SD/SDHC/MS/MS Pro)
  • un disque dur S-ATA 80 Go 5400
  • carte réseau Ethernet Gigabit + Wi-Fi 802.11 b/g/n
  • 4 ports USB 2.0
  • 1 prise casque
  • 1 port DVI
  • Windows XP Édition Familiale
    Linux
  • Garantie 2 ans
  • 1,3 kg
  • 223 x 178 x 26 mm

Si l’on refait le calcul:

P=20 W au lieu de P=89W
Cela représente un besoin en énergie inférieure de 88 % que la solution mise en place.
On en déduit les couts mensuel et annuel en calculant 22 % de 15 €:

Cout mensuel électrique: 3 €
Cout annuel électrique: 40 €

Conclusion

Les économies d’énergies et financières sont réelles: 40€ annuelle au lieu de 147€ pour un serveur classique.

Près de 100€ d’économie.
Il est donc important de s’y attarder. En choisissant cette solution le serveur peut être amorti en 2 ans.

En ce qui concerne le bruit (26dB) j’avoue ne pas vraiment me rendre compte de ce que cela représente.
Cette solution est intéressante dans la mesure ou l’on ne possède pas encore de serveur chez soi.

Qu’en pensez-vous ?

Recent Tweets

Catégories