Categoria: Grid Computing

Escritório de Computação em Grid utilizando ambientes virtuais - Parte 4

Por , sexta-feira 04 de dezembro de 2009 11:59

Introdução

Eu trabalho em uma empresa onde corremos muitos trabalhos em lote de processamento de milhões de registros de dados a cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam ao redor de cada e todos os dias sem fazer nada por várias horas. Não seria bom se pudéssemos usar essas máquinas para reforçar o poder de processamento dos nossos sistemas? Neste conjunto de artigos que eu vou olhar para os potenciais benefícios da contratação de um escritório da rede usando ambientes virtualizados.

Na parte 3 , criamos a nossa máquina de processamento virtual e configurar o Windows para se tornarem máquinas de tempo ocioso dos trabalhadores.

Executando o código mais recente

Inevitavelmente depois de criar sua lógica de negócio trabalhadores vai mudar, bugs serão encontrados, código mais rápido mais eficiente será produzido deixando assim os seus trabalhadores se sentaram ao redor de processamento de dados utilizando código smelly idade . Como então garantir que estamos sempre usando a versão mais recente e maior do nosso processamento de scripts?

Existem algumas maneiras simples muito fácil nós poderíamos fazer isso, o truque, no entanto, é reduzir o poder de processamento e tráfego de rede para alcançar isso. Vamos começar com a mais simples das soluções e melhorá-lo lentamente ao longo de um par de iterações.

O primeiro método seria simplesmente se conectar ao nosso servidor de controle de trabalho (via samba, FTP ou similar) e puxe para baixo a última versão do código. Não muito eficiente, mas ele vai fazer o trabalho. Permite melhorar isso um pouco, como sobre a criação de um script e usando rsync, que cada vez em vez? Alternativamente, que tal colocar nosso script mais recente transformação em subversão checando o código inicialmente e depois apenas atualizar o nosso código em cada execução ( svn update )?

No final, pode acabar com um script bash (chamado pelo cron a cada 10 minutos), que parece tão simples como isto:

  #! / Bin / sh
 se ps ax | grep-v grep | grep php > / dev / null
 então
     echo "Job está processando, de saída"
 outro
     echo "O trabalho não está sendo executado, começar agora"
     cd / caminho / para / de trabalho / cópia
     svn update
     php yourJobProcessingScript.php
 fi 

Agora podemos ter certeza de que a cada rodada estamos definitivamente em execução o código mais recente. Estamos a garantir isso atualizando nossa base de código cada vez que fazemos uma corrida e reduzindo o tráfego da rede, transferindo apenas as diferenças de arquivos através de nossa rede.

Na minha configuração de demonstração, eu fiz exatamente como descrito acima. Subversion foi instalado no meu servidor o processamento do trabalho e eu simplesmente puxou o último código de um "trabalhador" filial usando 'svn update'. Eu também adicionei uma tag número de versão para o meu script de processamento que foi devolvido ao banco de dados como parte do retorno de resultados. Desta forma pude ver que meu código estava sendo atualizado cada vez que eu copiei meu tronco para o ramo de trabalho ou seja, que eu estava definitivamente executar o script de processamento mais recente.

Usando os dados mais recentes

Se o seu processamento de trabalho faz uso de fontes de dados, em seguida, em algum momento estes vão ser atualizados também. A menos que vocês chamam de suas fontes de dados em uma base muito pouco freqüente que você está indo para inundar a rede com o tráfego, logo que começar a correr os seus trabalhadores trazendo tudo a uma paralisação. Para a minha solução eu decidi que eu gostaria de mover minhas fontes de dados ao redor com meus VMs.

Segure você está cavalos lá! E se minhas fontes de dados são ENORMES? Bem este é realmente um caso de a quantidade de dados que estamos falando? Pode ser mais rentável para instalar uma maior disco rígido adicional em cada máquina do que comprar um servidor de processamento adicional. Esta é uma questão de orçamento e é até a empresa para decidir. É talvez que suas fontes de dados são tão grandes que é apenas inviável para manter essa quantidade de dados em máquinas de seu funcionário. Nesse caso o que você faria? Bem que poderíamos olhar para chamar um servidor de dados local, mas isso pode causar problemas com a rede. Neste caso, um sistema de rede como esta pode tornar-se irrealista para incluir em seu ambiente de escritório. Pode ser também que você pode olhar para estratégias alternativas de execução, por exemplo, apenas chamar seus trabalhadores 20:00-06:00 a cada noite e / ou otimização de pedidos de dados de origem.

