Catégorie: Grid Computing

Grid Computing Office en utilisant des environnements virtuels - Partie 4

Par , Vendredi 4 Décembre 2009 11:59

Présentation

Je travaille dans une entreprise où nous courons le traitement batch de nombreux millions d'enregistrements de données chaque jour et j'ai pensé récemment à propos de toutes les machines qui sont assis autour de chaque et tous les jours à ne rien faire pendant plusieurs heures. Ce ne serait pas bien si on pouvait utiliser ces machines pour renforcer la puissance de traitement de nos systèmes? Dans cette série d'articles que je vais regarder les avantages potentiels d'employer un bureau de grille en utilisant les environnements virtualisés.

Dans la partie 3 nous avons créé notre machine de traitement virtuel et mettre en place les machines Windows de devenir inactif travailleurs à temps.

Exécution du dernier code

Inévitablement, après la création de votre logique métier travailleurs vont changer, les bugs seront trouvés, le code plus rapide et plus efficace sera produite laissant ainsi vos travailleurs assis autour du traitement des données à l'aide ancien code malodorants . Comment alors pouvons-nous nous assurer que nous sommes toujours en utilisant la dernière version du plus grand et de nos scripts de traitement?

Il ya quelques très facile des moyens simples que nous pouvions faire cela, le truc, cependant, est de réduire la puissance de traitement et le trafic réseau pour y parvenir. Commençons par le plus simple des solutions et il s'améliorer lentement sur une couple d'itérations.

La première méthode serait de tout simplement se connecter à notre serveur de contrôle d'emplois (via Samba, FTP, ou similaire) et tirer vers le bas de la dernière version du code. Pas très efficace, mais il faudra faire le travail. Permet d'améliorer ce peu, que diriez-vous de créer un script rsync et en utilisant à chaque fois que la place? Alternativement ce sujet mettant notre script de traitement plus tard dans la subversion vérifiant le code d'abord et ensuite seulement mettre à jour notre code sur chaque run ( svn update )?

En fin de compte on pourrait se retrouver avec un script bash (appelé par cron toutes les 10 minutes) qui est aussi simple que cela:

  #! / Bin / sh
 si ps ax | grep-v grep | grep php > / dev / null
 puis
     echo "l'emploi est en cours de traitement, la sortie"
 d'autre
     echo "Job ne fonctionne pas, commencer dès maintenant»
     cd / chemin / vers / travailler / copie
     svn update
     php yourJobProcessingScript.php
 fi 

Maintenant, nous pouvons être sûr que, avec chaque exécution, nous sommes définitivement tourner la dernière de code. Nous veillons à ce que cela en mettant à jour notre base de code chaque fois que nous effectuons une course et en réduisant le trafic réseau en transférant uniquement les différences de fichier à travers notre réseau.

Dans ma configuration de démonstration, j'ai fait exactement comme ci-dessus. Subversion a été installé sur mon serveur de traitement d'emplois et j'ai simplement tiré le dernier code à partir d'un «travailleur» en utilisant la branche 'svn update'. J'ai aussi ajouté un tag numéro de version à mon script de traitement qui a été retourné à la base de données dans le cadre du retour des résultats. De cette façon, j'ai pu voir que mon code a été mis à jour chaque fois que j'ai copié ma malle dans la branche des travailleurs à savoir que je n'étais définitivement l'exécution du script de traitement plus tard.

En utilisant les dernières données

Si votre traitement des tâches rend l'utilisation de sources de données, puis à un certain point ceux-ci vont être mis à jour aussi. Sauf si vous appelez de vos sources de données sur une base très rares que vous allez inonder votre réseau avec un trafic dès que vos travailleurs commencer à courir apportant tout à un arrêt. Pour ma solution, j'ai décidé que je voudrais passer mes sources de données avec mes machines virtuelles.

Tenez vous êtes des chevaux là-bas! Que faire si mes sources de données sont ÉNORMES? Eh bien c'est vraiment un cas de combien de données parlons-nous? Il peut être plus rentable d'installer un disque dur plus spacieux supplémentaires dans chaque machine que d'acheter un serveur de traitement supplémentaire. C'est une question de budget et appartient à l'entreprise de décider. Il se peut que vos sources de données sont si grands que c'est juste impossible de garder cette quantité de données dans vos machines travailleur. Dans ce cas, que feriez-vous? Eh bien, nous pourrions envisager d'appeler un serveur de données locales, mais cela pourrait provoquer des problèmes avec le réseau. Dans ce cas, un système de grille comme celle-ci peut devenir réaliste d'inclure dans votre environnement de bureau. Il se peut également que vous pouvez regarder dans les stratégies alternatives course, par exemple seulement appeler vos travailleurs 20 heures-six heures chaque nuit et / ou la limitation de requêtes de données source.

Déplacement sur le disons de nos sources de données s'élèvent à 100 Go de données. Eh bien oui, c'est un peu de données pour déplacer le réseau sur une mise à jour. Comment pourrions-nous nous assurer que nous avons de la dernière copie des données dans ce cas? Rsync est une possibilité, mais personnellement, je pense en exécutant votre source dernières données sur votre serveur de traitement d'emplois et de mettre cela en place comme un maître dans la réplication (avec un journal poubelle à long Nice) pourrait être la voie à suivre:

