Categoria: Linux

Office Grid Computing utilização de ambientes virtuais - Parte 4

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

Introdução

Eu trabalho em uma empresa onde executar trabalhos de processamento batch muitos milhões de registros de dados de cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam em torno de cada dia 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 nossa máquina de processamento virtual e configurar o Windows para se tornarem máquinas de trabalhadores a tempo ocioso.

Executando o código mais recente

Inevitavelmente, depois de criar sua lógica de negócio dos trabalhadores vai mudar, os erros serão encontrados, mais eficiente código mais rápido serão produzidas deixando assim os seus trabalhadores se sentaram ao redor de processamento de dados usando o código antigo fedorento . Como então podemos garantir que estamos sempre usando a versão mais recente e de nossos scripts de processamento?

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 versão mais recente do código. Não é muito eficiente, mas ele vai fazer o trabalho. Vamos melhorar um pouco, como sobre a criação de um script com rsync e que cada vez em vez? Em alternativa Que tal colocar o nosso último script de processamento 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 (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
 em seguida,
     echo "O trabalho está processando atualmente, com saída
 mais
     echo "O trabalho não está sendo executado, começar agora"
     cd / caminho / para / de trabalho / cópia
     svn update
     yourJobProcessingScript.php php
 fi 

Agora podemos ter certeza de que a cada rodada estamos definitivamente executando o código mais recente. Estamos garantindo a este, atualizando nossa base de código cada vez que fazemos uma corrida e reduzindo o tráfego de rede, transferindo apenas as diferenças de ficheiros através de nossa rede.

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

Usando os dados mais recentes

Se o processamento do trabalho faz uso de fontes de dados, em seguida, em algum momento estes vão ser atualizados também. A menos que você chamar suas fontes de dados em uma base muito raros que você está indo para inundar a rede com tráfego assim que os trabalhadores começam a correr levando tudo a um impasse. Para a minha solução Eu decidi que gostaria de passar minhas fontes de dados ao redor com meus VMs.

Segure você está cavalos lá! E se os dados de minhas fontes são enormes? Bem, este é realmente um caso de a quantidade de dados que estamos falando? Pode ser mais rentável para instalar um disco rígido adicional unidade maior em cada máquina do que comprar um servidor de processamento adicional. Esta é uma questão de orçamento e até a empresa decidir. É talvez a que as suas fontes de dados são tão grandes que é apenas inviável manter essa quantidade de dados em suas máquinas de trabalho. Nesse caso, o que você faria? Bem, nós poderíamos olhar para chamar um servidor de dados locais, 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, só chamando os trabalhadores 20:00-06:00 a cada noite e / ou fonte de dados pedidos de estrangulamento.

Passando permite dizer que o nosso volume de dados 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 acho que executando o seu mais recente fonte de dados no seu servidor de processamento de emprego e como fazer essa configuração como um mestre na replicação (com um registo de bin longa e agradável) pode ser o caminho a seguir:

replicação Ao definir cada um dos seus trabalhadores como um escravo para o trabalho de atualizações do servidor de controle para as fontes de dados vai pingar muito bem em seu trabalho sem um grande aumento na atividade da rede (que é menos que você executar uma atualização de dados enorme e todos os seus trabalhadores chute no ao mesmo tempo). Isto tem vantagens sobre o rsync em que você não iria ficar de 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, 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 em 20 minutos eu tinha o meu trabalho inital replicar o trabalho conjunto de dados de controle servidores. Para cada trabalhador adicional as configurações de replicação e processo de trabalho, cada vez que a máquina virtual foi copiado.

Resumo

Nesta seção do artigo, vimos como é fácil e indolor, é manter o seu código de processamento até à data por rsync usinga ou subverion (SVN) para fazer o trabalho e reduzir o tráfego de rede na mesma time. Também discutimos como para manter suas informações de fonte de dados up-to-date, permitindo-lhe escorrem para cada um dos 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. Não será, obviamente, 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.

Da 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.

Office Grid Computing utilização de ambientes virtuais - Parte 3

Por Watkin Steven Lloyd , sexta-feira 04 de dezembro 2009 23:37

Introdução

Eu trabalho em uma empresa onde executar trabalhos de processamento batch muitos milhões de registros de dados de cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam em torno de cada dia 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 2 nós olhamos os trabalhos serão executados num servidor, e quantos empregos devem ser configurados para atingir maior quantidade de processamento, enquanto que cada trabalho é processado sem falhar.

Configurar o trabalhador - ou servidor LIMP

O passo seguinte no processo é a criação de seus trabalhadores virtuais. Por isso eu vou usar uma instalação do CentOS usando o VirtualBox. Eu estou indo para instalar mySQL e PHP no servidor, também conhecido como um coxo (Li nux, m ySQL, P HP) Servera (Talvez eu tenha feito esse nome).

  • Instalar VirtualBox em sua máquina Windows (sigam o link)
  • Faça o download e instalar o CentOS (versão atual 5.3) dentro de uma máquina virtual criada

Não adianta eu ir para esse provavelmente há 1,000 's de tutoriais por aí (ok, aqui vai um: Criando e Managing máquina virtual no VirtualBox CentOS ). O ponto importante a nota que eu suponho que é que eu chamei meu GridMachine máquina virtual.

No que diz respeito as minhas escolhas do cliente e virtualização do sistema operacional lá é nenhuma razão convincente para cada grande escolha. VirtualBox é algo que eu uso na minha máquina em casa e é apoiada pelos três principais sistemas operacionais. Eu escolhi o CentOS como um bom sistema operacional estável e eu uso no meu próprio servidor web. Sou um grande crente nas ferramentas certas para o trabalho (embora eu estou aplicando "utilização mais rápida e fácil para você" mentalidade aqui), então se sistema operacional OS X é executado o código mais rápido e mais eficiente utilização que, em vez:)

