Mongo Dans Tous Ses Etats – Réplication

Cette semaine, j’ai eu l’occasion de commencer à étudier le fonctionnement de la réplication et du sharding avec MongoDB. Voici diverses informations provenant du guide sur la réplication.

Réplication

La réplication consiste à écrire la donnée sur plusieurs serveurs et répond ainsi au problématique de haute disponibilité et de redondance des données. Elle permet, dans certains cas, d’augmenter les capacités en lecture. Un replica set peut avoir jusqu’à 12 membres dont 7 voteront à la fois. Pour disposer de plus de 12 instances, il est nécessaire de passer à la réplication maître-esclave.

L’architecture standard pour un replica set en production se compose de trois membres. Si l’application se connecte à plusieurs replica set, chacun doit avoir un nom différent. Les membres s’envoient des ping toutes les 2 secondes.

Replica Set: Groupe de mongod disposant des mêmes (~~) données.

Membres

On distingue deux types principaux de mongod dans un replica set: les primaires et les secondaires.

Primaire (Primary)

Il est unique et reçoit toutes les opérations d’écriture. Tous les changements sont conservés dans son oplog. Une élection d’un nouveau mongod primaire à lieux, si l’actuel ne communique avec aucun membre du replica set pendant 10s.

Secondaire (Secondary)

Récupère le oplog et applique les opérations sur son jeu de données. En cas d’indisponibilité du primaire, un mongod secondaire sera élu à sa place.

Membre à priorité 0

Mongod secondaire qui ne peut pas devenir primaire et ne peut déclencher d’élections. Permet de s’assurer que seul les membres qui en ont les capacités deviendront primaire (distribution géographique, hardware). Il est conseillé de s’assurer que le datacenter principal contient les votants et les membres éligibles.

Membre caché

Invisible pour les applications clientes. Sont toujours des membres à priorité 0, ne peuvent devenir primaire mais peuvent voter. En cluster, mongos n’interagit pas avec les membres cachés.

Membre retardé

Reflète un état retardé de l’état du groupe.
Requis:
* Doit être un membre à priorité 0
* Devrait être un membre caché
Le délai doit être plus petit que la capacité de oplog. Cette fonctionnalité est utile pour pouvoir appliquer un rollback (retour en arrière) en cas d’erreur humaine.

Arbitre (Arbiter)

Sa fonction est de voter en cas d’élection d’un mongod primaire et permet d’obtenir une majorité en cas d’un nombre pair de membres.
Important: Ne pas ajouter d’arbitre sur les machines hébergeant déjà un primaire ou un secondaire.

Stratégies

Déployer un nombre impair de membres pour s’assurer qu’un primaire pourra toujours être élu. Ajouter un arbitre si besoin.
Tolérance aux fautes: Correspond au nombre de membres auquel on soustrait la majorité requise pour élire un nouveau mongod primaire.
Au moins un membre à priorité 0 dans un autre datacenter. Garder une majorité de membre au même endroit.

Le sharding est souvent une meilleur stratégie pour augmenter les capacités en lecture et en écriture.

Read Preference Mode

* primary
* primaryPreferred
* secondary
* secondaryPreferred
* nearest
Seul primary permet d’être sûr d’avoir des données totalement à jour.
Utiliser readPref() dans mongo shell pour accéder aux préférences.

GitLab

La migration de nos différents services s’effectue progressivement. Après WordPress, c’est au tour de notre système de gestion de code de changer de serveur et d’évoluer par la même occasion. Jusqu’à présent, nous utilisions Gitolite. Celui-ci fonctionne plutôt bien, une fois qu’on a trouvé les bonnes configurations. Pour une utilisation personnelle sous GNU/Linux, aucun problème, mais pour inviter d’autres contributeurs ce n’est pas toujours très simple. Entre la génération des clefs, la mise en place des bons fichiers de configuration sous Windows et l’obligation de gérer à la main les autorisations et créations de dépôts, j’ai décidé de passer à quelque chose de plus conséquent: Gitlab.

Les avantages sont nombreux: interface facilitant la gestion des dépôts et accessible à tous les utilisateurs, gestion fine du nombre de dépôts maximum pour chaque utilisateur, la création de dépôts n’est pas limité à l’administrateur et surtout, la possibilité de cloner un dépôt directement via http. Autant d’avantages qui m’ont incité à tenter l’installation de la bête.

La mise en place se déroule sans réels difficultés grâce à un guide d’installation pas à pas. Chaque étape est décrite en détails et toutes les commandes sont commentées, bref la navigation dans ce guide s’effectue sans écueils.

