vendredi 29 août 2008

Test de replication d'un serveur memcached

Pour mettre en place la réplication d'un serveur memcached ,il faut :
- Le source de memcached
- Le patch repcached à appliquer


Sur le site du projet repcached on trouve à la fois le patch mais aussi le source memcached patché.

Pour appliquer le patch :

Aller dans le répertoire supérieur de memcache et lancer la commande :
patch -p0 < 'le_nom_du_fichier_patche'

Puis aller dans le répertoire des sources memcached et taper :
./configure --enable-replication
make && make install

Dans le répertoire source se trouve l'executable memcached et la commande :

./memcached -v -u root

donne la ligne :
replication: listen

Confirmé par un netstat -a|grep LIST

tcp 0 0 *:11211 *:* LISTEN
tcp 0 0 *:11212 *:* LISTEN

Le port 11212 sera utilisé par la réplication

Si on relance memcached en très verbeux on peut suivre les connexions :
./memcached -vv -u root

<6 server listening (replication)
replication: listen
<7 server listening
<8 send buffer was 109568, now 268435456
<8 server listening (udp)

Je lance une deuxième instance de memcached sur un port différent :
./memcached -u root -p 11310 -x localhost -vv
Les lignes en sortie donnent :

replication: connect (peer=127.0.0.1:11212)
<6 new client connection
<7 new client connection
<8 new client connection
replication: marugoto copying
<6 marugoto_end
<9 server listening
<10 send buffer was 109568, now 268435456
<10 server listening (udp)
replication: start


Dans la première console s'ajoute les lignes :

replication: accept
<6 connection closed.
<9 new client connection
<6 new client connection
<10 new client connection

Ainsi le premier serveur est en relation avec le deuxième
L'ajout d'une session sur le deuxième serveur est répercuté sur la premier serveur
(deuxième serveur)
<11 new client connection
<11 set fac097f7fb944ea33b7fb2f31b45b9b4 1 0 56
>11 STORED
<11 set fac097f7fb944ea33b7fb2f31b45b9b4 1 0 94
>11 STORED

(premier serveur)
<9 rep fac097f7fb944ea33b7fb2f31b45b9b4 1 0 56 1
REP>9 STORED
<9 rep fac097f7fb944ea33b7fb2f31b45b9b4 1 0 94 2
REP>9 STORED

Le seul mode disponible est donc le mode master/master

Si on coupe un serveur et qu'on ajoute des entrées sur l'autre , au redémarrage du serveur stoppé , les lignes suivantes vont s'afficher :
replication: marugoto start
replication: marugoto 7
replication: marugoto owari