É importante certificar-se que a VM usa DHCP, caso contrário, para cada nova máquina virtual que precisa ser configurado separadamente, que é algo que não want.By usando DHCP não precisamos configurar definições de rede para as máquinas individualmente trabalhador, DHCP mão fora IPs para você. Portanto, você pode copiar a máquina virtual sobre o escritório sem se preocupar com definição de cada um para cima (isto melhora a escalabilidade e reduz a administração do trabalhador).

O processo que você deve ter por objectivo seria obter uma nova máquina física, instalar o VirtualBox, e depois praticamente implantar a imagem virtual, sem muito mais. Pode ser sábio para instalação todos os seus trabalhadores numa sub-rede diferente para que possa pelo menos ver quantas máquinas estão funcionando. Você também precisa configurar suas máquinas em um arrendamento a longo ou ilimitado DHCP.

Como executar trabalhos sobre o trabalhador

Esta é uma área interessante e existem vários métodos válidos para os trabalhos de processamento do trabalhador. Aqui vou discutir os dois mais óbvios:

  • Perpetuamente executar o script: Um script, seja ele um shell script ou um script PHP é executado uma vez sobre o trabalhador e é executado como parte de um loop infinito. Eu descontado esse método como uma falha do roteiro e, potencialmente, os trabalhadores deixarão de funcionar sem algum tipo de intervenção.
  • Cron execução do script com base em: a cada X minutos o cron daemon inicia uma chamada para o script para fazer as coisas andarem. Sem alguns testes este poderia conduzir a muitas muitas cópias de seu roteiro de trabalho em execução.

Minha decisão foi de ir com o cron que começa um script a cada 10 minutes. meu script realiza as seguintes tarefas:

  1. Faça uma lista de processos e grep isso para 'php'. Se não for encontrado, em seguida continuar.
  2. Chamar seu código de trabalho, no meu caso isso seria algo baseado em PHP
  3. script Trabalhador completa sua execução
  4. Pronto para ir novamente na próxima chamada adequado

Meu script bash é algo como o seguinte:

  #! / Bin / sh
 se ps ax | grep grep-v |> php grep / dev / null
 em seguida,
     echo "O trabalho está processando atualmente, com saída
 mais
     echo "O trabalho não está sendo executado, começar agora"
     yourJobProcessingScript.php php
 fi 

Nota: o de eco são quase completamente inútil, mas pode ajudar a próxima pessoa que vem para tentar editá-los.

Isso conclui a configuração da máquina virtual trabalhador, rápido, simples e fácil de copiar a cada nova peça de hardware que é recebido. A "esperteza" do sistema de rede realmente não é visualizado no sistema operacional, é tudo a ver com o código criado para o emprego de processo, a configuração do trabalho, e em garantir que o trabalho é executado quando (ou seja, apropriada quando a máquina está ociosa ).