Seguindo em frente, vamos dizer os nossos dados quantidade de fontes de 100Gb de dados. Bem, sim que é um pouco de dados para se deslocar na rede em uma atualização. Como podemos garantir que temos a cópia mais recente dos dados neste caso? Rsync é uma possibilidade, mas pessoalmente eu acho que, executando sua fonte de dados mais recentes sobre o seu servidor de processamento de emprego e como fazer essa configuração como um mestre na replicação (com um log bin longa e agradável) pode ser o caminho a seguir:

replicação Definindo cada um de seus trabalhadores como um escravo para o trabalho atualizações controle de servidor para suas fontes de dados vai pingar para baixo muito bem para os seus trabalhadores, sem um grande aumento na atividade da rede (que é a menos que você executar uma atualização de dados enorme e todos os seus trabalhadores chutar ao mesmo tempo). Isto tem vantagens sobre o rsync em que você não teria uma longa pausa antes de cada trabalho, como as atualizações do banco de dados, o mysql daemon no seu trabalho continuamente atualizar seus dados enquanto o processamento continua.

Isto é como eu configurar meu servidor de demonstração. Para configurar a replicação eu segui o guia no site do MySQL ( Configurando replicação ) e dentro de 20 minutos eu tinha o meu trabalho inital replicar o trabalho conjunto de dados controle de servidores. Para cada trabalhador adicional as configurações de replicação e processo funcionou cada momento em que o VM foi copiado.

Sumário

Nesta seção do artigo vimos como é fácil e indolor, é para manter o seu código de processamento até à data por using rsync ou subverion (SVN) para fazer o trabalho e reduzir o tráfego de rede na mesma time. Nós também discutimos como para manter suas informações de fonte de dados up-to-date, permitindo-lhe escorrem para cada um de seus trabalhadores. Assim, área que garanta a manter-se com a lógica de negócios e informações em nosso sistema de rede de escritório. Evidentemente haverá inúmeras alternativas para a execução dessas tarefas, mas aqui foram dois exemplos simples para mostrar como é fácil uma solução está por vir.

Próxima vez

Na parte final desta série, apropriadamente chamado Parte 5 , vamos discutir a implantação deste sistema para. Vou resumir o que foi aprendido eo que eu consegui criar.

Escritório de Computação em Grid utilizando ambientes virtuais - Parte 1

Por , sexta-feira 04 de dezembro de 2009 11:23

Introdução

Eu trabalho em uma empresa onde corremos muitos trabalhos em lote de processamento de milhões de registros de dados a cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam ao redor de cada e todos os dias sem fazer nada por várias horas. Não seria bom se pudéssemos usar essas máquinas para reforçar o poder de processamento dos nossos sistemas? Neste conjunto de artigos que eu vou olhar para os potenciais benefícios da contratação de um escritório da rede usando ambientes virtualizados.

Como PHP desenvolvedor vou usar as ferramentas que eu uso todos os dias, ou seja, Linux, MySQL , PHP, VirtualBox e Subversion (SVN). No entanto espero que este guia irá adaptar-se a outras linguagens e tecnologias tão bem.

A solução que eu fornecer será muito vagamente baseado no tipo de processamento que seria necessário para alcançar, isto pode não ser verdade através de todo o artigo como eu vou mudar as coisas para a simplicidade, ou para produzir cenários de uso mais interessante.

Estes ambientes virtualizados serão executados em máquinas Windows pois é isso que a maioria dos escritórios executado. O processamento que as máquinas de escritório não deve interferir com o pessoal usando essas máquinas, devem não necessitam de manutenção na máquina, e ser facilmente destacáveis ​​para novas máquinas assim que estiverem disponíveis. Além disso, novas máquinas virtuais não deve ser necessária nenhuma configuração adicional, pois isso reduz a escalabilidade ea facilidade com que o sistema de rede pode ser prorrogado.

Por que implantar um Grid Computing Office?