réplication En fixant chacun de vos travailleurs comme un esclave pour les mises à jour d'emplois du contrôle serveur à vos sources de données sera retombée bien à vos travailleurs sans une énorme augmentation de l'activité du réseau (qui est moins que vous effectuez une mise à jour des données énormes et tous vos travailleurs coup de pied dans à la fois). Cela a des avantages sur rsync en ce que vous aurait pas une longue pause avant chaque emploi; que les mises à jour de bases de données, le mysql démon sur votre travailleur sera constamment mise à jour de ses données tandis que le traitement continue.

C'est ainsi que j'ai créé mon serveur de démonstration. Pour configurer la réplication, j'ai suivi le guide sur le site de MySQL ( Configuration de la réplication ) et dans les 20 minutes, j'ai eu mon agent inital reproduire le contrôle des tâches des serveurs jeu de données. Pour chaque travailleur supplémentaire les paramètres de réplication et de processus de travail chaque fois que la VM a été copié.

Résumé

Dans cette section de l'article, nous avons regardé comment facile et indolore, il est de garder votre code de traitement à jour par rsync using ou subverion (SVN) pour faire le travail et réduire le trafic réseau à la même time. Nous avons également discuté de la façon pour maintenir votre information de source de données mise à jour en lui permettant de couler vers le bas pour chacun de vos travailleurs. Ainsi, nous espace assurer que nous gardons avec la logique métier et de l'information dans notre système de quadrillage de bureau. Il y aura évidemment de multiples alternatives à la réalisation de ces tâches, mais voici deux exemples simples pour montrer avec quelle facilité une solution est à trouver.

Suivant le temps

Dans la dernière partie de cette série, bien nommé la partie 5 , nous allons discuter du déploiement de ce système pour. Je vais résumer ce qui a été appris et ce que j'ai réussi à créer.

Grid Computing Office en utilisant des environnements virtuels - Partie 1

Par , Vendredi 4 Décembre 2009 23:23

Présentation

Je travaille dans une entreprise où nous courons le traitement batch de nombreux millions d'enregistrements de données chaque jour et j'ai pensé récemment à propos de toutes les machines qui sont assis autour de chaque et tous les jours à ne rien faire pendant plusieurs heures. Ce ne serait pas bien si on pouvait utiliser ces machines pour renforcer la puissance de traitement de nos systèmes? Dans cette série d'articles que je vais regarder les avantages potentiels d'employer un bureau de grille en utilisant les environnements virtualisés.

En PHP développeur, je vais utiliser les outils que j'utilise chaque jour à savoir, Linux, mySQL , PHP, VirtualBox et Subversion (SVN). Cependant j'espère que ce guide va s'adapter à d'autres langues et des technologies tout aussi bien.

La solution que je fournis seront très vaguement basé sur le type de traitement que nous avions besoin pour atteindre cependant ce ne peut être vrai dans l'article en entier que je vais changer les choses pour plus de simplicité, ou pour produire des scénarios d'utilisation les plus intéressants.

Ces environnements virtualisés va fonctionner sur les machines Windows puisque c'est ce que la majorité des bureaux courir. Le traitement que les machines de bureau ne devrait pas interférer avec le personnel utilisant ces machines, devrait ne nécessitent aucun entretien à la machine, et être facilement déployable à de nouvelles machines à mesure qu'ils deviennent disponibles. Aussi, de nouvelles machines virtuelles ne devraient pas nécessiter aucune configuration supplémentaire car cela réduit considérablement l'évolutivité et la facilité avec laquelle le système de grille peut être prolongé.

Pourquoi déployer une grille de calcul Office?

Tout d'abord, vous pensez peut-être, pourquoi ne pas simplement utiliser une ressource de cloud computing tels que la plate-forme Amazon EC2 ? Bien des raisons pourrait être plusieurs, par exemple:

  • Vous ne serez pas confier certaines données à un environnement de cloud computing
  • Vous ne pouvez pas mettre certaines données dans un environnement de cloud computing pour des raisons légales (par exemple les données de quitter le pays), potentiellement, pour des raisons juridiques, par exemple les dossiers du NHS.
  • Vous voulez garder vos unités de traitement à proximité et ont le plein contrôle sur le matériel trop
  • Vous n'avez pas les fonds du projet pour exécuter les instances nuage
  • Votre bureau n'a pas de connexion à l'internet et donc ce n'est pas possible d'utiliser une ressource nuage
  • Vous n'aimez pas la pluie, les nuages ​​de pluie suggèrent donc vous gardez bien à l'écart

Je suis sûr que la liste pourrait continuer, mais je pense que ça suffit pour aujourd'hui.

Avantages d'un Grid Computing Bureau

Eh bien, laisse faire un peu de maths (et dans un style vraie physique permet de faire quelques hypothèses de balayage). Imaginez que vous avez grand serveur de traitement costaud courir 100 emplois par jour. Dans votre bureau, vous avez 50 machines qui sont inactifs 16 heures par jour, chacune de ces machines est de 10% plus puissant que votre traitement de rompre les costauds. (Tous les résultats ici sont arrondies à sous-estimer augmenter les performances).