Configurando o Windows para inicializar Trabalhadores

A primeira tarefa é elaborar o comando necessário para executar a máquina virtual a partir da linha de comando do Windows. Se você instalou o VirtualBox no local padrão e você nomeou seu GridMachine trabalhador, então o comando necessário para carregar o seu trabalho é:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxManage.exe" GridMachine startvm 

No entanto, para executar o script em um estado "sem cabeça", temos de usar:

  "C: \ Program Files \ Sun \ VirtualBox \ VBoxHeadless.exe" GridMachine startvm - VRDP = off 

Isto irá iniciar a máquina virtual sem a interface gráfica e permitir que ele salve o estado graciosamente. O segundo argumento desliga RDP por isso não entra em conflito com o Windows RDP, ou dar-lhe uma mensagem sobre a escuta na porta 3389. O nome da máquina virtual é sensível caso!

Em seguida, precisaremos definir janelas até começar a nossa VM trabalhador quando a máquina estiver ociosa. Para fazer isso (no Windows XP) você precisa ir em Iniciar -> Programas -> Acessórios -> Ferramentas do Sistema -> Tarefas agendadas conforme abaixo:

tarefas agendadas

Em seguida clique em "Adicionar tarefa agendada 'seguido por ver a adicionar um programa personalizado. Navegue até o script VBoxManage e clique em OK. Programe a sua tarefa para qualquer uma das opções (vamos mudar isso em um minuto) e continuar. Depois de pular as janelas próxima tela irá pedir que você deseja executar essa tarefa, eu sugiro que seja Administrador, ou criar um novo usuário privilegiado. Lembre-se que nós não queremos interferir com a conta pessoal padrão na máquina em qualquer ponto. Clique ao lado e mostrar opções avançadas de seleção para esta tarefa.

Para o fim do textbox executar adicionar 'startvm' GridMachine string nosso e garantir que apenas funcionam quando conectado fica desmarcado. Visite a tarefa próxima programação e alterar o calendário drop down a opção "quando ocioso", escolha a quantidade de tempo que você gostaria que a máquina ficar ociosa antes de passar para a próxima guia.

Finalmente, desmarque a opção que afirma parar a tarefa se ela foi correndo X quantidade de tempo, mas não marque a opção de parar a tarefa se a máquina não está mais ociosa.

cronograma

É isso aí, em seguida, para a configuração do host windows!

Resumo

Nesta parte temos um conjunto de uma máquina virtual para atuar como um trabalhador, bem como a maneira pela qual nós chamamos e executar nossos scripts de processamento de trabalho (para mim um script PHP). A partir daqui, veremos como configurar o nosso cópias do Windows para iniciar a máquina virtual no modo headless quando o computador fica ocioso, e salvar seu estado quando o usuário retomar a utilização da máquina. Esperamos que neste momento você está vendo como é simples criar um tal sistema e estão ansiosos para começar algumas experiências vão-se!

Da próxima vez

Na parte 4 , vamos estar a olhar para utilizar ferramentas para assegurar que você está rodando a versão mais recente do código e fontes de dados para que os resultados obtidos são sempre atualizados com as últimas informações de negócios e da lógica.

Office Grid Computing utilização de ambientes virtuais - Parte 1

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

Introdução

Eu trabalho em uma empresa onde executar trabalhos de processamento batch muitos milhões de registros de dados de cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam em torno de cada dia 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 fornecemos será muito vagamente baseado no tipo de tratamento que nós precisamos para alcançar, isto pode não ser verdade o artigo na íntegra 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 de execução. O tratamento que as máquinas do escritório não deve interferir com o pessoal usando esses aparelhos, devem não necessitam de manutenção na máquina, e ser facilmente destacáveis ​​para novas máquinas que estejam disponíveis. Além disso, novas máquinas virtuais não requer qualquer configuração adicional que esta reduz a escalabilidade ea facilidade com que o sistema de rede pode ser prorrogado.

Por que implantar um Grid Computing Office?

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

  • Você não vai entregar os dados certos 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, os dados que saem do país), possivelmente por razões jurídicas, por exemplo, registros do SNS.
  • 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 a 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, as 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 Office

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 grandes beefy 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 destas máquinas é de 10% tão potente como o seu processamento robusto sever. (Todos os resultados aqui são arredondados para aumentar o desempenho subestimar).