Em primeiro lugar você pode estar pensando, por que não usar um recurso de computação em nuvem, como plataforma da Amazon EC2 ? Bem, as razões podem ser várias, por exemplo:

  • Você não vai confiar certos dados para um ambiente de computação em nuvem
  • Você não pode colocar certos dados em um ambiente de computação em nuvem, por motivos legais (por exemplo, dados que saem do país), potencialmente por razões legais, por exemplo, registos NHS.
  • Você quer manter as suas unidades de processamento de perto e tem total controle sobre o hardware também
  • Você não tem os fundos do projecto de executar instâncias nuvem
  • Seu escritório não tem uma conexão com a internet e, portanto, que não é possível usar um recurso nuvem
  • Você não gosta de chuva, nuvens de chuva sugerem, portanto, a manter bem longe

Tenho certeza que a lista poderia continuar, mas eu acho que é suficiente por enquanto.

Vantagens de um Grid Computing Escritório

Bem, vamos fazer alguma matemática (e em grande estilo verdadeira física permite fazer algumas suposições varrer). Imagine que você tem um servidor de processamento de corpulento execução de 100 empregos por dia. Em seu escritório você tem 50 máquinas que estão ociosas 16 horas por dia, cada uma dessas máquinas é de 10% tão potente como o seu sever processamento robusto. (Todos os resultados aqui são arredondados para subestimar aumentar o desempenho).

Assim, uma potência da máquina * 10% * O tempo de 2 / 3 = 0,067 ou seja, processamento de desktop 1 no tempo ocioso poderia processar 6 vagas de emprego total por dia.

Se agora você escala isto leva 15 desktops ocioso para processar trabalhos como muitos por dia como seu servidor de processamento principal faz.

Assim, em nosso escritório fingir de 50 máquinas que poderiam aumentar o nosso poder de processamento a partir de 1 servidor até 4 servidores de processamento completo, ou poderíamos estar processando 400 empregos por dia em vez de 100.

Aviso prévio, sem investimento em novos hardwares sua empresa acaba de ampliar sua capacidade de processamento em lote 4 vezes! Potencialmente você vai aumentar o seu consumo de energia, mas de ambientes mais escritório eu fui para as máquinas geralmente são deixados durante a noite mesmo, então você poderia ver isso como uma iniciativa verde.

Outras vantagens também significa que o investimento em novos (ou atualizado) servidores de processamento pode ser adiada se as máquinas de seu escritório são suficientes e que, como você melhorar o poder de suas máquinas de escritório sua grade de escritório torna-se mais poderosa automaticamente.

Tecnologias

O que você precisa? (Ou mais corretamente o que eu uso):

  • Ociosos de máquinas para escritório (no meu caso um sobressalente antigo Windows XP laptop)
  • VirtualBox (ou outro software de virtualização de cliente)
  • A máquina virtual com PHP, mySQL running executando uma cortada OS, eu estou chamando esses servidores o meu LIMP:)
  • Trabalhos para serem executados
  • Servidor do trabalho (pode ser uma outra máquina virtual em algum lugar)

Empregos típicos

Os tipos de empregos que este sistema é projetado para funcionar é a seguinte:

  • Sistema recebe uma lista de dados sobre a qual precisamos para corresponder e retornar resultados
  • Correspondência envolve verificar / pesquisar diversas (bastante estático) fontes de dados
  • Resultados a partir de fontes de dados pode exigir uma validação adicional, fusão, verificação de fontes de dados adicionais em resposta aos resultados
  • Dados são retornados com registros correspondentes, totalmente validados e processados
  • Cada registro em um trabalho é independente do resto

Então, basicamente nós estamos olhando para executar trabalhos que requerem uma mistura de pesquisas do banco de dados e algumas processamento de números, um cenário bastante comum em um ambiente de negócios.

Soluções de redes não só são vantajosos para processar os trabalhos deste tipo. Basicamente, qualquer processo que pode ser dividida em unidades independentes podem ser executados em paralelo. Veja esta wikipedia exemplos e mais informações: Grid Computing , mas um par de exemplos famosos são Seti @ Home e BIONC . Existem frameworks para a execução de redes de computação, e estes valem bem a pena olhar em.

O que vamos conseguir?

