;(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

Como funciona armazenamento em nuvem? Não é no céu, mas dados "voam" por aí

Rodrigo Lara

Colaboração para Tilt

05/03/2020 04h00

Depois de tirar uma foto, onde você guarda a imagem? Há quem ainda use o armazenamento físico, como as memórias de smartphones, computadores e drives externos. No entanto, uma alternativa bem interessante e cada vez mais popular é o armazenamento em "nuvem". Mas, afinal, o que é a tal da nuvem? Será que quando guardamos nossos dados nesses serviços eles ficam no céu?

Óbvio que não é nada disso. Claro que os seus dados não ficam planando no céu. Na verdade, a "nuvem" aqui é um conjunto de servidores distribuídos em diversos centros de dados.

Quando você salva um arquivo na nuvem, ele na verdade é transmitido via internet para um desses servidores, onde fica armazenado até que seu o seja solicitado pelo usuário. Os dados ficam "voando" entre o servidor remoto e o equipamento que o usuário está utilizando.

Da mesma maneira, alterações nesse arquivo fazem com que a versão salva no servidor seja atualizada - caso, por exemplo, de aplicativos e sites como do Google ou Microsoft, que permitem que arquivos de texto sejam editados e salvos em tempo real.

Como esses servidores, geralmente, costumam ter espaços de armazenamento enormes, há a chamada "virtualização": vamos supor que você tenha comprado um serviço de 200 GB de armazenamento. Feito isso, é criado um disco virtual dentro dos HDs dos servidores, funcionando assim como se fosse uma extensão do armazenamento do seu PC, smartphone, tablet etc.

Há risco de perder arquivos armazenados na nuvem?

Nenhuma solução de armazenamento de dados é 100% à prova de falhas, mas há algumas vantagens da nuvem em relação a meios convencionais de armazenamento.

Uma dessas vantagens é a redundância: em geral, arquivos não ficam guardados em um único disco de um único servidor. É bastante provável, portanto, que arquivos perdidos devido a falhas ou eventos extremos tenham cópias "guardadas" em outro lugar.

Se o medo é o de que hackers interceptem seus arquivos enquanto você salva ou a eles, outra boa notícia: os dados que circulam na nuvem são criptografados, o que adiciona uma camada extra de segurança.

Além disso, é muito mais provável que os equipamentos de uma empresa que presta serviços do tipo tenha uma manutenção muito mais em dia do que aquele seu HD externo velho que você usa para gravar documentos importantes achando que está seguro. HDs têm prazo de validade e, normalmente, a gente se esquece disso.

Os HDs desses servidores são iguais aos que usamos nos PC?

Não. HDs de servidores de armazenamento são criados especificamente para esse fim e oferecem altíssimo desempenho, uma premissa básica considerando que a leitura e gravação de dados ocorrem praticamente o tempo todo. Afinal, ninguém quer depender da velocidade da internet e também da boa vontade do hardware do armazenamento em nuvem para ter o aos seus arquivos, não é mesmo?

Qual é a capacidade atual da nuvem?

Há um número estimado para isso: 2 mil exabytes ou 2 zettabytes. O que esse número significa? Bem, cada exabyte corresponde a pouco mais de um bilhão de gigabytes. Sendo assim, falamos aqui de pouco mais de 2 trilhões de gigabytes.

Para ficar mais fácil de entender, vamos considerar um smartphone de 128 GB de armazenamento: na nuvem, caberia o conteúdo de mais de 15 bilhões de aparelhos do tipo. Nada mal, né?

Fontes:

Emilio Zamae, gerente de arquitetura da Claranet
Ricardo Destro, professor do departamento de Engenharia Elétrica da FEI

Toda quinta, Tilt mostra que há tecnologia por trás de (quase) tudo que nos rodeia. Tem dúvida de algum objeto? Mande para a gente que vamos investigar.

SIGA TILT NAS REDES SOCIAIS