Assim, uma máquina * 10% * de energia 2 / 3 = 0,067 ou seja, o tempo de processamento de desktop em um tempo ocioso foi possível processar a 6 total de empregos por dia.

Se agora você escala isto leva 15 desktops ocioso para processar tantos postos de trabalho por dia que o servidor principal de processamento faz.

Assim, em nosso escritório fingir de 50 máquinas, pudemos ampliar o poder de processamento do servidor a partir de 1 até 4 servidores de processamento completo, ou então pode ser o processamento de 400 empregos por dia em vez de 100.

Repare, por nenhum investimento em novo hardware da sua empresa acaba de ampliar sua capacidade de processamento em lote 4 vezes! Potencialmente, você vai aumentar o seu consumo de energia, mas a maioria dos ambientes de escritório que eu tenho de máquinas são geralmente deixadas 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, ao melhorar o poder de suas máquinas de escritório de sua grade de escritório torna-se mais poderosa automaticamente.

Tecnologias

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

  • máquinas para escritório Idle (no meu caso um laptop Windows XP reposição de idade)
  • VirtualBox (ou outro software de virtualização de cliente)
  • Uma máquina virtual com PHP, MySQL rodando running cortar uma OS, eu estou chamando esses LIMP meus servidores:)
  • Trabalho para executar
  • Trabalho de servidor (pode ser uma outra máquina virtual em algum lugar)

Empregos típica

Os tipos de empregos que este sistema é projetado para ser executado é o seguinte:

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

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

Grid soluções não são apenas vantagens para o processamento de 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 quadros para a execução de redes de computação, e estes valem bem a pena olhar em.

O que vamos conseguir?

Ao final destes artigos, espero mostrar que a implantação de uma rede de escritório não precisam de ser extremamente cara ou demorada. Eu estou indo para discutir:

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

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

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

Da próxima vez

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

Office Grid Computing utilização de ambientes virtuais - Parte 2

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

Introdução

Eu trabalho em uma empresa onde executar trabalhos de processamento batch muitos milhões de registros de dados de cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam em torno de cada dia 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 as tecnologias que vai usar, 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 forma para administrá-los. Seu sistema de controle do trabalho (em seu servidor de trabalho) precisa ser muito bem pensada antes mesmo de tentar executar uma rede de escritório. Portanto, primeiramente, quais são as tarefas de um sistema de controle do trabalho:

  • Distribua tarefas, a pedido dos trabalhadores
  • Diga trabalhadores que tipo de trabalhos para serem executados
  • empregos Track
  • Certifique-se que os trabalhos 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 empregos que a empresa vê o valor em uma solução de rede. Por exemplo, os trabalhos podem ganhar prioridades, mais de um tipo de trabalho podem existir (ou seja, várias bases de código), eventualmente você pode até mesmo executar várias máquinas de trabalho diferentes que são otimizados para cada tipo de trabalho (embora isso não se afastar do "trabalhador genérico 'idéia). Sempre tento pensar no futuro quando os sistemas em desenvolvimento, uma visão de curto prazo pode levar à frustração de longo prazo e tempo de desenvolvimento aumentou.

Trabalho de servidor

Nós vamos precisar de um lugar para o nosso trabalho de controle, este deve ser o único sistema em sua rede que tem um localizador de recursos fixos, seja um endereço IP, nome do host da 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 do trabalho encontrar os trabalhadores).