Ao final desses artigos espero mostrar que a implantação de uma rede de escritório não precisa estar consumindo muito caros ou de tempo. Estou indo para discutir:

  • Configurando o sistema de controle de trabalho de configuração do trabalho,
  • Criação de uma máquina de processamento virtual apropriado
  • Como configurar o sistema em uma máquina Windows
  • Assegurar que você está usando o último código e dados
  • Implantação e avaliação comparativa
  • Olhando para o futuro

Eu estarei de construção (ok eu construí, então escrevi isso) um exemplo de aplicação para testar os conceitos em uma máquina local usando o windows XP e minha máquina GridMachine 'virtual. Meu servidor de controle de trabalho será a minha máquina principal que corre Fedora 11 .

Este não é de forma significava para demonstrar um sistema totalmente funcional robusto, o seu significado mais de uma demonstração e discussão mostrando que essas coisas podem ser alcançadas em um espaço razoavelmente curto de tempo ea baixo custo. Sinta-se livre para me enviar quaisquer comentários, correções ou melhorias e vou fazer o meu melhor para manter este artigo atualizado para corresponder.

Próxima vez

Na parte 2 eu vou começar por olhar para o sistema de controle de trabalho, e olhar para como os trabalhos devem ser configurados para atingir a maior quantidade de processamento, garantindo que cada trabalho é processado sem falhar.

Escritório de Computação em Grid utilizando ambientes virtuais - Parte 2

Por , sexta-feira 04 de dezembro de 2009 11:23

Introdução

Eu trabalho em uma empresa onde corremos muitos trabalhos em lote de processamento de milhões de registros de dados a cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam ao redor de cada e todos os dias sem fazer nada por várias horas. Não seria bom se pudéssemos usar essas máquinas para reforçar o poder de processamento dos nossos sistemas? Neste conjunto de artigos que eu vou olhar para os potenciais benefícios da contratação de um escritório da rede usando ambientes virtualizados.

Na parte 1 eu dei uma visão geral do sistema e tecnologias eu estarei usando, bem como discutidos alguns dos possíveis motivos pelos quais você gostaria de criar uma rede de escritório.

Job Control

Se você estiver indo para ser executado empregos, então você vai precisar de alguma maneira de gerenciá-los. Seu sistema de controle do trabalho (em seu servidor de emprego) precisa ser muito bem pensada antes mesmo de tentar executar uma rede de escritório. Então, em primeiro lugar, quais são as tarefas de um sistema de controle de trabalho:

  • Mão empregos fora a pedido dos trabalhadores
  • Dizer aos trabalhadores que tipo de postos de trabalho para executar
  • Empregos faixa
  • Garantir que as tarefas só são executadas uma vez
  • Fornecer dados de emprego aos trabalhadores, ou, pelo menos, dizer-lhes onde obtê-lo

