Il est désormais possible de créer des comptes « Neoppod » sur Objectis. Cet article a pour objectif de répondre à trois questions :
Commençons par le commencement. Au début il y avait le néant, le vide quantique. Puis le big bang. Bon, ne remontons peut-être pas aussi loin alors.
Mais tout de même, comment fonctionne Objectis ?
Objectis est composé d'un ensemble de serveurs, chaque serveur étant une machine virtuelle dans le parc « PODP » de Pilot Systems. Sur chaque machine virtuelle se trouve plusieurs instances Zope, écoutant sur un port différent. Et sur chaque instance Zope se trouvent un certain nombre de slots. Chaque slot possède un type de service. Jusque là tout va bien ? Non ? Bon, prenons un exemple. Sur la machine gummo se trouve une instance z8080 (accessible donc en gummo:8080) qui contient 600 slots de type de service [1] Plone 3.1.
Donc nous avons des serveurs qui contiennent des instances qui contiennent des slots. Un slot par exemple c'est gummo:8080/hosting_home/slot17191. Dans un slot, on peut créer un site. Le slot est alors occupé, et le sera jusqu'à ce que le site soit supprimé. C'est ce qu'il se passe lorsque vous créez un site depuis le site Objectis. Objectis va localiser un slot libre correspondant au type de service, et créer le site dedans. Et il va noter que votre site, par exemple http://tk31.objectis.net [2], a été créé sur le slot17191.
Il va noter ai-je dit ? Oui, dans une base de données relationnelles. C'est le cœur d'Objectis. Une grosse base PostgreSQL, avec des tables pour les sites, les utilisateurs, les instances, les slots, les types de services, les quotas, les vétos, les codes de validation, et tout ce qui va avec.
Mais que se passe-t-il donc quand on va sur http://tk31.objectis.net ? Voyons voir :
~ $ host tk31.objectis.net tk31.objectis.net is an alias for objectis.pilotsystems.net. objectis.pilotsystems.net is an alias for chloe.pilotsystems.net. chloe.pilotsystems.net has address 85.118.46.82
On arrive donc sur une machine au doux nom de chloe. Chloe, c'est le frontal d'Objectis. Dessus, il y a un Apache et la base PostgreSQL. L'Apache utilise le mod_rewrite avec un script de réécriture, écrit lui en Python. Quand on lui demande tk31.objectis.net, il vérifie que le site existe, n'a pas été fermé par l'équipe Objectis, et va chercher toutes les informations. Il traduit que http://tk31.objectis.net c'est http://gummo:8080/hosting_home/slot17191/site18203/ et il va donc transmettre la requête à ce Zope, attendre la réponse, puis la renvoyer [3].
Voilà ce que ça donne [4] :
Tous les types de service sur une instance Zope sont homogènes, mais par contre, sur un même serveur, il peut exister plusieurs instances ayant des types différents. Par exemple, les instances Plone 2.5 et Plone 2.1 sont sur la même machine, groucho. La répartition dépend de différentes paramètres, en général, on regroupe les instances ayant des versions similaires de Python et de Zope sur la même machine virtuelle.
Dernière précision : les sites de gestion d'Objectis, c'est à dire le frontal http://www.objectis.org, le back-office et le site de demande de jetons MyPlone sont sur l'infrastructure Pilot Systems comme des sites de clients, utilisant donc notre Apache frontal redondé, par exemple.
Vous vous souvenez de l'article sur Neoppod ? Non ? Ah... Bon, Neoppod, c'est un système de stockage distribué pouvant remplacer ZEO. C'est à dire qu'on branche n'importe quelle instance Zope sur le stockage distribué Neoppod comme on le ferait sur un serveur ZEO (en utilisant le protocole NEO au lieu de ZEO), mais avec de la répartition de charge et tolérance de panne en plus.
Donc, comment faire pour intégrer Neoppod avec Objectis ? Au plus simple, car les solutions les plus simples sont souvent les meilleures. On va tout simplement remplacer une instance Zope classique par un cluster Neoppod complet, définir des slots dessus et tout fonctionnera tout seul. Par contre, avec Neoppod, plus besoin de définir plusieurs instances, on peut tout mettre dans un cluster Neoppod, qu'il suffira de faire grandir au fur et à mesure qu'il se remplira.
Donc, créons une petite VM, nommée par exemple morpheus. Dessus, on installe un Neoppod. Avec deux nœuds de stockage, pour avoir de la réplication. Un nœud master, ça suffira pour l'instant. Et deux instances Zope (configurées comme clients ZEO) devant. Dans le back-office Objectis, on va définir les slots... aïe, je mets comme quoi comme port ? J'ai créé deux instances là, une morpheus:8080 et une morpheus:8082. Qui vont contenir les mêmes sites. Réponse simple : il suffit d'ajouter un répartiteur de charge, par exemple Pound.
Et voilà ce que ça donne, à la place d'une instance Zope :
Et donc au final :
Dans le mode de fonctionnement classique d'Objectis, chaque site est fixé sur une instance Zope, et l'Apache frontal redirige directement vers l'instance où se trouve le site. Avec Neoppod, l'Apache frontal se contente de rediriger vers le cluster Neoppod correspondant au type de service, et ensuite un répartiteur de charge transmet la requête à l'une ou l'autre des instances Zope du cluster.
Les avantages immédiats sont triples :
Actuellement, le cluster Neoppod est intégralement déployé sur une seule machine virtuelle. Mais dans le futur, ce cluster pourra être réparti sur plusieurs machines virtuelles, suivant les besoins. On pourra ainsi avoir de la réelle tolérance de panne, allant jusqu'à supporter le plantage d'une machine virtuelle, voir même la défaillance physique d'un châssis. Mettre en place de la tolérance de panne absolue nécessiterait de redonder aussi les composants d'infrastructure comme la machine chloe, mais ce serait déjà un net progrès.
Enfin, une autre piste serait de migrer tous les sites Objectis déjà existant vers l'architecture Neoppod, au moins pour les Plone 3.1.
Vous pouvez dés maintenant ouvrir un Plone 3.3.5 (dernière version stable à ce jour) sur Objectis avec back-end Neoppod, en utilisant le code de validation neo_335_kaiNai2i gracieusement offert par Pilot Systems pour tester le service. Au-delà d'une version de Plone plus récente, vous aurez de meilleurs performances, une meilleur tolérance de pannes, et une gestion facilité pour nous !
Attention tout de même, il s'agit encore d'une architecture expérimentale, il est éventuellement possible que des données soient perdues.
N'hésitez pas à nous contacter si vous veniez à découvrir un bug.
Note : cet article a été modifié le 18/06/2010 à 11:20 pour préciser quelques points.
[1] | Un type de service correspond en général à une version de Plone, mais peut aussi correspondre à une utilisation particulière. Par exemple, lors du Forum des Associations de Paris, Pilot Systems a offert 400 comptes Objectis d'un type particulier aux associations. Ces comptes ont des paramètres (quotas, produits disponibles, ...) qui peuvent différer des comptes normaux. |
[2] | Un site ouvert par moi pour tester les comptes Objectis 3.1, sans intérêt. |
[3] | En réalité il y a un cache devant tout ça, pour éviter d'interroger la BDD à chaque requête HTTP. |
[4] | En simplifié, par exemple, tout ce qui est sauvegarde et supervision n'apparaît pas sur ce schéma. |
[5] | Certes, on peut aussi augmenter la RAM allouée à la machine virtuelle, et on ne s'en prive pas. |
Actions sur le document