;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Pane no Facebook foi grave e impediu até funcionários de trabalhar; entenda

Lucas Carvalho

De Tilt, em São Paulo

04/10/2021 16h29Atualizada em 04/10/2021 21h03

Os aplicativos WhatsApp, Facebook e Instagram ficaram fora do ar globalmente desde por volta de meio-dia (de Brasília) por sete horas. Ninguém conseguia enviar mensagens ou carregar novos posts. E, até agora, o Facebook, dono dos outros dois serviços, não explicou o motivo.

O que rolou?

Ainda não há uma explicação oficial, mas a principal suspeita é de que a culpa foi de uma falha no DNS —Domain Name System, ou Sistema de Nomes de Domínios. É um protocolo que relaciona o endereço "nominal" de um site ou aplicativo com o seu endereço real (número de IP, de Internet Protocol) nos bancos de dados da internet.

Funciona assim: quando você digita, por exemplo, uol-br.rsinforma.com, servidores DNS entram em operação e "traduzem" o endereço que você digitou para o IP 200.221.2.45 (relativo ao UOL) e permitem o o.

Quando ocorre uma falha em um desses servidores, o endereço IP fica fora de alcance.

Até mesmo os funcionários da empresa ficaram sem o às ferramentas internas usadas para configurar o sistema e corrigir o problema. É isso que pareceu prolongar a correção da falha nas empresas do Facebook —quando erros assim ocorrem, as empresas costumam voltar à configuração anterior, mas isso não parece ter sido possível de fazer rapidamente.

Sheera Frenkel, repórter do jornal norte-americano The New York Times, confirmou a situação caótica na empresa: "Acabei de falar ao telefone com alguém que trabalha para o FB que descreveu funcionários sem conseguir entrar nos prédios esta manhã para avaliar a extensão da pane porque seus crachás não funcionavam para abrir as portas".

Quedas não são incomuns nas redes sociais, mas é raro ver um blecaute com tantos aplicativos interconectados fora do ar simultaneamente.

"Estamos cientes de que algumas pessoas estão tendo problemas para ar nossos aplicativos e produtos. Estamos trabalhando para voltar ao normal o mais rápido possível e pedimos desculpas por qualquer inconveniente", limitou-se a dizer o Facebook, que caminhava nos últimos dias para um outro patamar de integração técnica entre os aplicativos da "família".

Brian Krebs, jornalista especialista em segurança digital, resumiu o cenário neste tweet:

"Confirmado: os registros DNS que informam aos sistemas como encontrar https://Facebook.com ou https://Instagram.com foram retirados esta manhã das tabelas de roteamento global. Você consegue se imaginar trabalhando no FB agora, quando seu email não funciona mais e todas as suas ferramentas internas baseadas no FB falham?"


Se é mesmo um problema de DNS, o que causou essa falha?

Ninguém sabe ainda. Pode ter sido uma atualização nos sistemas que causou um efeito inesperado. Há relatos em fóruns de especialistas em tecnologia que apontam que uma simples mudança mal calculada possa ter causado todo esse caos.

Dane Knecht, vice-presidente da empresa de servidores Cloudflare, disse em seu perfil no Twitter que a queda global do Facebook teria a ver com DNS e que "as rotas BGP" da empresa "foram retiradas da internet".

BGP significa Border Gateway Protocol (Protocolo de Portão de Fronteira, em tradução livre). Trata-se do sistema que decide por qual rota os seus dados vão trafegar até chegar ao destino escolhido.

É como se fosse o Waze: quando você digita uol-br.rsinforma.com na barra de endereços do navegador e aperta Enter (ou abre o WhatsApp no celular), o BGP é o protocolo que avalia os possíveis caminhos que você pode tomar para chegar ao servidor desejado.

Se o BGP sai do ar, como parece ser o caso do Facebook nesta segunda, a plataforma fica "sem direção" e não consegue mais encontrar o caminho entre o usuário e o serviço que ele quer ar.

Não pode ter sido um ataque hacker?

Pouco provável. Os servidores do Facebook são muito bem protegidos e, até agora, nenhum grupo hacker assumiu um ataque ou mostrou provas de algo parecido.

Que outros apps eu posso usar?

Estas são as principais opções alternativas de aplicativo de mensagem.

O maior concorrente do WhatsApp não poderia ficar de fora nessa lista. O Telegram possui algumas funções exclusivas, como compartilhamento de tela e vídeo-chamadas em grupo com transmissão, além dos seus famosos canais.

O Signal tem código aberto, ou seja, permite que o sistema de segurança seja testado por auditorias externas e independentes —algo elogiado por especialistas. Além disto, é totalmente criptografado. A empresa é uma organização sem fins lucrativos que não coleta nenhum dado de seu usuário. O funcionamento do app é mantido por doações.

Vejam mais opções aqui.

Estou com problemas no Telegram, Gmail, Nubank e vários apps... É o bug do milênio?

Não há indícios de que o mesmo problema que causou a queda do Facebook tenha afetado outros apps. O que pode acontecer é de mais pessoas usando plataformas alternativas de comunicação e causando alguma instabilidade ou lentidão.

Há o caso também de apps que dependem do com o Facebook para continuar —como o jogo "Pokémon Go"— que podem sentir algum impacto.