O sistema também deve ser extensível, uma solução que funciona por enquanto em um único caso pode ser prorrogado para executar vários tipos de trabalhos como a empresa vê o valor em uma solução de grid. Por exemplo, os trabalhos podem ganhar prioridades, mais de um tipo de trabalho pode existir (ou seja, bases de código várias), eventualmente você pode até mesmo executar várias máquinas de trabalho diferentes que são otimizados para cada tipo de trabalho (embora isso afastar-se do trabalhador genérico 'idéia). Sempre tento pensar no futuro no desenvolvimento de sistemas, uma visão de curto prazo pode levar à frustração de longo prazo e tempo de desenvolvimento aumentou.

Servidor de trabalho

Nós vamos precisar de um lugar para controlar o nosso trabalho de, este deve ser o único sistema na sua rede que tem um fixo resource locator, será que um endereço IP, nome do host, URL (usando DNS interno), etc Isto é porque os trabalhadores precisam saber onde procurar emprego, os trabalhadores precisam encontrar o sistema de controle de trabalho (não o sistema de controle de trabalho encontrar os trabalhadores).

O servidor de trabalho em si não tem realmente uma tarefa complicada (em um sistema básico de qualquer forma), ele precisa armazenar uma lista de empregos, distribuir empregos, receber os resultados, e, posteriormente, armazená-los para posterior recuperação. Como essas peças (como "mão de empregos") são definidos pode ser muito básico. Mais tarde, podemos estender o sistema para incluir uma interface de administração para adicionar, editar, apagar, suspender os trabalhos, mas isso está além deste exercício.

Não há nenhuma razão que seja, então, que o seu servidor de trabalho não poderia ser uma máquina virtual rodando dentro do seu servidor de processamento principal, desde que não drena muitos recursos a partir dele. O servidor de trabalho no entanto não precisam de alta disponibilidade, se ele vai para baixo em uma noite de sexta-feira você vai perder um fim de semana inteiro de processamento, potencialmente custando-lhe um par de semanas de tempo de processamento (quando comparado ao seu servidor de processamento principal sozinho) . Você pode querer colocar o seu servidor de trabalho em um ambiente de balanceamento de carga para alta disponibilidade.

Configuração básica

A configuração básica para o nosso servidor de trabalho será composto do que eu estou chamando um dos meus servidores LIMP (isto é Li nux, m ySql, P HP). O código em execução no thea trabalhadores vão realmente descobrir o que empregos ele pode ser executado através da interação com bancos de dados com o trabalho do sistema de controle. Mais tarde, poderíamos criar um serviço web e realmente entregar os trabalhos em vez de ter os trabalhadores fazem o trabalho duro em si, mas por agora vamos continuar a usar o princípio KISS (Keep it Simple, Stupid!).

Então, vamos criar três mySQL tabelas para lidar com postos de trabalho. Estes serão postos de trabalho ``, `jobRecords`, e `jobResults`.

empregos tabela Aqui eu estou usando SQL camarada uma ótima alternativa pouco para phpMyAdmin só porque é mais fácil de instalar no CentOS (para os outros o vêem: 10 ótimas alternativas para phpMyAdmin )

Esta tabela é composta de 5 campos simples,

  • ID: Identifique o trabalho
  • Nome: Poderia ser uma referência do cliente, ou qualquer número de outros identificadores
  • Status: Você precisa saber onde o trabalho está, por exemplo,
    • 0: Não iniciado
    • 1: Peguei
    • 2: Completed
  • started_by: Quem começou a fazer o trabalho? Isto não é totalmente necessário, mas é bom ter um. Eu sugiro que os trabalhadores de rastreamento pelo seu endereço IP em sua rede
  • started_at: Quando é que o trabalhador iniciar o trabalho? Acompanhando os trabalhos que não tenham concluído dentro de X quantidade de tempo que sabemos que precisamos para pegar o trabalho, mais uma vez e começar a processar por outro trabalhador. Os trabalhadores poderiam parar o processamento / go off-line para qualquer número de razões, falta de energia, acidente, perda de rede, etc

It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

Como dito anteriormente, os trabalhadores vão fazer o nosso trabalho de gestão para nós agora, para tudo o que precisamos realmente fazer é encontrar um trabalho que precisa de tratamento e obter as informações. Como poderíamos fazer isso? Bem escolher os nossos critérios de seleção de emprego e procurar emprego, em SQL eu fiz o seguinte:

  1. Pegue todos os trabalhos que não estão marcados como completa, mas do nosso trabalhador e redefini-las (substituto __ME__ com um identificador mais fácil, seria o endereço IP):
      UPDATE `empregos` SET `estado` = 0 WHERE `estado` = 1 AND `` = started_by __ME__; 
  2. Usando nosso critério de seleção de emprego, selecione um trabalho e dizer ao sistema de controle que este trabalhador está a lidar com ele:
      UPDATE `empregos` SET `estado` = 1, `` = started_by __ME__, `started_at` = NOW () WHERE `estado` = 0 OR
     (`Estado` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL HOUR X)) ORDER BY `id` ASC; 

    Pegando trabalhos que não apresentaram resultados em X quantidade de tempo que assegurar que todos os trabalhos são executados em caso de um trabalhador deixar de funcionar ou se ausentar sem licença.

  3. Em seguida pegue os detalhes empregos seguido pelos registros próprios:
      SELECT * FROM `WHERE` empregos started_by `= __ME__ LIMIT 1;
     SELECT * FROM `job_records WHERE` id `= __JOBID__; 

Após a conclusão do trabalho que inserir registros nosso resultado e marcar o trabalho como completo. Lembre-se que os trabalhos podem suspender / resumir a qualquer momento permitem alguma robustez em seu script. Pode ser que a tarefa a meio suspende a atualização do sistema de controle de trabalho, assim verificar o número de registros em um emprego e o número de resultados salvo de volta para o sistema de controle de trabalho seria uma medida acertada.