Ainsi, une alimentation de la machine * 10% * 2 / 3 du temps de traitement = 0,067 soit 1 bureau dans les temps d'inactivité pourrait traiter six emplois à plein par jour.

Si maintenant vous ampleur de cette place qu'il faut 15 ordinateurs de bureau inactif pour traiter autant d'emplois par jour en tant que votre serveur de traitement principal ne.

Ainsi, dans notre bureau de faire semblant de 50 machines nous pourrions accroître notre puissance de traitement du serveur 1 jusqu'à 4 serveurs de traitement complet, ou nous pourrions être le traitement de 400 emplois par jour au lieu de 100.

Notez, par aucun investissement dans du nouveau matériel de votre entreprise vient d'augmenter sa capacité de traitement par lots 4 fois! Potentiellement vous allez augmenter votre consommation d'énergie mais de la plupart des environnements de bureau que j'ai été à des machines sont généralement laissés sur la nuit de toute façon, on pouvait voir cela comme une initiative verte.

D'autres avantages aussi signifier que l'investissement dans de nouvelles (ou mise à jour) des serveurs de traitement peut être retardé si vos machines de bureau sont suffisantes et que vous améliorez la puissance de vos machines de bureau de votre grille de bureau devient plus puissant automatiquement.

Technologies

Qu'est-ce que vous avez besoin? (Ou plus exactement ce que j'ai utilisé):

  • Machines de bureau Idle (dans mon cas une pièce de rechange vieux Windows XP ordinateur portable)
  • VirtualBox (ou un autre logiciel client de virtualisation)
  • Une machine virtuelle avec PHP, mySQL running l'exécution d'un coupé OS, je vais appeler ces serveurs LIMP mon:)
  • Emplois à courir
  • Job Server (peut être une autre machine virtuelle, quelque part)

Emplois typiques

Les types d'emplois que ce système est conçu pour fonctionner comme suit:

  • Système reçoit une liste de données sur lesquelles nous avons besoin de match et le retour des résultats
  • Matching consiste à vérifier / chercher plusieurs (assez statique) sources de données
  • Résultats à partir de sources de données peuvent nécessiter une validation plus poussée, la fusion, la vérification des sources de données supplémentaires en réponse aux résultats
  • Les données sont retournés avec des enregistrements correspondants, entièrement validée et traitée
  • Chaque enregistrement dans un travail est indépendant du reste

Donc, fondamentalement, nous cherchons à faire tourner des tâches qui exigent un mélange de recherches en base et quelques calculs numéro, un scénario assez typique dans un environnement des affaires.

Grille des solutions sont non seulement avantageux pour le traitement des emplois de ce type. Fondamentalement, tout processus qui peut être divisé en unités indépendantes peuvent être exécutés en parallèle. Voir cette wikipedia pour des exemples et plus d'informations: Grid Computing , mais quelques exemples célèbres sont Seti @ Home et BIONC . Il ya des cadres pour faire fonctionner les grilles de calcul, et elles sont bien dignes d'intérêt.

Que ferons-nous atteindre?

À la fin de ces articles, j'espère que pour montrer que le déploiement d'un réseau de bureaux ne doivent pas être extrêmement coûteux ou consomment du temps. Je vais discuter:

  • Mise en place du système de contrôle des tâches de configuration d'emplois,
  • Créer une machine virtuelle appropriée de traitement
  • Comment installer le système sur une machine Windows
  • Assurer que vous utilisez le dernier code et les données
  • Le déploiement et l'analyse comparative
  • Pour l'avenir