Le guide se termine par la configuration de Nginx pour permettre aux utilisateurs d’accéder au service. Si comme moi, vous utilisez plutôt Apache, pas de panique, des fichiers de configuration pour Apache sont également disponible. Pas grand chose à dire sur ce point là, à part  de ne pas oublier d’activer les modules listés au début des fichiers via a2enmod.

La dernière étape, consiste à faire fonctionner la connexion sécurisée à tous les niveaux. Quelques recherches reste à faire de ce côté là pour s’assurer que git accepte mon certificat auto-signé. Des paramètres à modifier dans gitlab-shell entre autre.

Nous sommes maintenant près pour l’étape finale, pusher du code et mettre à disposition notre gitlab pour les amis, connaissances et autres!

Changement

Bonjour (fidèles) lecteurs et robots de l’internet!

Comme l’annonce le titre de ce post, il y a eu du changement récemment. En effet, celui-ci a pu passer inaperçu mais l’utilisateur averti aura remarqué un changement d’adresse IP. Unicoda change de serveur et la migration vient d’être terminée avec succès. Notre petit site dispose maintenant d’un serveur kimsufi d’ovh.

Ce changement de serveur va nous permettre de continuer nos expérimentations diverses et variées. Il reste quelques services utiles à migrer depuis l’ancien serveur, comme la synchronisation de favoris Firefox et un Etherpad. J’essayerai de documenter un minimum l’installation des différents services à venir pour faciliter une installation ou une réinstallation éventuelle.

En résumé, plein de choses à faire pour que tout soit opérationnel et bien sûr, des projets plein la tête: streaming, traductions… A très bientôt!

[Raw Nerve 4] Plonger dans la douleur

Il y a de cela un an, la mort d’Aaron Swartz affectait de nombreuses personnes à travers le monde. Comme un certain nombre d’entre elles, je ne connaissais pas Aaron, j’ignorais jusqu’à son existence et ses combats. Mais comme elles, j’ai ressenti un sentiment de perte. Cette traduction est donc une façon de lui rendre hommage à mon tour, un an après.

Aaron Swartz à la rencontre Wikipédia de Boston, en août 2009

Plonger dans la douleur

Cet article est la 4e partie de la série Pensée Sensible.

Lorsque vous commencez à faire de l’exercice pour la première fois, c’est assez douloureux. Pas énormément, comme toucher une plaque de cuisson chaude, mais assez pour que si votre seul but est d’éviter la douleur, vous arrêtiez certainement de le faire. Mais si vous continuez de vous entraîner… eh bien, ça devient plus douloureux. Lorsque vous avez terminé, si vous vous êtes vraiment donné à fond, vous vous sentez souvent éreinté et endolori. Et le lendemain, c’est encore pire.

S’il n’arrivait que cela, vous ne le feriez probablement jamais. Ce n’est pas particulièrement amusant d’être courbaturé. Et pourtant, nous le faisons – parce que nous savons que la douleur va nous rendre plus forts à long terme. La prochaine fois, nous serons capables de courir plus et soulever plus longtemps avant que la douleur arrive.

En sachant que cela fait toute la différence. En fait, nous en arrivons à considérer la douleur comme une sorte de plaisir – ça fait du bien de se donner à fond, de se battre jusqu’à la douleur et de devenir plus fort. Sentez la brûlure! C’est amusant de se réveiller courbaturé le lendemain matin, car vous savez que c’est juste le signe que vous devenez plus fort.

Peu de gens le réalise, mais la douleur psychologique fonctionne de la même manière. La plupart des gens considèrent la douleur psychologique comme la plaque de cuisson chaude – si commencer à penser à quelque chose les effraye ou les stress, ils arrêtent rapidement d’y penser et changent de sujet.

Le problème, c’est que les sujets qui sont les plus douloureux, tendent également à être ceux qui sont les plus importants pour nous: il y a les projets que voulons le plus faire, les relations  auxquelles nous tenons le plus, les décisions qui ont le plus de conséquences pour notre futur, les risques les plus dangereux auxquels nous nous exposons. Nous en avons peur parce que nous savons que l’enjeu est grand. Mais si nous n’y pensons jamais, alors nous ne pourrons jamais y remédier.

Ray Dalio écrit:

C’est une loi fondamentale de la nature, pour évoluer, on doit dépasser ses limites afin de gagner en force, ce qui est douloureux – que ce soit pour perdre du poids, faire face aux problèmes la tête haute, ou tout autre chose. La nature nous a donné la douleur comme messager, pour nous dire que nous approchons, ou que nous avons dépassé nos limites d’une certaine façon. En même temps, la nature a fait que le processus pour devenir plus fort nécessite de dépasser nos limites. Gagner en force est un processus d’adaptation du corps et de l’esprit pour trouver nos limites, ce qui est douloureux. En d’autres termes, douleur et force résulte typiquement de la rencontre de ces barrières. Quand nous affrontons la douleur, nous sommes à un important tournant de notre processus décisionnel.[1]