(l'auteur est japonais et aime le manga !! )

Le serveur qui est resté en marche envoie les données que le serveur stoppé n'a pas enregistrées.

Ainsi se dispositif réalise à la fin la synchronisation ET la restauration des sessions .
Les nouvelles options de réplications ne sont fournies qu'a la deuxieme instance par les paramètres : -x host_de_l_autre_serveur -X port de réplication (defaut 11212) comme l'indique l'option -h (help)
-x hostname or IP address of peer repcached
-X TCP port number for replication (default: 11212)

L'avantage de ce dispositif est qu'il est intégré à memcached et qu'il propose un système de resynchronisation.

Activerecord et les attributs virtuels

Le modèle CRUD ( create ,read , update ,delete) de Ruby on Rails est très simple.
Le framework mappe les tables avec des modèles par activerecord et mappe le modèle à un couple controleur/vue .

Le mapping repose sur la bijection : un champs de la table correspond à un attribut de l'objet Ruby.

Exemple : la table users avec les champs ''prenom',nom' et la clé 'id' se traduit par une vue avec un formulaire avec deux champs :"prenom " et "nom".

Mais il arrive parfois que l'on veuille parfois manipuler des attributs qui non pas d'existence réelle dans une table . Par exemple je veux traiter prenom et nom comme un champs unique : 'nom complet' , ou ajouter un champs uniquement destiné à la présentation dans un formulaire.

Plusieurs possibilités s'offrent à nous : soit traiter ce champs dans le contrôleur , soit l'ajouter comme un champs virtuel au modèle .

A mon avis la deuxieme solution est la meilleure car elle insère le virtuel au plus tot dans la logique de traitement. Et ainsi elle permet de bien regrouper tous les attributs au sein d'un même objet très flexible.

Pour cela il faut ajouter deux méthodes au modèle :

# models/user.rb
def nom_complet
[prenom, nom].join(' ')
end

def nom_complet=(chaine)
split = chaine.split(' ', 2)
self.prenom = split.first
self.nom = split.last
end
Le contrôleur et la vue pourront maintenant manipuler un troisième champs 'nom_complet' .

Une autre technique permet aussi de modifier le comportement mais pas le mappage des attributs :
les méthodes write_attribute et read_attribute d'activerecord

    def length=(minutes)
write_attribute(:length, minutes.to_i * 60)
end

def length
read_attribute(:length) / 60
end
Si les modifications à prévoir ne sont destinées qu'à l'affichage , il est préférable de d'utiliser des' helpers' mutualisables par plusieurs champs de meme type (exemple : les champs dates ou booleens ) .

voir une demo sur railscasts.

mercredi 27 août 2008

Serveur de session memcached: replication des sessions

J'utilise une architecture de gestion de session a base de memcached . Nativement les clients memcached savent repartir la charge sur plusieurs serveurs. Reste, le problème de la chute d'un serveur memcached qui provoquera la perte des sessions hébergées par ce serveur. J'ai développé il y a quelques temps un système de réplication des sessions memcached basée sur les log (mode verbeux --vv ) . Un script Perl va lire ce fichier et rejoue les opérations sur un ou plusieurs serveurs memcached . Ainsi plusieurs serveurs sont synchronisés en temps réel.
J'avais prévu un mode 'maitre-esclave' et un mode 'maitre-maitre' . Sur fresmeat le projet repcached communique sur un patch pour mecached qui lui ajoute des fonctions de réplication.

C'est une excellente nouvelle et je prévoit des tests sur le produit.

mardi 26 août 2008

SOA :partie 2

Dans le premier post sur SOA , j'avais énuméré les différents composants d'une architecture SOA.

Je vais exposer maintenant comment développer une application sous SOA et quel sont les questions à poser pour déterminer si votre organisation est faite pour le SOA

Développer une application SOA .

Une application SOA est un agrégat de d'interaction entre des composants. L'écriture des composants ressemble au développement d'un web service. Mais se qui change c'est le déshabillages composants au profil de la base de registre. Un composant doit etre 'basique' , il doit embarquer le moins d'intelligence possible. Cette intelligence doit être stockée dans la base de registre et l'évolution du traitement métier du composant se fera par la gouvernance de cette base de registre.
On ne parlera pas de mise en oeuvre d'une application mais de la modélisation d'un processus métier par des outils de BPM (Business Process Management) .
Ces outils BPM sont connectés avec la base de registre , le moteur de workflow et le gestionnaire de version.

Questions à se poser avant d'attaquer le SOA.

1) Votre secteur d'activité est-il large et complexe ?
2) Votre secteur change-t-il rapidement ?
3) Vos applications cachent elles des richesses ?
4) Avez vous une architecture informatique flexible ?
5) Comment votre entreprise réagi aux changements ?
6) Les services sont ils interdépendants ?
7) Utilisez vous des technologies propriétaires ou des standards ouverts ?
8) Savez vous où sont vos règles de gestions ?
9) Avez vous confiance dans l'adaptation et la qualité de vos données ?
10) Pouvez vous connecter votre système avec celui de vos partenaires ?


Si vous avez une majorité de 'OUI' vous etes SOA ready .

Ajouter de la graisse de singe dans son firefox (greasemonkey)