Je serai bâtiment (ok, j'ai construit, puis écrit ce) un exemple d'application pour tester les concepts sur une machine locale sous Windows XP et mon «GridMachine« machine virtuelle. Mon serveur de contrôle des travaux sera ma machine principale qui va de Fedora 11 .

Ce n'est en aucune façon pour but de démontrer un système entièrement fonctionnel robuste, son signifié plus d'une démonstration et discussion montrant que ces choses peuvent être réalisées dans un espace de temps relativement court et à peu de frais. S'il vous plaît, n'hésitez pas à m'envoyer vos commentaires, corrections ou améliorations, et je ferai de mon mieux pour garder cet article mis à jour pour correspondre.

Suivant le temps

Dans la partie 2 je vais commencer par regarder le système de contrôle du travail, et examiner comment les emplois doivent être configurés afin d'atteindre le plus grand nombre de traitements tout en veillant à ce que chaque tâche est traitée sans échec.

Grid Computing Office en utilisant des environnements virtuels - Partie 2

Par , Vendredi 4 Décembre 2009 23:23

Présentation

Je travaille dans une entreprise où nous courons le traitement batch de nombreux millions d'enregistrements de données chaque jour et j'ai pensé récemment à propos de toutes les machines qui sont assis autour de chaque et tous les jours à ne rien faire pendant plusieurs heures. Ce ne serait pas bien si on pouvait utiliser ces machines pour renforcer la puissance de traitement de nos systèmes? Dans cette série d'articles que je vais regarder les avantages potentiels d'employer un bureau de grille en utilisant les environnements virtualisés.

Dans la partie 1 que j'ai donné un aperçu du système et des technologies, je vais utiliser aussi bien comme nous le verrons quelques-unes des raisons potentielles pour lesquelles vous voulez créer une grille de bureau.

Job Control

Si vous allez faire tourner les emplois, alors vous allez avoir besoin d'une certaine façon de les gérer. Votre système de contrôle du travail (sur votre serveur de travail) doit être vraiment bien pensé, avant même de tenter d'exécuter une grille de bureau. Donc premièrement, quelles sont les tâches d'un système de contrôle des tâches:

  • Emplois sur la main sur demande auprès de travailleurs
  • Dites travailleurs quel type d'emplois à courir
  • Emplois piste
  • Assurez-vous que les emplois ne sont exécutées une fois
  • Fournir des données d'emplois pour les travailleurs, ou tout au moins leur dire où se le procurer

Le système doit également être extensible, une solution qui fonctionne pour l'instant dans un seul cas peut être prolongée d'exécuter plusieurs types d'emplois que l'entreprise voit la valeur dans une solution de la grille. Par exemple, les emplois peuvent gagner des priorités, plus d'un type d'emploi peuvent exister (c'est à dire de plusieurs bases de code), vous finirez peut même exécuter plusieurs machines différentes des travailleurs qui sont optimisés pour chaque type d'emploi (bien que cela s'éloigner de l'ouvrier «génériques 'idée). Toujours essayer de penser à l'avenir lors de l'élaboration des systèmes, une vision à court terme peut conduire à la frustration à long terme et le temps de développement accru.

Job Server

Nous allons avoir besoin de quelque part pour contrôler nos offres d'emploi de ce devrait être le seul système dans votre grille qui a une ressource fixe localisateur, que ce soit une adresse IP, nom d'hôte, URL (en utilisant le DNS interne), etc C'est parce que les travailleurs ont besoin de savoir où chercher un emploi, les travailleurs ont besoin de trouver le système de contrôle du travail (et non le système de contrôle d'emploi à trouver des travailleurs).

Le serveur poste lui-même n'a pas vraiment une tâche compliquée (dans un système de base de toute façon), il a besoin de stocker une liste d'emplois, la main sur l'emploi, de recevoir les résultats, et ensuite les stocker pour une utilisation ultérieure. Comment ces pièces (comme «la main sur des emplois») sont définis peuvent être très basiques. Plus tard, nous pouvons étendre le système pour inclure une interface d'administration pour ajouter, modifier, supprimer, suspendre emplois, mais c'est au-delà de cet exercice.

Il n'y a aucune raison que ce soit alors que votre serveur de travail ne pouvait pas être une machine virtuelle fonctionnant au sein de votre serveur de traitement principal à condition qu'il ne s'écoule pas trop de ressources d'elle. Le serveur d'emploi ne doivent toutefois une haute disponibilité, si elle descend sur un vendredi soir, vous allez perdre tout un week end de traitement, potentiellement vous coûter une couple de semaines de temps de traitement (par rapport à votre serveur de traitement principal seul) . Vous voudrez peut-être envisager de mettre votre serveur d'emplois sur un environnement à charge équilibrée pour une haute disponibilité.

Configuration de base

La configuration de base pour notre serveur d'emplois sera composée de ce que j'appelle un de mes serveurs LIMP (c'est-nux Li, m ySql, P HP). Le code s'exécutant sur les travailleurs thea fonctionnera réellement quels emplois il peut fonctionner en interaction avec des bases de données d'emplois de contrôle du système. Plus tard, nous pourrions créer un service web et fait distribuer des emplois plutôt que d'avoir des ouvriers faire le dur travail eux-mêmes, mais pour l'instant nous allons continuer à utiliser le principe KISS (Keep It Simple, Stupid!).

Alors, laisse créer trois mySQL tables pour faire face à l'emploi. Ces emplois seront ``, `jobRecords` et `jobResults`.

emplois de table Ici, je suis en utilisant SQL amis une excellente alternative peu de phpMyAdmin juste parce que c'est plus facile à installer sur CentOS (pour les autres voir: 10 alternatives aux phpMyAdmin )

Ce tableau se compose de 5 champs simples,

  • Identifiant: Conçus pour identifier l'emploi
  • Nom: Pourrait être une référence client, ou n'importe quel nombre d'autres identificateurs
  • Statut: Vous avez besoin de savoir où le travail est moins, par exemple
    • 0: Pas encore commencé
    • 1: Ramassé
    • 2: Terminé
  • started_by: Qui a commencé à faire le travail? Ce n'est pas entièrement nécessaire, mais est une agréable d'avoir. Je vous suggère de suivi des travailleurs par leur adresse IP sur votre réseau
  • started_at: Lorsque le travailleur ne commence le travail? En faisant le suivi des emplois qui n'ont pas terminé dans le montant X de temps, nous savons que nous devons ramasser les emplois une fois de plus et de commencer le traitement par un autre travailleur. Les travailleurs pourraient arrêter le traitement / go offline pour toutes sortes de raisons, une panne de courant, crash, perte de réseau, etc

Il est facile comment ce tableau pourrait être étendue avec quelques champs supplémentaires pour permettre le suivi des statistiques, une colonne de temps d'arrivée pour voir combien de temps le travail a pris, un compteur pour voir combien de travailleurs repris le travail (évidemment cela doit tendance à 1), priorité d'emploi, la liste peut continuer encore et encore. Dans les scénarios d'emplois plus complexes, il serait possible de spécifier la quantité de mémoire que le travailleur aurait besoin d'accéder à (et donc utiliser uniquement des travailleurs qui conviennent), ou même ce type de travailleurs serait nécessaire.

Permet d'ajouter un peu d'emplois par exemple:

emplois par exemple

Le tableau suivant est encore assez simple à comprendre, ce sont nos dossiers d'emploi. Elles sont liées à la table principale d'emplois par une colonne `jobs_id`. La composition de ce tableau dépend beaucoup des données que vous devez fournir à vos employés, permet de faire un exemple très simple où nous avons quatre colonnes:

  • ID: ID de l'enregistrement
  • Nom: Nom de la personne
  • Adresse: adresse personne
  • jobs_id: L'ID d'emplois que ce record est lié à

Le troisième et dernier tableau se compose d'une table de résultats, il a sensiblement la même représenter jusqu'à notre table les dossiers, et avec l'ajout de certaines colonnes pourrait faire partie de la table des dossiers:

  • job_record_id: Link le résultat à la table de travail
  • Résultat: Les données de résultat

... Et c'est tout ce dont vous avez besoin pour le contrôle de boulot! (Quoique à un niveau très basique) Dans mon cas, je suis a souligné une autre table où mes données à traiter a été localisé, mais cela pourrait tout aussi bien pu un fichier, les paramètres d'exécuter du code de simulation, you name it.

Sélection d'un emploi

Comme indiqué précédemment, les travailleurs ferons de notre gestion du travail pour nous pour l'instant, donc tout ce que nous devons vraiment faire, c'est de trouver un emploi qui nécessite un traitement et obtenir l'information. Comment ferions-nous cela? Eh bien choisir nos critères de sélection d'emploi et chercher un emploi, dans SQL, je ne les suivantes:

  1. Prenez n'importe quel emploi qui ne sont pas marquées comme terminées, mais de nos travailleurs et les réinitialiser (substitut __ME__ avec un identifiant plus simple, serait d'adresse IP):
      UPDATE `emplois` SET `status` = 0 WHERE `status` = 1 et `started_by` = __ME__; 
  2. En utilisant nos critères de sélection des tâches, sélectionnez un emploi et dire au système de contrôle que ce travailleur a affaire avec elle:
      UPDATE `emplois` SET `status` = 1, `started_by` = __ME__, `started_at` = MAINTENANT () WHERE `status` = 0 ou
     (`Status` = 1 et `started_at`> DATE_SUB (NOW (), heures d'intervalle X)) ORDER BY `id` ASC; 

    En récupérant des emplois qui ne sont pas retournés en résulte une quantité X de temps nous nous assurons que tous les emplois sont gérés dans le cas d'un travailleur ou d'aller s'écraser AWOL.

  3. Suivant récupérer les détails d'emplois suivis par les documents eux-mêmes:
      SELECT * FROM `emplois` WHERE `started_by` = __ME__ LIMIT 1;
     SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

À la fin de l'emploi, nous insérons nos dossiers résultat et indiquer que le travail le plus complet. N'oubliez pas que les emplois peuvent suspendre / reprendre à tout moment permettre une certaine robustesse dans votre script. Il se pourrait que la tâche suspend mi-chemin de la modernisation du système de contrôle du travail, donc vérifier le nombre d'enregistrements dans un emploi et le nombre de résultats enregistrées sur le système de contrôle du travail serait une sage décision.

De plus, tout cela démontre comment les emplois peuvent être sélectionnés et gérés à partir d'un cadre de requête SQL, vous devriez vraiment être abstraction de votre volonté d'emplois de sorte que si vous décidez de passer à l'aide d'un service Web, un système de fichiers basé, XML , ou tout autre nombre de systèmes de cela n'affectera pas le code au-dessus.

Configuration d'emploi

Le prochain aspect à considérer est la taille d'emploi et de configuration. En jouant avec la configuration de travail que nous pouvons trouver un excellent équilibre entre la vitesse, la réplication de processus et de fiabilité. Prenez un des scénarios OFA couple:

  1. Emplois de prendre un jour de chaque lancer: Cela signifie que vos employés ont besoin de 15 jours pour traiter chaque tâche (souvenez-vous de 10% de la puissance pour 2/3rds de l'époque). Ce n'est clairement pas un sage de configuration, la taille de votre travail est beaucoup trop grand! Il faudrait au moins doubler le temps d'obtenir un emploi traitées si le travailleur initiales vont AWOL (le temps de ramasser ce qu'il n'a pas retourné un résultat plus le temps de retraitement). Dans l'idéal, vous auriez au moins un emploi à plein facilement dégagé par la fin de chaque longue période d'inactivité, de cette façon vous conserver les emplois et à retardement sur ​​le pire des cas un travail prendrait deux jours pour le premier processus devrait vont manquer.
  2. Emplois prendre 1 minute pour lancer: Cela signifie que vos employés prennent environ 15 minutes pour effectuer chaque tâche. Bien que cela puisse paraître initialement idéal, vous gagnez le traitement du travail supplémentaire pendant l'heure du déjeuner, les pauses café, réunions, etc ce scénario met une pression sur d'autres domaines de votre système et introduit ses propres problèmes. Par exemple, tout d'abord votre ratio temps d'installation / de traitement va aller droit vers le bas, donc de perdre l'efficacité du système. Votre réseau va être en permanence en continu des informations d'emplois pour le personnel de divers travailleurs qui sont frustrantes dong de leur travail quotidien. Vous allez aussi de mettre plus de pression sur votre serveur de traitement d'emplois comme il l'a à plat sur des tas de petits morceaux de travailler sur une base régulière. Enfin, dans cette situation si votre serveur tombe en panne d'emplois que vous allez créer un journal de retour énorme de travail inachevé alors plus d'emplois pourraient poursuite de la procédure parfaitement inconscients que le serveur de travail connaît des difficultés.

En réalité, il n'y aura pas de configuration idéale pour une configuration de votre réseau, beaucoup dépend des ressources disponibles, les types d'exigences métier, les délais, la capacité du réseau, et ainsi de suite. Toutefois, certaines lignes directrices seraient:

  • Taille d'emplois afin que chaque travailleur peut obtenir à travers au moins 3-4 dans une emplois période de 15 heures (la plus longue période probable temps d'inactivité)
  • Jouer avec la taille du travail afin que les temps d'installation devient assez insignifiant par rapport au temps de traitement (en gardant à l'esprit le point ci-dessus).
  • Si un travail ne se termine pas au double de la quantité de temps (peut-être moins) que vous attendez qu'elle soit terminée il supposer que son parti AWOL et commencer le traitement avec un autre travailleur. Cela signifie que vous pourriez avoir à attendre jusqu'à trois fois la durée normale d'un emploi qu'elle se termine (peut-être plus si le travail ultérieur échoue). Vous pouvez réduire ce temps, mais attention à ne pas le réduire trop car vous pouvez commencer à dupliquer les tâches de traitement sur ​​une base régulière.
  • Jobs devrait être indépendant des exigences de l'extérieur autant que possible. Le serveur d'emplois, par exemple, ne devraient être contactés au début et à la fin de chaque travail.
  • Ne pas saturer votre réseau, ce qui a deux effets négatifs, vos collaborateurs pendant la journée se trouve en utilisant le réseau de frustration et de problèmes peuvent être expérimentés avec des connexions moment sur un problème qui ne fera que s'aggraver à mesure que vous réduisez votre grille.
  • Assurer des emplois peut fonctionner sur vos travailleurs. Si les emplois deviennent trop de mémoire emplois d'espace disque intensive ou intensive commencera avorter et la seule chose que vous remarquerez est une baisse du nombre de tâches traitées sans véritable raison.

Résultats Soumission d'un job

Lors de la soumission des résultats d'un travail, il est important de vérifier que les résultats n'ont pas été soumis par un autre travailleur, surtout si le travailleur actuelle est inactif depuis un certain temps.

Lorsque les résultats sont soumis s'assurer que le nombre de résultats correspondant au nombre d'enregistrements dans le travail.

Comme indiqué précédemment, et ne peut pas être surestimée, de construire la tolérance de panne dans la récupération d'emplois et la soumission des résultats. Les travailleurs peuvent (et très probablement) passer en mode suspend à la plus dérangeante des temps et cela doit être pris en compte. Aussi une fois de s'abstraire de votre soumission résultats aideront répondre aux futurs changements à votre système de contrôle du travail beaucoup plus facile à traiter.

Résumé

Dans cette Section A, nous avons regardé ce que un serveur de contrôle d'emplois doit faire et comment obtenir un système de base mis en place. Nous avons discuté de la façon de récupérer un travail à partir du système de contrôle et de la meilleure façon de configurer des travaux pour obtenir le maximum de votre système de quadrillage de bureau. Pour finir, un paragraphe ou deux sur la présentation des résultats vers le serveur de contrôle des travaux a été présenté.

  • Un serveur de contrôle de tâche gère les emplois et garantit que toutes les unités de travail sont terminées
  • En faisant abstraction de sélectionner votre travail / résultats de soumission que nous pouvons changer la technologie du serveur de contrôle, sans beaucoup de problèmes
  • Configurez votre emploi afin de s'assurer qu'ils sont gérés rapidement et efficacement sans mettre trop de pression sur votre infrastructure réseau, et sans duplication des tâches de traitement sur une base régulière.
  • Assurez-vous que vous construisez une tolérance aux pannes et de checking erreur dans vos routines, les travailleurs peuvent suspendre et reprendre et le plus incommode de fois. N'oubliez pas de vérifier si les résultats ont déjà été soumis par un autre travailleur.

Suivant le temps

Dans la partie 3 , nous allons créer notre machine virtuelle de traitement et de mettre en place nos machines fenêtres de devenir inactif travailleurs à temps.

Grid Computing Office en utilisant des environnements virtuels - Partie 5

Par , Vendredi 4 Décembre 2009 23:03

Présentation

Je travaille dans une entreprise où nous courons le traitement batch de nombreux millions d'enregistrements de données chaque jour et j'ai pensé récemment à propos de toutes les machines qui sont assis autour de chaque et tous les jours à ne rien faire pendant plusieurs heures. Ce ne serait pas bien si on pouvait utiliser ces machines pour renforcer la puissance de traitement de nos systèmes? Dans cette série d'articles que je vais regarder les avantages potentiels d'employer un bureau de grille en utilisant les environnements virtualisés.

Dans la partie 4 , nous avons examiné en utilisant des outils pour s'assurer que nous sommes la dernière version des sources de code et de données afin que les résultats obtenus sont toujours à jour avec les dernières informations d'affaires et de logique.

Pré-déploiement

Avant de déployer votre système de grille, si il ya une chose que vous faites et une seule chose c'est de référence de votre système actuel! Peu importe ce que vous dites au sujet de combien collègues de travail supplémentaire de votre système va faire sauf si vous avez un nombre pour étayer cette thèse vos garanties ne sont rien. Ainsi,

  • combien d'enregistrements peut vous traitez actuellement? Par jour? Par heure?
  • Combien de temps faut-il habituellement à tourner autour d'un emploi?
  • Combien plus la capacité de avez-vous?

Il ya aussi d'autres questions:

  • Si votre serveur de traitement (ou un de vos serveurs de traitement) descend comment cela affectera vos capacités, vous serez paralysé?
  • Quels avantages espérez-vous / attendre à obtenir à partir d'un système de grille?
  • Vos machines de bureau capable d'exécuter les travaux?
  • Sont vos (ou pouvez-vous être converti emplois) à travailler dans ce style de course?

Le dernier point important est de prendre votre temps sur tout changement majeur comme celui-ci. Mettez à jour votre code de traitement au travail en utilisant la nouvelle méthodologie, point de repère à nouveau. Peut-être configurer votre serveur de traitement d'exécuter une machine virtuelle, après tout votre serveur de traitement sera juste un autre travailleur (juste un très puissant relativement). Laisser le nouveau processus à régler.

Déploiement

Ma suggestion serait de pop dans le bureau un week-end effectuer toutes les installations et de configuration. Pour ce faire, juste avant quinze jours de vacances et de laisser d'autres si pauvres gars pour faire face aux conséquences ... peut-être pas ...

Déploiement d'un système comme celui-ci doit être lente. Malgré qu'il soit relativement simple à mettre en place ce système aura une incidence sur votre infrastructure de bureau entier (ainsi le numérique). Tout d'abord, rouler à un couple de machines à la fois, de surveiller le trafic réseau, comment les hôtes travailleur effectuer sur une base de jour en jour. Vous pouvez avoir besoin de modifier votre configuration d'emplois en réponse à vos résultats.

Une fois le système installé avec un peu de machines (disons 10% de toutes les machines de bureau, c'est à dire 5) continuer à surveiller le trafic réseau et l'ordinateur hôte de référence performance. à nouveau sur Suivant, vous devriez maintenant être le traitement des travaux de 33% de plus que votre premiers benchmarks. Vérifiez c'est le cas, ou que vous êtes au moins dans ce stade. Si non, enquêter sur ce qui se passe avant de repartir. Répétez ce cycle jusqu'à ce que vous avez joyeusement toutes les machines de bureau fonctionnant sans tuer les performances des machines individuelles ou de broyage de votre réseau à un arrêt.

En tout temps garder l'analyse comparative, même après tous les déploiements sont faites. Vérifiez la façon dont les mises à jour nouveau code affectent la vitesse de votre système, vérifier tous les travailleurs sont dans des rapports et le traitement des emplois. Lentement (très lentement) incrément de la configuration de votre poste pour obtenir le meilleur de vos travailleurs et votre réseau.

Stop!

Que faire si vous voulez arrêter vos travailleurs de courir à un certain moment? Ils sont tous là-bas courir, régénérantes, et en essayant de leur mieux pour traiter les données comme des insectes affamés. La réponse peut sembler évidente, mais sa valeur en ajoutant juste au cas où son négligé. Il suffit de modifier votre script de traitement avec une sortie (0) or die () ou une autre déclaration de tuer votre travail de traitement. Une raison importante pour laquelle nous essayons toujours de mettre à jour le script de traitement avant toute dernière course!

Système de démonstration

Pour écrire cette série de courts articles, j'ai créé une grille très petit pour démontrer les technologies et méthodologies. J'ai lu beaucoup d'articles, de tutoriels et de divers outils utilisés pour configurer et surveiller ce qui se passait. En aucun cas je n'ai sorti et saturée d'un bureau entier avec le trafic et je n'ai pas eu accès à un ordinateur personnel de membres réguliers pour voir comment la performance d'hôte a été affectée.

Mon système de démonstration a été très humble en effet. J'ai utilisé mon bureau ordinaire mis en place un serveur de contrôle d'emplois. Sur ce que j'avais installé mySQL serveur installé configuré comme un maître dans la réplication, PHP , A et SVN liés par Apache (pour l'accès via travailleur VM).

J'ai ensuite créé une machine CentOS travailleur sur VirtualBox sur un ordinateur portable de 6 ans windows XP. Je configurer les tâches planifiées comme spécifié après la copie de la VM sur la machine et laisser faire.

La machine virtuelle a été mis en place avec PHP, la subversion, et mySQL. J'ai vérifié une branche nommée «travailleur» à partir de mon contrôle serveurs référentiel emplois et fait en sorte qu'il pourrait être mis à jour en utilisant 'svn update'. Ensuite, j'ai configurer MySQL comme un esclave et vérifié que les données ont été répliquant de MySQL sur le serveur de contrôle d'emplois vers le VM travailleur. Après tout cela j'ai configuré le script bash et la tâche cron.

Mon script de traitement de fond est allé le long des lignes de ce (slideshows très simple):

  • Lire dans le champ Nom
  • Compté le nombre de noms similaires dans une table de la source de données stockée sur le VM
  • Compté le nombre de noms que ci-dessus, mais le nom de fractionnement par des espaces (par exemple prénom, second prénom, nom)
  • Répété ce processus 1000 fois

Chaque tâche a pris environ 20 minutes à courir. A un moment, j'ai ouvert plusieurs copies de la VM travailleur sur le portable sous Windows et regardé les emplois être coché par chacune des adresses IP des travailleurs. À ce stade, je confirme également que la réplication automatiquement redémarré.

Laissant l'ordinateur portable au ralenti abouti à un travailleur de commencer à traiter les travaux à partir du serveur de contrôle des travaux. Si on reprend l'utilisation ordinateur portable il y avait un retard d'environ 30-60 secondes, il s'agit d'une quantité considérable de temps et le personnel aurait besoin d'être mis au courant que leur machine peut s'interrompre pendant une courte période lors du retour à la machine. Les nouvelles machines ne peuvent pas avoir une pause de ce terme. Le bénéfice de la quantité de traitement effectué par ces machines durant les périodes d'inactivité serait plus que l'emportent les membres du personnel d'avoir à attendre une courte période (par exemple 1 minute) en arrivant à leurs machines d'un matin (j'ai souvent attendre plus longtemps que ce pour un Windows Defender mise à jour aura lieu) à condition qu'ils soient mis au courant de ce (temps utile de prendre un café le matin!).

Globalement, je suis convaincu que je l'ai démontré les technologies qui pourraient être utilisées pour créer un tel système. J'ai montré que ce système fonctionne sur une échelle de (très) petites et avec un peu plus de l'expérimentation pourrait être étendue utiliser les ressources des machines d'un bureau. Si je n'obtiens pas au point de le faire, je serais très intéressé de savoir / voir quand quelqu'un d'autre.

Conclusions / évaluation

La prochaine étape évidente serait de réellement obtenir un exemple du monde réel et de commencer à déployer un tel système dans un environnement de bureau et de voir ce qui se passe. Poser une entreprise à s'engager sur cette piste, sans une compagnie flamboyant pour prouver l'efficacité de la technologie et peut-être un peu difficile. Grille / Distributed computing est très populaire est certains milieux et a quelques grosses applications (BIONC, SETI @ Home, Folding @ Home, etc.) Je n'ai pas, cependant, trouver une plus petite échelle et un système simple comme ça dans mes recherches qui pourraient être mis en œuvre au sein d'un environnement de bureau.

J'ai créé un système fondamentalement libre en utilisant un logiciel de source ouverte et la plupart des outils disponibles dans presque n'importe quel bureau. Les technologies ont été essentiellement démontrée et montrer à réaliser et fonctionne comme prévu. J'espère avoir montrer que le travail n'est pas beaucoup et avec une configuration très simple, vous pouvez déployer un système informatique, bureautique, grille qui est puissant, bon marché, une et évolutive tout au même moment.

Une fois qu'un système est en marche il ya presque pas de fin à la quantité de personnalisation et d'améliorations que vous pouvez faire. Par exemple les statistiques / benchmarking peuvent facilement être ajoutés montrant la valeur d'un tel système chaque jour. De nouvelles machines peuvent être ajoutées facilement et rapidement comme et quand ils arrivent avec des améliorations apportées au matériel existant renforcer votre puissance de traitement.

J'espère que vous avez apprécié la lecture de cette série d'articles et de son donné matière à réflexion sur exécutant un système de grille de bureau. La solution présentée ici ne fonctionnera pas nécessairement dans toutes les situations, mais devrait être adaptable afin de vous permettre d'obtenir votre traitement de données fait en utilisant votre propre solution.

S'il vous plaît, n'hésitez pas à m'envoyer vos commentaires, corrections ou améliorations, et je ferai de mon mieux pour garder cet article mis à jour pour correspondre.













Thème Panorama par Themocracy

15 visiteurs en ligne aujourd'hui
8 personnes, 7 bots, 0 membres
Max visiteurs aujourd'hui: 15 à 00:29 UTC
Ce mois-ci: 19 à 06h09 UTC 19-08-2011
Cette année: 130 à 28-03-2011 22:40 UTC
Tout le temps: 130 à 28-03-2011 22:40 UTC