Oui c’est douloureux, mais l’astuce consiste à effectuer un changement mental. Réaliser que la douleur n’est pas quelque chose d’affreux à repousser et à éviter, mais un signal que vous devenez plus fort – quelque chose à savourer et à apprécier. C’est ce qui vous rend meilleur.

Très vite, quand vous remarquerez quelque chose qui provoque une douleur psychique, vous serez enthousiaste, pas apeuré. Ooh, une autre chance de devenir plus fort. Vous rechercherez les choses qui vous font peur et les confronterez intentionnellement, car c’est un moyen simple d’obtenir les récompenses du développement personnel. Dalio suggère de penser à chaque chose comme à un casse-tête, à l’intérieur duquel est incrusté  une magnifique gemme. Si vous combattez la douleur pour résoudre l’énigme, vous la déverrouillez et pouvez garder la gemme.

L’astuce est: lorsque vous commencez à sentir venir la douleur psychologique, ne reculez pas et ne battez pas en retraite – plongez. Plongez dans la douleur.

Dans le développement agile de logiciel, il y a une phrase: si ça fait mal, faites le plus souvent.[2]

Par exemple, imaginez Jane et Joan qui travaille ensemble sur un projet logiciel. Ils possèdent tous les deux un exemplaire du code; Jane rend les messages d’erreur plus sympathiques pendant que Joan ajoute des nouvelles fonctionnalités. Ils travaillent tous deux sur leur tâche pendant des jours et des jours jusqu’à ce qu’ils aient fini. Maintenant, ils font face à un problème, ils doivent fusionner leurs différents changements.

Peut-être avez-vous eu ce problème, soit avec du code soit avec un document texte, vous envoyez une ébauche d’un rapport à deux amis, tous deux suggèrent différents changements, et vous devez les intégrer dans le document original. C’est incroyablement agaçant – et le faire pour un logiciel est encore pire. Donc les gens laissent ça de côté. Jane pense « laisse-moi juste rendre les messages de remerciements un peu plus accueillants avant de fusionner » et Joan se dit « laisse-moi juste ajouter une fonctionnalité en plus avant de fusionner ».

Ils continuent de repousser la fusion, et chaque fois qu’ils le font la tâche devient plus grande et plus douloureuse. Mais ils devront le faire au bout du compte. Entre temps, les changements sont tellement nombreux que cela demande des jours de travail minutieux juste pour assembler le code déjà écrit. C’est un processus difficile et douloureux – qui va faire que Joan et Jane vont juste vouloir le repousser encore plus la fois prochaine.

La méthode agile, en revanche, est de faire l’opposé: fusionner fait mal, donc nous allons le faire plus souvent. Plutôt que de fusionner après quelques semaines, ou après quelques mois, nous allons fusionner tous les jours, ou après quelques heures. Même si Jane et Joan n’approchent pas de la fin de leur travail, ils enregistreront ce qu’ils ont pour l’instant (peut-être avec un code spécial le désactivant jusqu’à ce que ce soit finit) pour ne pas finir avec une fusion cauchemardesque plus tard. Ces toutes petites fusions ont tendance à ne pas être douloureuse du tout, elles sont si faciles que vous les remarquez à peine..

Le même principe se remarque tout au long du développement logiciel: des tests à la sortie, votre inclination naturelle est de reporter les choses douloureuses, alors que les faire plus souvent les rendraient plus faciles.

Et je ne pense pas que cela soit limité au logiciel. Je pense que le même principe devrait fonctionner même si, pour une étrange raison, vous deviez toucher une plaque de cuisson chaude pendant une heure. Le différer et le reporter jusqu’à ce que vous n’ayez plus d’autres choix que de garder votre main sur la plaque pendant une heure complète devrait finir par être très douloureux. Mais si vous le faites par petits bouts, juste des contacts rapides de la plaque avec vos doigts qui finalement feront une heure, cela ne devrait pas être dur du tout. Encore une fois, l’astuce est de ne pas fuir la douleur.

De toutes les astuces de développement personnelle que j’ai apprise, celle-ci fut de loin la plus surprenante – et de loin la plus influente. J’ai passé la majeure partie de ma vie prisonnier de mes talents. Je savais que j’avais des forces et des faiblesses et il me semblait juste évident que je devais trouver des emplois qui correspondraient à mes forces. Cela semblait fou de choisir un travail qui ferait appel à mes faiblesses.

Bien sûr, il y avait des choses dans lesquelles je souhaitais être meilleur, mais elles me semblaient tellement lointaines. En attendant, il y avait beaucoup de choses pour lesquelles j’étais doué. Pourquoi ne pas continuer à les faire? Bien sûr je réalisais intellectuellement que je pouvais devenir meilleur dans d’autres domaines, mais cela ne semblait jamais valoir la peine d’essayer.