Firefox est riche en extensions diverses , il y en a une qui est très intéressante: greasemonkey.

Cette extension permet de réaliser des traitements dynamiques sur les pages web. Pour cela , il suffit d'écrire des petits scripts en javascript et de les intégrer à firefox grace à greasemonkey.
Par exemple ce script
:
// ==UserScript==
// @name hello
// @description essai eric
// ==/UserScript==
alert ('hello world');


Affichera une fenetre pop-up sur chaque page consultée :





La gestion des scripts se fait par une nouvelle fenetre dans firefox :



Il est possible de cantonner le déclenchement d'un script pour une série de site.

Quelques usages de ces sripts :

-Bloquer des popup, des images .
-Ajouter des liens automatiquement
-Telecharger des fichiers rapidement (rapidshare)
-Réecrire des liens à la volée .

Un exemple de réécriture : ajouter automatiquement ?.jpg à la fin des url . Mais pourquoi faire ? . Des petits malins se sont aperçu que sur certains Hot-spot wifi payants , il était possible de surfer sans payer simplement en ajoutant '?.jpg' à la fin des URL. Le système ne filtre pas les images et l'ajout de cette chaine de caractère est sans conséquence pour la navigation. Vous pouvez essayer dans certains aéroports des USA.

Donc le script suivant :
// ==UserScript==
// @name addjpg
// @description essai jpg
// ==/UserScript==
if (window.location.toString().match(".jpg") == null) {
window.location.replace(window.location + '?.jpg');
}

Ajoutera systématiquement la chaine magique sur toutes les URL sauf celles possédant déjà l'extension.

L'adresse du projet Greasemonkey est www.greasespot.net. Sur ce site on trouvera un dépôt de script avec plusieurs milliers de programmes.

dimanche 24 août 2008

anniversaire benjamin et guillaume

Le 22 aout grand évenement , on a fêté l'anniversaire des garcons : 17 ans




Le reste des photos est sur l'album : ici (la ciotat , le sentier des ocres )

jeudi 21 août 2008

Un programme pour lister les differences

Un outils très pratique pour les codeurs : beediff de beesoft.org

Ce programme permet de comparer visuellement deux fichiers.
Le résultat est présenté sous cette forme :


C'est pas beau ca ?

jeudi 14 août 2008

visite virtuelle

Il existait déja un site proposé par Google pour arpenter les rues d'une ville :Google Street View
mais cette application offre souvent des vues à faible résolution. Ce n'est pas le cas de mapjack.
qui offre des images de qualité saisissante.


L navigation est tres intuitive : La partie inférieure de l'écran montre le personnage 'jack' et son champs de vision dans une carte. Le haut de l'écran montre les photos.

Actuelement peu de villes sont numérisées mais ca va venir très vite.


mercredi 13 août 2008

SOA , féderation d'identité et gouvernance

A la suite de mes lectures sur le SOA et des echanges riches sur ce thème , j'ai réalisé cette 'big-picture' où sont representé les differents processus de gestion et les composants relatifs àla gestion d'identité. Dans une architecture SOA cette fédération peut etre utilisée pour les personnes mais aussi pour les composants entres eux par le biais d'empreinte et de signature.

vendredi 8 août 2008

Optimisation d'une application Rails

Un article sur Ruby on rails dans le linux journal aout 2008 explique comment optimiser les performances dans applications Rails. Tout d'abord, WEBrick le serveur web de développement livré avec Rails ne doit pas etre considéré comme un serveur web de production. Une mise en production devra se faire avec le serveur Mongrel.

Cet article détaille comment migrer les log Rails vers syslog.
Il faut installer la gemme SyslogLogger par la commande : gem install --remote SyslogLogger .
Puis il faut ajouter les lignes suivantes dans le fichier de configuration environment.rb :

require 'syslog_logger'
RAILS_DEFAULT_LOGGER = SyslogLogger.new

Et la ligne
*.info /var/log/production.log
dans le fichier /etc/syslog.conf