Além disso, embora isso demonstra como os trabalhos podem ser selecionados e gerenciados a partir de um quadro SQL-query você deve realmente ser abstraindo o seu controle de trabalho de modo que se você decidir passar a usar um serviço web, um sistema baseado em arquivo, XML , ou qualquer outro número de sistemas que não afetará o código acima dele.

Configuração do trabalho

O próximo aspecto a considerar é o tamanho do trabalho e configuração. Ao jogar com a configuração de trabalho que podem atingir um excelente equilíbrio entre a velocidade, a replicação de processos e confiabilidade. Dê uma cenários deum casal:

  1. Emprego assumem um dia cada um para executar: Isto significa que os seus trabalhadores precisam de 15 dias para processar cada trabalho (lembre-se 10% da energia para 2/3rds do tempo). Este não é claramente um sábio configuração, o tamanho do trabalho é muito grande! Levaria pelo menos o dobro do tempo para conseguir um emprego processados ​​deve o trabalhador ir AWOL inicial (tempo de pegar que não tenha retornado um resultado mais o tempo de reprocessamento). Em um ideal que você tem pelo menos um trabalho completo facilmente apuradas até o final de cada período de tempo ocioso, de que maneira você mantém os postos de trabalho mais típico e, no pior caso, um trabalho levaria dois dias para o primeiro processo deveria vão faltar.
  2. Emprego assumem um minuto para executar: Isto significa que os seus trabalhadores levar cerca de 15 minutos para executar cada trabalho. Embora isto possa inicialmente parecer ideal, você ganha de processamento de trabalho adicional durante a hora do almoço, coffee breaks, reuniões, etc este cenário coloca pressão sobre outras áreas do seu sistema e apresenta seus próprios problemas. Por exemplo, em primeiro lugar a sua razão de tempo de configuração / processamento vai ir para a direita para baixo, perdendo assim a eficiência do sistema. Sua rede vai ser constantemente streaming de informações do trabalho para a equipe de trabalhadores que são vários frustrante dong seu trabalho do dia a dia. Você também vai colocar mais pressão sobre o seu servidor de processamento de trabalho, pois tem de prato para fora lotes e lotes de pequenas peças de trabalho em uma base regular. Por fim, nesta situação, se seu servidor de emprego desce você vai criar um log de volta enorme de trabalho incompleto enquanto trabalhos maiores poderia, continuou alegremente inconscientes de processamento que o servidor estava passando por dificuldades de trabalho.

Na realidade não haverá uma configuração ideal para a sua configuração de rede, muito depende dos recursos disponíveis, tipos de trabalho, emprego requisitos prazos de entrega, capacidade de rede, e assim por diante. No entanto algumas orientações seria:

  • Trabalhos em tamanho de modo que cada trabalhador pode passar por pelo menos 3-4 empregos em um período de 15 horas (o mais longo período de tempo provável idle)
  • Brincar com o tamanho do trabalho para que o tempo de configuração torna-se bastante insignificante comparado com o tempo de processamento (tendo em conta o ponto acima).
  • Se um trabalho não for concluído em o dobro do tempo (talvez menos) você espera que ele completa ela assume que sua AWOL ido e começar a processá-lo com outro trabalhador. Isto significa que você pode ter que esperar até três vezes o comprimento normal de um trabalho para a conclusão (possivelmente mais, se o trabalho subseqüente falhar). Você pode querer reduzir este tempo, mas tome cuidado para não reduzi-lo muito como você pode começar a duplicar tarefas de processamento em uma base regular.
  • Empregos devem ser independentes dos requisitos de fora, tanto quanto possível. O servidor de emprego, por exemplo, só deve ser contactado no início e final de cada trabalho.
  • Não sature sua rede, isso vai ter dois efeitos negativos, sua equipe vai encontrar durante o dia utilizando a rede frustrante e problemas podem ser experimentados com conexões tempo limite um problema que só vai piorar à medida que você escala sua grade.
  • Garantir os empregos podem ser executados em seus trabalhadores. Se os trabalhos se tornam muito espaço de memória trabalhos intensivos ou intensivos de disco começará a abortar ea única coisa que você notará é uma gota no número de trabalhos processados ​​sem motivo real.

Resultados da apresentação de uma Job