O servidor de trabalho em si não tem realmente uma tarefa complicada (em um sistema básico de qualquer maneira), ele precisa armazenar uma lista de postos de trabalho, distribuir tarefas, receber os resultados, e posteriormente guardá-las 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, então, que o seu servidor de emprego não poderia ser uma máquina virtual rodando dentro do seu servidor de processamento principal, desde que não drena muitos recursos dele. O servidor de trabalho porém não necessitam de alta disponibilidade, se ele vai para baixo em uma noite de sexta-feira você vai perder toda uma semana de tratamento, pode custar-lhe um par de semanas no valor de tempo de processamento (em comparação 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 por que eu estou chamando uma de Limp meus servidores (que é Li nux, ySql m, P HP). O código em execução trabalhadores the vai realmente trabalhar para fora o trabalho que ele pode executar, interagindo com bancos de dados com o trabalho do sistema de controle. Posteriormente, poderíamos criar um web service 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 os trabalhos. Estes serão «empregos», «jobRecords`, e `jobResults».

tabela de empregos Aqui eu estou usando o SQL Buddy um pouco grande alternativa ao phpMyAdmin só porque é mais fácil de instalar no CentOS (para os outros, ver: 10 grandes alternativas ao phpMyAdmin )

Esta tabela é composta de 5 campos simples,

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

É fácil como esse quadro poderia ser estendido com alguns campos suplementares para permitir estatísticas de acompanhamento, uma coluna horário de término para ver quanto tempo o trabalho tomou, um contador para ver quantos trabalhadores pegou o trabalho (obviamente isso precisa tendem a 1), a prioridade dos trabalhos, a lista pode ir sobre e sobre. Em cenários mais complexa tarefa seria possível especificar a quantidade de memória que o trabalhador terá acesso ao (e, portanto, usar apenas os trabalhadores mais adequados), ou mesmo que tipo de trabalho seria necessário.

Permite adicionar um exemplo de alguns trabalhos:

empregos exemplo

A tabela a seguir novamente é bem simples de entender, estes são dados que o nosso trabalho. Eles estão ligados à mesa de trabalho por meio de uma coluna `jobs_id». A composição desta tabela depende muito dos dados que você precisa fornecer a seus trabalhadores, vamos fazer um exemplo muito simples, onde temos quatro colunas:

  • gravar o id: identificação do
  • nome: é o nome da pessoa
  • endereço: o endereço Pessoa
  • jobs_id: O trabalho de identificação de que este registro é ligada à

A tabela a terceira e última consiste em uma tabela de resultados, tem quase a mesma coisa compõem a nossa tabela de registros, e com a adição de algumas colunas poderiam ser parte da tabela de registros:

  • mesa de trabalho job_record_id: Link para o resultado do
  • Resultado: os dados do resultado

... E isso é tudo que você precisa para o controle de trabalho! (Embora a um nível muito básico) No meu caso estou apontou para outra mesa onde os meus dados para processar foi localizado, mas isso pode apenas como facilmente sido um arquivo, os parâmetros para executar o código de simulação, o nome dele.

Selecionando um emprego

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

  1. Pegue todos os trabalhos que não são marcadas como concluídas, mas do nosso trabalhador e redefini-las (__ME__ substituir com um identificador, mais fácil seria o endereço IP):
      UPDATE `jobs 'SET status` = 0 WHERE status = 1 `E` `= started_by __ME__; 
  2. Usando nosso critério de seleção de emprego, selecione uma tarefa e dizer ao sistema de controle que este trabalhador está lidando com isso:
      UPDATE `jobs 'SET status = 1`, `` = started_by __ME__, started_at `` = NOW () WHERE status `= 0 OR
     (`Status` = 1 AND `started_at`> DATE_SUB (NOW (), INTERVAL X HORA)) ORDER BY `id` ASC; 

    Ao pegar os trabalhos que não retornou 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 de si:
      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 a tarefa como concluída. Lembre-se que os trabalhos podem suspender / retomar a qualquer momento, permitir alguma robustez em seu script. Pode ser que a tarefa suspende a meio de atualizar o sistema de controle de trabalho, para verificar o número de registros em um trabalho eo número de resultados salvos de volta para o sistema de controle de trabalho seria uma medida acertada.

Além disso, enquanto este demonstra como os trabalhos podem ser selecionados e gerenciados a partir de um quadro de consulta SQL que você deve realmente ser abstraindo o seu controle sobre o 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.

Job Configuration

O próximo aspecto a considerar é a dimensão do trabalho e da 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. Pegue um par of cenários:

  1. Jobs ter um dia cada um para executar: Isso significa que os trabalhadores necessitam de 15 dias para processar cada trabalho (lembre-se de 10% da energia para 2/3rds do tempo). Este não é claramente uma configuração inteligente, o tamanho do trabalho é muito grande! Levaria pelo menos o dobro do tempo para conseguir um emprego processados ​​caso o trabalhador vá 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é ao 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. Empregos tomar um minuto para executar: Isso significa que os trabalhadores levam cerca de 15 minutos para executar cada trabalho. Embora isto possa parecer inicialmente ideal, você ganha o processamento 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 configurar o seu ratio tempo de processamento está a ir direito para baixo, perdendo assim a eficiência do sistema. Sua rede vai ser constantemente fluindo informações sobre o trabalho aos trabalhadores vários funcionários que estão frustrando dong seu dia-a-dia. Você também vai colocar mais pressão sobre o seu trabalho como servidor de processamento tem de prato 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 enorme parte de trás do trabalho incompleto enquanto trabalhos maiores de continuação do processo poderia alegremente inconscientes de que o servidor estava passando por dificuldades de emprego.

Na realidade não haverá uma configuração ideal para a sua configuração de rede, depende muito dos recursos disponíveis, tipos de trabalho, as exigências da função tempo de resposta, capacidade de rede, e assim por diante. No entanto, algumas orientações seriam:

  • trabalhos em tamanho de modo que cada trabalhador pode passar por pelo menos 3-4 postos de trabalho em um período de 15 horas (o mais longo período de tempo provável idle)
  • Jogar com a dimensão do trabalho a fim de que o tempo de configuração torna-se bastante insignificante quando comparado com o tempo de processamento (tendo em conta o ponto anterior).
  • Se um trabalho não for concluído em dobro a quantidade de tempo (talvez menos), você espera que ele completa ela assumir que AWOL seu passado e começar a processá-lo com outro trabalhador. Isto significa que você pode ter que esperar até três vezes o tamanho normal de um trabalho para a conclusão (possivelmente mais, se o trabalho subseqüente falha). Você pode querer reduzir este tempo, mas tome cuidado para não reduzi-lo muito como você pode começar a duplicação de tarefas de processamento em uma base regular.
  • Trabalhos devem ser independentes dos requisitos de fora, tanto quanto possível. O servidor de emprego, por exemplo, só deve ser contatado no início e no final de cada trabalho.
  • Não sature sua rede, 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 a escala do grid.
  • Certifique-se de trabalhos podem ser executados em seus trabalhadores. Se os trabalhos de tornar-se demasiado espaço de memória trabalhos intensivos ou intensivos de disco começará a abortar ea única coisa que você vai notar uma queda no número de trabalhos processados, sem motivo real.

Entregarem os resultados de um trabalho

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 apresentados garantir que o número de resultados corresponde ao número de registros dentro do trabalho.

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

Resumo

Neste sectiona nós olhamos o que é um servidor de controle de trabalho precisa de 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 nosso sistema de grade de escritório. Para finalizar, um parágrafo ou dois sobre a apresentação dos 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 são concluídas
  • Ao abstrair o trabalho de selecionar / submissão resultados podemos mudar a tecnologia do controle de servidor sem grandes problemas
  • Configure o seu trabalho para garantir que eles sejam executados com rapidez e eficiência, sem colocar demasiada pressão sobre a infra-estrutura de rede, e sem duplicar tarefas de processamento em uma base regular.
  • Certifique-se de construir a tolerância a falhas e checking erro em suas rotinas, os trabalhadores podem suspender e retomar o inconveniente e na maioria das vezes. Lembre-se de verificar se os resultados já foram apresentados por outro trabalhador.

Da próxima vez

Na parte 3 , vamos criar o nosso processamento de máquina virtual e configurar o Windows para tornar as nossas máquinas de trabalhadores a tempo ocioso.

Office Grid Computing utilização de ambientes virtuais - Parte 5

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

Introdução

Eu trabalho em uma empresa onde executar trabalhos de processamento batch muitos milhões de registros de dados de cada dia e eu tenho pensado recentemente sobre todas as máquinas que se sentam em torno de cada dia 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 4 olhamos para usar ferramentas para garantir que estamos executando a versão mais recente do código e fontes de dados para que os resultados obtidos são sempre atualizados com as últimas informações de negócios e da lógica.

Pré-Implantação

Antes de implantar o seu sistema de rede, se há uma coisa que você faz e uma coisa só que é referência do sistema atual! Não importa o que você diz sobre o quanto os colegas de trabalho extra o sistema vai fazer menos que você tenha números para isto as suas garantias não são nada. Assim,

  • quantos registros você pode processo atualmente? Por dia? Por hora?
  • Quanto tempo faz exame tipicamente de girar ao redor de um emprego?
  • Quanto mais capacidade você tem?

Há também questões adicionais:

  • Se o servidor de processamento (ou um de seus servidores de processamento) vai para baixo como isso afetará a sua capacidade, você vai estar aleijado?
  • Quais as vantagens que você espera / espera obter de um sistema de rede?
  • São máquinas de seu escritório capaz de executar os trabalhos?
  • É o seu (ou pode ser convertido empregos) para trabalhar neste estilo de correr?

O último ponto importante é levar o seu tempo em qualquer grande mudança como esta. Atualize o seu código de processamento para o trabalho usando a nova metodologia, referencial novamente. Possivelmente configurar o servidor de processamento para executar uma máquina virtual, afinal o seu servidor de processamento será apenas um outro trabalhador (apenas uma muito poderosa relativamente). Permitir que o novo processo para resolver.

Implantação

Minha sugestão seria a de pop no fim de semana um escritório de executar todas as instalações e configuração. Faça isso logo antes do feriado de uma quinzena e deixar que outros pobre homem para lidar com as consequências ... talvez não ...

Implantação de um sistema como este precisa ser lenta. Apesar de ser relativamente simples de configurar este sistema irá afectar a sua infra-estrutura de escritório inteiro (bem o digital). Em primeiro lugar, lançar um par de máquinas ao mesmo tempo, monitorar o tráfego da rede, como os anfitriões trabalhador executar em uma base dia-a-dia. Você pode precisar alterar sua configuração de trabalho em resposta às suas descobertas.

Uma vez que o sistema tenha resolvido com algumas máquinas (digamos 10% de todas as máquinas de escritório, ou seja, 5) manter o acompanhamento do tráfego de rede e host da máquina benchmark performance. Avançar novamente, você agora deve estar processando os trabalhos de 33% a mais do que sua referência primeira. Verifique isto é assim, ou que você é, pelo menos neste estádio. Se não, investigar o que está acontecendo antes de prosseguir. Repita este ciclo até que felizmente temos todas as máquinas de escritório sem matar o desempenho da máquina individual ou ranger de rede a um impasse.

Em todos os momentos manter benchmarking, mesmo depois de todas as implementações são feitas. Confira como atualizações novo código afeta a velocidade de seu sistema, verifique todos os trabalhadores e de informação em tarefas de processamento. Aos poucos (muito lentamente) incrementar a sua configuração de trabalho para obter o melhor de seus trabalhadores e de rede.

Pare!

E se você quiser parar o seu trabalho seja executado em algum momento? Estão todos lá fora, correndo, regeneração, e tentar o seu melhor para tratar os dados como insetos famintos. A resposta pode parecer óbvia, mas o que vale acrescentar apenas no caso de seu prédio. Basta editar o seu script de transformação com uma saída (0) or die () ou alguma outra indicação para matar o seu trabalho de processamento. Uma razão importante pela qual a gente sempre tenta atualizar para o último script de processamento antes de qualquer corrida!

Demonstração do Sistema

Para escrever este conjunto de artigos curtos, criei uma rede 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 conjunto com o tráfego e nem tive acesso a um PC comum 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 regular configurado como um servidor de controle de trabalho. Por isso eu tinha instalado o MySQL server instalado configurado como um mestre na replicação, PHP , Â e SVN ligadas através de apache (para acesso via trabalhador VM).

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

A máquina virtual foi criada com o PHP, subversão e mySQL. Eu confirmei um ramo chamado "trabalhador" do meu trabalho de servidores de repositório e controle a certeza que pode ser actualizado usando 'svn update'. Seguinte configuração que eu 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 e do trabalho do cron.

Meu script de processamento, basicamente, deu ao longo das linhas do presente (coisa muito simples):

  • Leia no campo de nome
  • Contado o número de nomes similares em uma tabela da fonte de dados sobre a VM
  • Contado o número de nomes como anteriormente, mas dividindo o nome por espaços (isto é, nome próprio, apelido do meio)
  • Repetido este processo mil vezes

Cada trabalho durou aproximadamente 20 minutos para ser executado. Em um ponto eu abri várias cópias do VM trabalhador no laptop janelas e observava os trabalhos podem ser verificados pelos cada um dos endereços IP do trabalhador. Nesse ponto, eu também confirmou que a replicação é reiniciado automaticamente.

Deixando o laptop para a marcha lenta resultou em um trabalhador começa a processar os 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 que precisa estar ciente de que sua máquina pode fazer uma pausa por um curto período 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 em períodos ociosos que mais que compensam os membros do pessoal ter de esperar um curto período de tempo (digamos, 1 minuto), ao chegar em suas máquinas de manhã (eu freqüentemente esperar mais que isso para um Windows Defender atualização para o lugar), desde que tomaram conhecimento deste tempo (útil para pegar um café da manhã!).

No geral eu me sinto confiante de que tenho demonstrado nas tecnologias que podem ser usados ​​para criar tal sistema. Eu tenho mostrado que esse sistema funciona em uma escala (muito) pequeno e com pouco mais de experimentação pode ser ampliada 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 da Avaliação

O próximo passo óbvio seria começar realmente 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. Pedir uma empresa se comprometer com esta empresa sem uma trilha de chamas para provar a eficácia da tecnologia e pode ser um pouco difícil. Grade / A computação distribuída é muito popular é alguns círculos, e tem algumas grandes aplicações (BIONC, o 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 desenvolvidas dentro de um ambiente de escritório.

Eu criei um sistema basicamente livres usando software de código aberto e principalmente 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 muito trabalho e não com uma configuração muito simples, você pode implantar um escritório do sistema de grid computing, que é poderoso, barato, um e escalável, tudo ao mesmo tempo.

Uma vez que o sistema está funcionando, não há quase nenhuma final com a quantidade de personalização e melhorias que você pode fazer. Por exemplo, estatísticas / benchmarking 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 as atualizações de hardware existente reforçar seu poder de processamento.

Espero que tenham 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 necessariamente funcionará em todas as situações, mas deve ser adaptável para permitir que você obtenha o seu processamento de dados feito com sua própria solução.

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

[Aviso] pid criança sair XXXX Falha de segmentação do sinal (11)

Por Watkin Steven Lloyd , domingo 11 de outubro 2009 06:09

Se você tiver atualizado recentemente PHP ou Apache talvez você esbarra contra a emissão de seu servidor web retornar páginas em branco, e lançando as mensagens de erro em seus registros com nenhuma idéia porque, aqui está uma maneira possível para consertá-lo ...

Eu tive esse problema algumas vezes recentemente após o upgrade do Apache ou PHP em uma máquina virtual. A primeira vez que percebi o erro eu simplesmente revertido para um backup das minhas VM mas na segunda vez eu percebi que teria que analisar a questão.

A primeira vez que notei o problema algumas das minhas páginas web eram servidas como arquivos em branco, enquanto os outros trabalhavam absolutamente bem. Após algumas pesquisas observei que o Apache foi escrevendo para / var / log / http / error_log com a seguinte mensagem repeatidly:

[Aviso] pid criança sair XXXX Falha de segmentação do sinal (11)

Não há de ir por colocar on-line, ea maioria das páginas sobre o trilho para o nada. Dito isto, eu reduzimos o problema a PHP falhando ao tentar desnecessários bibliotecas dinâmicas.

Olhando para o meu php.ini (/ etc / php.ini) eu comentei todas as bibliotecas dinâmicas carregadas planejando comentando-os de volta, conforme necessário. Os dois eu tive que tirar de onde pdo.so e mysql . assim.

Uma vez que estas foram retiradas todas as minhas páginas da Web eram servidas bem, assim como antes da atualização do PHP / Apache.

Wireless em Acer 5002 WLMi em Linux (Fedora 11)

Por Watkin Steven Lloyd , sábado 11 de julho de 2009 09:48

Como eu passei mais algumas horas de hoje sem acesso à internet eu achei melhor começar este escrito, para que da próxima vez eu mexer meu laptop até a informação é fácil de corrigir.

Basicamente, para obter os drivers wireless que trabalham para um Acer 5002 WLMi você vai precisar usar fwcutter b43. As instruções podem ser encontradas aqui: Linux Wireless B43 .

Fácil uma vez que a informação está localizada.













Panorama Tema por Themocracy

6 visitantes online agora
6 pessoas, 0 bots, 0 membros
Max visitantes hoje: 26 às 00:46 UTC
Este mês: 26 em 2011/07/05 12:35 UTC
Este ano: 130 em 28-03-2011 22:40 UTC
Todos os tempos: 130 em 28-03-2011 10:40 UTC