Gearman: Présentation

Facebooktwitterredditpinterestlinkedinmail

Gearman est un serveur de processus. Il permet d’exploiter des machines et des processus plus adaptés à faire un type de travail donné que le demandeur. Il permet de lancer des processus en parallèle, de répartir la charge de travail sur plusieurs machines, et d’appeler des routines écrites dans de nombreux langages.

Gearman est constitué de 3 éléments, tous redondants. Pour simplifier, je vais en parler au singulier, mais le système peut en contenir plusieurs. Le cœur du système est constitué du serveur de tâches (ou job server). Auprès de lui s’enregistre un exécutant (ou worker), capable d’exécuter telle ou telle fonction, peu importe le langage. Un client se connecte au serveur de tâches afin de lui demander d’exécuter une fonction nommée sur un jeu d’arguments. Le serveur de tâche analyse sa liste de workers capable d’effectuer la tâche en question et en sélectionne un. Le worker reçoit la tâche et ses arguments, effectue le travail et le retourne au job-server, qui lui même livre le travail effectué au client.

Utilisation basique

Considérons un exemple concret. Un site intranet en PHP a de forts besoin en matière de redimensionnement d’images et souhaite que cela soit fait en tâche de fond, sans que les chargements de page ne soufrent de ce traitement lourd. On y intègre donc un client Gearman grâce à l’API Gearman PHP. Sur la même machine se trouve le job server. Toujours sur la même machine, un worker, lui aussi en PHP s’enregistre auprès du serveur en annonçant qu’il propose une fonction de redimensionnement d’image.

Gearman

  1. Le client demande au serveur une tâche de redimensionnement d’image.
  2. Le serveur vérifie s’il dispose d’un workers capable d’effectuer cette tâche, puis la lui transmet.
  3. Le worker effectue la tâche, la retourne au job server, et passe en attente d’une nouvelle tâche.
  4. Le job server livre le produit de la tâche au client.

Les redimensionnements d’image se font de manière asynchrone, et n’affectent plus l’exécution du code PHP. De plus les processus sont gérés par Gearman, qui va les optimiser.

Utilisation avancée

Améliorons le système. Cette fois-ci, le site web est redondant sur deux machines avec un répartiteur de charges en amont. Le job server sera constitué de deux unités, et elles exploiteront six workers :

Gearman

Nous ne parlerons pas ici de la mise en place d’un cluster web, ce n’est pas l’objet de l’article. Pour information, je règle généralement le cas avec Apache et HA Proxy. Mais du côté Gearman, rien de plus simple. Chacun des clients et des workers ne se connecte plus à un serveur, mais à une liste de serveurs. Et ce sont eux qui font tout le travail sans configuration supplémentaire. Par défaut la répartition de charge est faite par ordre d’enregistrement des workers. Mais on peut demander au serveur d’utiliser l’algorithme round-robin. Si l’un des frontaux tombe, l’autre nœud prend le relais. Si l’un des job server tombe, le suivant prend la demande en charge. Si l’un des workers tombe, le serveur transmet la demande au worker suivant. Quand tout fonctionne bien, on obtient une répartition de charge de bout en bout de la chaîne.

Conclusion

Gearman permet d’exécuter du code dans un langage identique ou différent depuis votre application, de répartir la charge sur des processus locaux ou distants, de façon synchrone ou asynchrone.

Nous pouvons passer à l’étape suivante, son installation.

Liens

Facebooktwitterredditpinterestlinkedinmail

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *