Como exatamente as atualizações automáticas funcionam?

26

Eu recebi um e-mail esta manhã dizendo que meu site Wordpress tinha sido atualizado automaticamente para a versão mais recente. Eu sabia sobre o recurso, mas eu sempre quis saber exatamente como funciona.

O PHP não é um processo de execução permanente: ele só é executado quando solicitado. Então, tanto quanto eu posso dizer, o Wordpress só pode se atualizar quando alguém carrega uma página da web. Mas o processo de atualização não é instantâneo, então, certamente, um usuário que visita o site teria um carregamento de página muito lento.

Existe algum truque diferente que eles usam para atualizações automáticas? Eu procurei por todo o lugar, mas não encontrei nenhuma explicação.

    
por DisgruntledGoat 27.01.2014 / 11:32
fonte

3 respostas

14
  

O PHP não é um processo de execução permanente: ele só é executado quando solicitado.   Então, tanto quanto eu posso dizer, o Wordpress só pode se atualizar quando alguém   carrega uma página da web. Mas o processo de atualização não é instantâneo, então   Certamente, um usuário que visita o site teria um carregamento de página muito lento.

     

Existe algum truque diferente que eles usam para atualizações automáticas? Eu tenho   procurou em todo o lugar, mas não encontrou nenhuma explicação.

O sistema que você está procurando aqui é chamado de "WP Cron". É um sistema de processo em segundo plano no WordPress que permite que os eventos ocorram fora do processamento normal. Eles ainda precisam de um gatilho para iniciá-los, mas não interferem nos carregamentos de página devido ao processo em segundo plano.

Então, sim, alguém deve carregar sua página. Desativado no arquivo default-filters.php, você encontrará esta linha de código:

add_action( 'init', 'wp_cron' );

Portanto, em cada carregamento de página, a função wp_cron é executada. Esta função está terminada em wp-includes / cron.php e o que ela faz é verificar os eventos planejados no banco de dados. Se houver algum processo que precise ser executado em segundo plano, ele chamará a função spawn_cron.

O Spawn cron possui dois métodos possíveis de operação, mas o primeiro e mais comum é chamar a função wp_remote_post para fazer uma conexão de volta a si mesma, na URL do wp-cron.php. Ao fazer este pedido HTTP extra, ele inicia outro processo PHP para fazer todo o trabalho real. A solicitação feita aqui é sem bloqueio, com um tempo limite de 0,01 segundos. Então, na verdade, não obtém nenhum resultado aqui. O objetivo da solicitação é simplesmente iniciar um novo processo em segundo plano. Depois disso, ele simplesmente retorna, portanto, o usuário que visualiza nunca tem atrasos.

O processo wp-cron.php é o que faz o trabalho real, a atualização e tudo mais. Muitos processos no WordPress são manipulados pelo sistema cron. Publicação de postagem programada, processamento de pings, verificações de atualização, tudo o que precisa acontecer fora do fluxo normal pode ser agendado e, em seguida, executado conforme a necessidade.

Mas sim, um hit normal no site deve acontecer com o início do processo. E não, o WordPress.org não entra em contato diretamente com o seu site para dar o pontapé inicial, seu site precisa receber algum tipo de tráfego para iniciá-lo. Qualquer forma de tráfego serve.

    
por Otto 21.11.2014 / 11:10
fonte
16

Na verdade, a atualização automática é enviada de wp.org . O processo de atualização ainda é executado em seu site, mas em segundo plano via wp-cron .

Quando uma nova atualização é lançada, os caras do WordPress começam a distribuir a atualização. O processo de atualização real é iniciado depois que seu site verificou wp.org para atualizações, uma atualização está teoricamente disponível e seu site é escolhido aleatoriamente para ser atualizado.

  

(Obrigado @otto por apontar meu texto errado :))

Como cada site verifica com wp.org para novas versões (geralmente duas vezes por dia usando wp-cron ), o rolloutserver sabe quantos sites precisam de atualização.

Em seguida, o lançamento começa, começando lentamente - 1 de 128 sites é atualizado automaticamente. Isso está sendo monitorado e, se a taxa de sucesso indicar que não há problemas com o lançamento, mais sites receberão a atualização automática (normalmente, a próxima etapa seria 1 de 64, continuando a aumentar) até que todas as atualizações automáticas sejam entregues.

Isso permite que os desenvolvedores interrompam o lançamento se algum problema ocorrer, mas a última atualização de 3.8 para 3.8.1 teve uma taxa de sucesso de 100%.

Os sites selecionados pelo 1 out of 128 são realmente aleatórios. Bem, não realmente, mas se você quer saber, funciona assim:

O URL do site que precisa de uma atualização é enviado usando MD5 . Usando apenas os três primeiros caracteres deste hash e convertendo-o para base10 , isso resulta em 4096 possibilidades. A atualização foi iniciada para sites com um número calculado entre 0 e 31 (4096/32 = 128).

Ok, acho que é bem aleatório, afinal;)

No meu caso, como eu executo muitos sites WordPress, as atualizações demoraram 1 dia - foi muito engraçado ver quando todas as páginas foram atualizadas.

Apenas no caso de você estar se perguntando: D

btw, aqui é um artigo em make.wordpress.org descrevendo o processo, como aconteceu.

    
por fischi 27.01.2014 / 12:25
fonte
1

Em termos muito amplos, quando um usuário visita o site wordpress verifica a expiração do cronômetro e se uma expiração é detectada outra solicitação é enviada ao servidor para "executar" as ações associadas ao evento expirado . É por isso que o usuário não sente nenhum atraso perceptível no carregamento da página, pois o servidor está executando a ação real (atualização, neste caso) em um processo separado.

Isso funciona, mas o tempo não é muito preciso. Quanto mais tráfego o seu site tiver, mais preciso será.

As pessoas que querem obter um melhor desempenho e um timing mais preciso podem bloquear o "processo" cron interno que o wordpress possui e usar o processo cron do sistema operacional para acionar a verificação de timers.

    
por Mark Kaplun 27.01.2014 / 11:55
fonte