Tags: Programmation
J’écoutais récemment la présentation de Randy Shoup sur l’architecture d’eBay {en}. Plusieurs points m’ont fasciné dans cette présentation:
- Le site où la présentation est disponible… voir le « powerpoint » en même temps que le dialogue, très intéressant
- Chez eBay tout est énorme
- Plusieurs des techniques discutées dans le site ne s’appliqueront probablement jamais à vous
- La vitesse d’un site est purement une question de perception
C’est ce dernier point que j’aimerais couvrir aujourd’hui. Souvent, très souvent, les sites webs et logiciels sont développés pour fonctionner de façon synchrone et séquentiel. Imaginons un site web où
les utilisateurs peuvent inscrire des commentaires. Utilisons M2i3.com comme exemple. Nous désirons que les choses suivantes surviennent lorsqu’un utilisateur envoie un commentaire:
- Vérifier que le commentaire n’est pas du spam
- Aviser un service de collection de commentaires quelconque qu’un commentaire a été ajouté
- Envoyer un courriel à l’utilisateur le remerciant du commentaire
- Envoyer un courriel au propriétaire du site avec le commentaire dedans
- Retourner une page pour remercier l’utilisateur de son commentaire
Il ne faut pas oublier que le service de spam pourrait être non-disponible tout autant que le service de collection de commentaires. De plus, chaque service contacté prends du temps, sans compter le temps nécessaire à l’envoie des deux courriels. Vous commencez à voir le portrait? Non???
// –>
Premièrement, aussi fiable que soit les services pour le spam et les commentaires, il y a des jours où ils ne seront pas disponibles ou trop occupé pour répondre aux commentaires envoyés par notre site. Ces jours-là, nos utilisateurs ne pourront pas envoyer de commentaires… et si on ne fait pas attention, notre site aura l’air « brisé ». Ensuite, qui veut attendre 2-3 secondes pour se faire dire « merci d’avoir envoyé uncommentaire » (peut être plus longtemps si les services sont occupés ou surchargés). Et pendant que notre site s’occupe de ce commentaire, il y a d’autres requêtes qui ne pourront être servie. Le site semblera plus lent, peut être même non-disponible s’il est cité sur un site très populaire comme digg. Regardons certains aspects de la soumission du commentaire. La validation de spam doit survenir avant d’effectuer tout le reste. On ne voudrait pas afficher un commentaire illégitime ou aviser tout. Et l’envoie des courriels ainsi que le service de collection de commentaire n’ont pas besoin d’être complétés avant de remercier l’utilisateur et rendre le blogue disponible. Donc si on réorganise la soumission de commentaires de façon totalement asynchrone le commentaire sera ajouté avec un état « nouveau, non-validé » et un message envoyé dans une queue pour traitement ultérieur (et par ultérieur on veut dire dans les secondes qui suivent, l’important est que la soumission du commentaire peut être complétée sans que les autres étapes soient nécessaires). Pour l’utilisateur du site web, la soumission semble alors instantanée et même si les autres services sont lents ou non disponibles notre site web continue à fonctionner. Si, pour quelques raisons que ce soit, la fréquentation du site augmente drastiquement, la queue de validation peut devenir plus lente, mais le site semblera toujours rapide… et rien n’empêche de séparer la validation du commentaire du service de ping et des courriels. De cette façon le commentaire sera, la majorité du temps, validé avant même que la personne l’affiche et le reste des événements se dérouleront comme prévu, plus tard. Qu’en dites-vous?
Jean-Marc
Liens discutés dans ce blogue