Le programme pl_analyse /var/log/production.log va afficher le temps consommé pour chaque requete , le temps de traitement des requetes SQL et enfin le temps utilisé pour la restitution des résultats.

Un autre utilitaire permet de profiler les applications Rails , l'installation se fait par :
gem install --remote ruby-prof

Il est nécessaire d'écrire un petit script de bench dans le répertoire crée à cet effet : test/performance
Le script peut être très simple comme : get ('/')

Puis le script sera lancé par :
script/performance/request -n 18 test/performance/test.rb

Le résultat sera écrit dans le fichier profile-output.txt

Le véritable travail d'optimisation commence avec l'analyse de tous ces résultats. Il faut trouver quelle procédure est la plus gourmande en temps de traitement , pour la réécrire, la réorganiser ou pour ajouter des fonctions de cache.

Recette sympa qui coute pas cher

Une drole de recette de cuisine sur ce blog (titre du blog :le consottisier).

La recette est à base de méduse. C'est vrai que le réchauffement climatique favorise la prolifération de ces bestioles.



Ca donne envie !!

Le détail est ici

jeudi 7 août 2008

SOA partie 1

SOA pour les nuls .


Service Oriented Architecture For Dummies


Voici je que j'ai retenu de ce livre :

Qu'est qu'une architecture SOA ? :

Une Architecture Orientée Service est une architecture logicielle permettant de construire des applications correspondant à des processus métiers par assemblage 'lache' de composant.


* SOA est fait pour batir des applications de gestion
* SOA est une boite noire , SOA masque la complexité d'un SI et facilite le branchement de nouveaux composant à cette boite noire.
* Les composants SOA sont reliés entres eux par un couplage 'lache' . Cela veut dire qu'il est non seulement possible de remplacer un composant par un autre mais aussi que le nouveau composant peut avoir une interface ou une invocation différente .
* Les composants sont agencés entre eux de manière à fournir un service bien précis correspondant à un processus métier.

Le SI prendra la forme d'un ensemble de composants organisés autour d'un bus applicatif appelé ESB : Entreprise Service Bus.
L'ESB est le tuyau par lequel les messages circulent d'un composant à un autre.

En plus des composants applicatifs , on trouvera un certain nombre de composants spécifiques comme :

* Le SOA registry
* Le moteur de workflow
* Le service broker
* Le superviseur

Le SOA registry est une sorte de base de registre , ou de catalogue où sont stocker les descriptions des composants. Il est utilisé par le broker comme annuaire de référence , mais aussi par les développeurs d'application comme référentiel des composants. Il stocke la descriptions des composants , la façon d'y accéder et les règles de fonctionnement. C'est dans le registry que sont publié les services. On peut utiliser pour cela un annuaire des services (UDDI Registry)

Le moteur de workflow est le composant responsable du bon acheminement des messages par l'ESB.

Le broker est le composant qui permet la mise en relation des composants entres eux.

Le superviseur : c'est le grand chef d'orchestre et aussi le surveillant du bus. Il a la possibilité de communiquer avec des couches plus basses. Il est aidé dans sa tache par des 'agents' qui supervisent les composants.

Cinématique d'une transaction.
Exemple :le composant A désire envoyer un message applicatif au composant B.

* Le composant A va envoyer une requête au broker en lui indiquant sa demande.
* Le broker va lancer une recherche auprès du Registry pour connaitre le composant B à activer et comment le solliciter.
* En réponse du registry le broker va connecter les composants A et B.
* Le composant A va envoyer son message à B.

Chaque composant est doté d'un 'adaptateur' . Cet adaptateur fait l'interface entre le composant et le bus applicatif , un composant peut posséder plusieurs d'accès. Ces méthodes seront exposées dans le Registry.
Exemples d'adaptateur

* Web service : on accède au composant par le protocole HTTP(S)
* Terminal adaptateur
* Connecteurs SQL
* Connecteurs dédiés (LDAP, CORBA,SOAP)