Ao apresentar os resultados de um trabalho é importante verificar que os resultados não tenham sido apresentados por outro trabalhador, especialmente se o trabalhador atual tem estado dormente por algum tempo.

Quando os resultados são submetidos garantir que o número de resultados corresponde ao número de registros dentro do trabalho.

Como dito anteriormente, e não pode ser mais enfatizado, construir tolerância a falhas em recuperação de trabalhos e apresentação de resultados. Os trabalhadores podem (e provavelmente vai) entrar em modo de suspensão no mais inconveniente de vezes e isso precisa ser servidos. Além disso, mais uma vez abstrair sua submissão resultados ajudarão atender a futuras mudanças no seu sistema de controle de trabalho muito mais fácil de lidar.

Sumário

Neste sectiona vimos o que é um servidor de controle de trabalho precisa fazer e como obter um sistema bastante básico configurado. Discutimos como recuperar um trabalho a partir do sistema de controle ea melhor forma de configurar tarefas para obter o máximo de nossa grade de seu sistema de escritório. Para terminar, um parágrafo ou dois sobre como enviar os resultados de volta para o servidor de controle de trabalho era apresentado.

  • Um servidor de controle de trabalho gere empregos e garante que todas as unidades de trabalho estão concluídas
  • Abstraindo o seu trabalho select / resultados submissão podemos mudar a tecnologia do servidor de controle sem problemas muito
  • Configure seus trabalhos para garantir que eles são executados com rapidez e eficiência, sem colocar demasiada pressão sobre a infra-estrutura de rede, e sem duplicar o processamento de tarefas em uma base regular.
  • Certifique-se de construir tolerância a falhas e checking erro em suas rotinas, os trabalhadores podem suspender e retomar e mais inconveniente de vezes. Lembre-se de verificar se os resultados já foram apresentados por outro trabalhador.

Próxima vez

Na parte 3 , vamos criar a nossa máquina de processamento virtual e estabelecer as nossas máquinas de janelas para se tornar ocioso trabalhadores a tempo.

Escritório de Computação em Grid utilizando ambientes virtuais - Parte 5

Por , sexta-feira 04 de dezembro de 2009 11:03

Introdução

Eu trabalho em uma empresa onde corremos muitos trabalhos em lote de processamento de milhões de registros de dados a cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam ao redor de cada e todos os dias sem fazer nada por várias horas. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. So,

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • How much more capacity do you have?

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

Desenvolvimento

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Pare!

E se você quer parar de correr os seus trabalhadores, em algum momento? Eles estão todos lá fora, correndo, regeneração, e tentar o seu melhor para processar dados como insetos com fome. A resposta pode parecer óbvio, mas vale a pena acrescentar apenas no caso de sua esquecido. Basta editar o seu script de processamento com um exit (0) or die () ou alguma outra indicação para matar o seu trabalho de processamento. Uma razão importante pela qual nós sempre tentar atualizar para o script de processamento mais recente antes de qualquer corrida!

Sistema de demonstração

Para escrever este conjunto de artigos curtos que eu criei uma grade muito pequena para demonstrar as tecnologias e metodologias. Eu li muitos artigos, tutoriais, e usado diversas ferramentas para configurar e monitorar o que estava acontecendo. De maneira nenhuma eu tenho ido para fora e saturada de um escritório inteiro com o tráfego e nem tive acesso a um PC normal os funcionários para ver como o desempenho do host foi afetada.

Meu sistema de demonstração foi muito humilde, de fato. Eu usei meu desktop regulares configurado como um servidor de controle de trabalho. Sobre isso, eu tinha instalado mySQL servidor instalado configurado como um mestre na replicação, PHP , Â e SVN ligados através apache (para acesso via trabalhador VM).

Eu, então, criou uma máquina CentOS trabalhador no VirtualBox em um antigo Windows XP laptop seis anos. Eu configurei tarefas agendadas conforme especificado após copiar o VM na máquina e deixá-lo ir.

A máquina virtual foi criada com PHP, subversão e mySQL. Eu verifiquei um ramo chamado "trabalhador" do meu trabalho repositório de servidores de controle e fez com que ele poderia ser atualizado usando 'svn update'. Em seguida eu configuro o MySQL como um escravo e verificado que os dados foram replicar a partir do MySQL no servidor de controle de trabalho até o VM trabalhador. Depois de tudo isso eu configurei o script bash eo trabalho cron.