J’avais appris à ne pas me cacher la dure vérité, donc j’ai eu cette conversation avec moi-même:  » Oui, je sais: si je deviens meilleur pour vendre des choses aux autres (ou quoique ce fut), je serais dans une meilleure situation. Mais regarde comme je trouve la vente pénible: le simple fait d’y penser me donne envie de courir me cacher! Bien sûr, ce serait bien si je pouvais le faire, mais est-ce que cela en vaut la peine? »

Maintenant, je réalise que c’est un argument factice: ce n’est pas que la douleur est si intense que cela me fait fuir, c’est que l’importance du sujet déclenche une « réaction de lutte ou de fuite » au fond de mon cerveau reptilien. Si au lieu d’y penser comme à un effrayant sujet à éviter, j’y pense comme à une opportunité excitante de devenir meilleur, alors ce n’est plus du tout un échange en termes de coûts-bénéfices: les deux côtés sont bénéfiques – J’obtiens l’avantage de devenir bon vendeur et l’amusement de devenir meilleur à quelque chose.

Faites ceci assez de fois et toute votre vision de la vie commence à changer. Ce n’est plus un monde effrayant, vous enserrant, mais un monde exaltant plein d’aventures excitantes à mener.[3]

S’attaquer à quelque chose d’aussi grand que ça est terrifiant; c’est beaucoup trop pour débuter. C’est toujours mieux de commencer petit. À quoi avez vous évité de penser? Ce peut être n’importe quoi – une difficulté dans une relation, un problème au travail, quelque chose sur votre liste des choses à faire que vous évitiez. Repensez-y – malgré la douleur que ça provoque – et faite en sorte de le laisser s’installer. Reconnaissez qu’y penser est douloureux et sentez que cela fait du bien d’être capable de le faire quand même. Sentez que cela devient moins douloureux alors que vous vous forcez à continuer d’y penser. Voyez, vous devenez plus fort!

Ok, faites une pause. Mais quand vous êtes prêt, revenez-y et commencez à penser à quelque chose de concret à faire à ce propos. Voyez comme ce n’est pas aussi effrayant que vous le pensiez? Voyez comme cela fait du bien de faire quelque chose à ce propos?

La prochaine fois que vous commencerez à éprouver ce sentiment, cette sensation de douleur au plus profond de votre tête qui vous dit d’éviter le sujet – ignorez la. À la place, plongez dans la douleur. Vous serez reconnaissant de l’avoir fait.

[1] Ray Dalio, Principles (2001), partie 2 (visité le 01.09.2012). Cette section entière a été inspiré par cet argument.

[2] J’ai entendu cette phrase pour la première fois à une formation de ThoughtWorks. Voir aussi Martin Fowler, « FrequencyReducesDifficulty« , Bliki (28 Juillet 2011)

[3] Voir, par exemple, Derek Sivers, « Push, push, push. Expanding your comfort zone. » sivers.org (13 Août 2012)

1 Septembre 2012

Article original : http://www.aaronsw.com/weblog/dalio

Crédit photo : Aaron Swartz à la rencontre Wikipédia de Boston en août 2009 (Creative Commons Attribution-Share Alike 2.0 Generic)

Playstation Mobile: projet RockJetMan

PlayStationMobile_FeaturedImage      Cela fait maintenant depuis plus d’une année et demie que j’ai fait mes premiers pas avec le C# et le PlayStation Mobile. Mon premier projet de jeu : « Cubiq Arcadeum » n’est encore disponible nul part, mais j’espère pouvoir régler l’administratif rapidement pour pouvoir le soumettre à Sony.

J’ai eu une longue période d’inactivité, ici sur Unicoda mais je vais me mettre à poster de plus en plus régulièrement. Entre un CV à rédiger, un projet de logiciel de fouille de données répartie en Java, des TPs de réseaux et autres à coder. Je vous présente :

RockJetMan

RJM001     Un aperçu du travail effectué sur les heures grappillés à droite et à gauche sur les 10 derniers jours ! Pour l’instant le joueur peut se déplacer sur la carte comme bon lui semble, la fonction de collision n’étant pas raccorder au déplacement du joueur. Petite nouveauté sur ce projet ou l’on me prête main forte, car nous sommes à l’heure actuelle deux à coder, ce qui rajoute une petite touche de difficulté ;)

Pour l’instant mon boulot est de transmettre mon savoir faire acquis lors de la programmation de Cubiq Arcadeum à cette deuxième personne. Ainsi que de bosser sur la génération de la carte et son affichage. Cette fois la barre a été fixée un peu plus haute, mais la motivation est là !