Le composant 'Registry' sert donc à :

* Stocker les descriptions des interfaces
* Les définitions des processus métiers
* Les règles de gestion de ces processus métiers
* La description du niveau de service
* Les règles de gouvernance

Tout ceci forme les métadonnées, ces métadonnées seront exploitées par le Broker

Le Broker va réclamer au Registry les métadonnées des composants pour pouvoir les faire dialoguer entres eux.
Les composants ayant un adaptateur SOAP expose le plus souvent leur interface par le biais du protocole WSDL (Web Service Description Language) . Par ce langage les web service expose ses conventions de connexion , de syntaxe de message et de typage de données . Toutes ces informations sont reprisent dans le UDDI Registry (Universal Description ,Discovery , and Integration) .

Le bus des services (ESB).
Il sert à connecter les composants métiers et techniques, et gère notamment :

* Le service des messages applicatifs
* La validation des messages
* Le transport des messages
* Le transcodage des messages
* La sécurité (intégrité, encryptage)

Enfin il doit etre capable de gérer des niveaux de priorités des massages et doit s'adapter aux performances globales.

Phéno-mèmes

J'ai decouvert un nouveau mot : les mèmes .
Une définition donnée par Libération : Néologisme désignant les phénomènes récurrents (vidéo, personnage, expression, etc.) inscrits dans le panthéon de la culture populaire d’Internet.
Exemples : lonely15, lolcats ou
Chuck Norris .

Un site c'est amusé à réaliser une frise chronologique : ici.





mercredi 6 août 2008

Nouvelle vidéo de New York

En avant pour une nouvelle vidéo avec la balade en bateau dans le port de NY.



Ny2-lq
envoyé par germanlinux

Jeux, tu, il

Un petit jeu sympa : sur ce lien , son titre 'amorphous' , il faut couper en deux des ectoplasmes verts.
Un autre ici : Duck , ici j'ai un jeu comme j'aime: il n'y a pas d'instructions , on doit deviner tout seul comment passer au niveau suivant.

Enfin dans la droite ligne du jeu Incredible machine qui ressemblait à ça :



C'était une sorte de puzzle où il fallait arriver à réaliser une action comme mettre le ballon dans le panier, allumer une lampe etc , en utilisant les objets proposés.

La nouvelle version vient de sortir , elle s'appelle : crazy machine , le graphisme style cartoons a cédé le pas sur la 3D :

lundi 4 août 2008

Musique séries et jeux

Sur ce lien un site consacré à la musique des séries et des jeux: coucoucircus .

Des centaines de références.
Rappel: pour moi le top 3 des séries :
  • Cold cases
  • Dr House
  • Dexter

Gateau au fromage blanc

Un gâteau très simple à faire et qui présente l'intérêt d'être léger.

  • 500 g de fromage blanc (même du 0 % )
  • 500 g de Faisselle ou de sceam cheese
  • 4 oeufs
  • 150 g de sucre
  • 4 cuillères à soupe de farine
  • 2 sachets de sucre vanillé
  • 40 g de beurre

Préparation :
  • Préchauffer le four 150/170 degres
  • Isoler les blancs des jaunes
  • Mélanger tous les ingrédients au fouet vitesse lente
  • Monter les blancs en neige et les incorporer au mélange
  • Mettre dans un plat au bord beurré et au fond tapissé de papier de cuisson
  • Faire cuire 50 minutes , surveiller avec la pointe d'un couteau. Le dessus doit etre doré mais pas marron foncé.
  • Le mélange monte comme un soufflet mais retombe par la suite
Les plus: il est possible d'ajouter du jus de citron ,des raisins secs etc.

dimanche 3 août 2008

Usa 2008 video 1

Voici notre premiere vidéo réalisée en haut du Rockfeller Center à New York (95 étage) . J'ai monté la vidéo avec Pinnacle, mais avec un portable (problème de place ,de mémoire etc ) .