Meu script de processamento, basicamente, foi ao longo das linhas deste (coisas muito simples):

  • Leia no campo de nome
  • Contado o número de nomes semelhantes em uma tabela da fonte de dados sobre o VM
  • Contado o número de nomes como acima, mas dividindo o nome por espaços (isto é, nome próprio, do meio, sobrenome)
  • Repeti o processo 1000 vezes

Cada trabalho levou cerca de 20 minutos para ser executado. Em um ponto eu abri várias cópias do VM trabalhador no laptop janelas e assistiram os trabalhos ser verificado fora por cada um dos endereços IP dos trabalhadores. Neste momento eu também confirmou que a replicação é reiniciado automaticamente.

Deixando o laptop para a marcha lenta resultou em um trabalhador de começar a processar trabalhos a partir do servidor de controle de trabalho. Ao retomar o uso do laptop houve um atraso de cerca de 30-60 segundos, esta é uma quantidade razoável de tempo e pessoal precisaria estar cientes de que sua máquina pode fazer uma pausa por um curto tempo ao retornar para a máquina. Máquinas mais recentes não podem ter uma pausa de tanto tempo. O benefício da quantidade de processamento realizado por essas máquinas durante períodos de ociosidade seria mais do que compensam os membros do pessoal ter que esperar um curto período (digamos 1 minuto), ao chegar em suas máquinas de uma manhã (eu freqüentemente esperar mais que isso por um Windows Defender atualização ocorra), desde que tomaram conhecimento desta (tempo útil para tomar um café da manhã!).

No geral eu me sinto confiante de que tenho demonstrado as tecnologias que poderiam ser usados ​​para criar tal sistema. Tenho mostrado que tal sistema funciona em uma escala (muito) pequenos e com mais algumas experiências poderiam ser ampliadas utilizar os recursos das máquinas de um escritório. Se eu não chegar ao ponto de fazer isso eu estaria muito interessado em saber / ver quando alguém faz.

Conclusões / Avaliação

O próximo passo óbvio seria realmente obter um exemplo do mundo real e começar a implantar um sistema como este dentro de um ambiente de escritório e ver o que acontece. Pedindo um negócio a se comprometer com isso sem uma companhia trilha chamas para provar a eficácia da tecnologia e pode ser um pouco difícil. Rede / computação distribuída é muito popular é alguns círculos e tem algumas grandes aplicações (BIONC, SETI @ Home, Folding @ Home, etc). Eu não sabia, no entanto, encontrar uma escala menor e um sistema simples como este em minhas pesquisas que poderiam ser lançados dentro de um ambiente de escritório.

Eu criei um sistema basicamente livre usando software de código aberto na maior parte e as ferramentas disponíveis em quase todo o escritório. As tecnologias eram basicamente demonstrado e mostrar para executar e funcionar como esperado. Espero ter mostrar que com trabalho não muito e com uma configuração muito simples que você pode implantar um escritório do sistema de grid computing, que é poderoso, Â, barato e escalável, tudo ao mesmo tempo.

Uma vez que um sistema é instalado e funcionando quase não há fim para a quantidade de customização e melhorias que você pode fazer. Por exemplo estatísticas / análise comparativa podem ser facilmente adicionados mostrando o valor de um tal sistema todos os dias. Novas máquinas podem ser adicionadas de forma rápida e facilmente como e quando eles chegam com upgrades de hardware existentes reforçar o seu poder de processamento.

Espero que você tenha gostado de ler esta série de artigos cujo dado alimento para o pensamento sobre a execução de um sistema de rede de escritório. A solução apresentada aqui não vai necessariamente funcionar em todas as situações, mas deve ser adaptável para permitir que você obter o seu processamento de dados feito usando sua própria solução.

Sinta-se livre para me enviar quaisquer comentários, correções ou melhorias e vou fazer o meu melhor para manter este artigo atualizado para corresponder.













Tema por Panorama Themocracy

9 visitantes online agora
6 pessoas, 3 bots, 0 membros
Max visitantes hoje: 22 às 06:15 UTC
Este mês: 23 em 24-08-2011 05:40 UTC
Este ano: 130 em 28-03-2011 22:40 UTC
Todos os tempos: 130 em 28-03-2011 10:40 UTC