O Amazon S3 construiu um nível de durabilidade, disponibilidade e escalabilidade incomparável.
Ele é construído para armazenar e recuperar qualquer quantidade de dados, com disponibilidade incomparável, e construído do zero para fornecer 99,999999999% (11 noves) de durabilidade.
Os recursos exclusivos incluem o armazenamento de dados do cliente em data centers independentes em três zonas de disponibilidade em uma única região da AWS e a replicação automática de dados entre quaisquer regiões, independentemente da classe de armazenamento.
- Esses recursos tornam o S3 o serviço perfeito para hospedar nosso data lake
Existem muitos lugares de onde os dados podem vir. Predominantemente, eles se enquadram em uma de quatro categorias: bancos de dados, fluxos, logs e arquivos.
Destes, os bancos de dados são os mais predominantes. Normalmente consistem em seus sistemas transacionais upstream principais que são o armazenamento de dados principal para seus aplicativos. Eles assumem sabores relacionais e não relacionais e existem várias técnicas para extrair dados deles.
Streams são sequências abertas de dados de série temporal, como dados de clickstream de um site ou dispositivos IoT, geralmente publicados em uma API que hospedamos.
Os logs são gerados por aplicativos, serviços e sistemas operacionais. O Data Lake é um ótimo lugar para armazenar tudo isso para análise centralizada.
Os arquivos vêm de sistemas de arquivos auto-hospedados ou de feeds de dados de terceiros via FTP ou API.
Vamos falar sobre como podemos extrair dados de cada uma dessas fontes de dados upstream e colocá-los em nosso Data Lake.
A API S3 padrão suporta uploads de parte única e de várias partes. Parte única consiste em um único fluxo de rede que transfere todo o arquivo e oferece suporte a arquivos de até 5 GB. Em muitos casos, será melhor aproveitar os uploads de várias partes, o que irá dividir seu arquivo em partes menores, transferi-los em paralelo e, em seguida, recombinar após todas as partes terem sido recebidas pelo serviço. Uploads de várias partes podem, portanto, suportar arquivos de até 5 TB. Ambas as operações possuem uma API muito fácil de usar.
É importante garantir a limpeza após todas as operações com várias partes. Quaisquer peças carregadas durante uma transferência abandonada ainda consumirão espaço e, portanto, serão cobradas de acordo com as taxas regulares do S3. Felizmente, você pode criar uma Política de Ciclo de Vida S3 que visa uploads de várias partes abandonados e os exclui se não forem concluídos em um determinado número de dias.
Embora o upload de arquivos diretamente pela Internet possa ser suficiente para muitos casos, você também pode otimizar a rota de rede que seus arquivos seguem ativando o S3 Transfer Acceleration. Em vez de fazer com que seus clientes resolvam seus endpoints de upload diretamente para a região da AWS, você pode fazer com que eles resolvam para um dos muitos locais de borda da AWS. Isso fornecerá automaticamente o local com a menor latência para o seu cliente na rede privada AWS e usará o roteamento otimizado desse ponto para a região.
S3 Batch Operations é um recurso de gerenciamento de dados do Amazon S3 que permite gerenciar bilhões de objetos em escala com apenas alguns cliques no Amazon S3 Management Console ou uma única solicitação de API.
Você pode fazer alterações nos metadados e propriedades do objeto ou executar outras tarefas de gerenciamento de armazenamento, como copiar objetos entre baldes, substituir conjuntos de tags de objetos, modificar controles de acesso e restaurar objetos arquivados do S3 Glacier - em vez de levar meses para desenvolver aplicativos personalizados para executar essas tarefas.
https://aws.amazon.com/s3/s3batchoperations-videos/
Bola de neve:
Migração na nuvem - se você tiver grandes quantidades de dados para migrar para a AWS, o Snowball costuma ser muito mais rápido e econômico do que transferir esses dados pela Internet.
Recuperação de desastres - no caso de você precisar recuperar rapidamente uma grande quantidade de dados armazenados no Amazon S3, os dispositivos Snowball podem ajudar a recuperar os dados muito mais rápido do que a Internet de alta velocidade.
Snowball Edge
Internet das Coisas (IoT) - Snowball Edge pode ingerir dados de sensores IoT, realizar análises nos dados brutos para reverter os resultados rapidamente e adicioná-los a um pool de análise de big data na nuvem.
Locais remotos com dados simples - você pode colocar um Snowball Edge no local em locais remotos para coleta e análise de dados.
Moto de neve
Migrando exabytes de dados
O Snowmobile permite que os clientes migrem rapidamente conjuntos de dados em escala de exabyte do local para a AWS de maneira segura, rápida e de baixo custo. Os casos de uso incluem a migração de centenas de petabytes de dados, como bibliotecas de vídeo, sequências genômicas, dados sísmicos e registros financeiros para executar análises de big data na AWS ou desligar centros de dados legados e mover todos os dados locais em exabytes para AWS. Antes do Snowmobile, a migração de dados em tal escala normalmente levava anos, o que era lento demais para muitos clientes.
When it comes to stream processing, the first thing you need is a place to conceptualize the stream. In AWS, we offer two services now that provide this capability: Amazon Kinesis and Amazon Managed Streaming for Kafka (or “MSK”). We’ll talk about both these options in depth, and then show some examples of Clickstream Analytics.
O Amazon Kinesis oferece três recursos. O primeiro é um local para armazenar um fluxo de dados brutos para realizar qualquer processamento downstream dos registros que você deseja.
Para facilitar a transferência desses registros para ambientes analíticos comuns, como S3, ElasticSearch, Redshift e Splunk, oferecemos o serviço Firehose. Firehose armazenará em buffer automaticamente todos os registros no fluxo e liberará para o destino como um único arquivo ou conjunto de registros com base em um limite de tamanho de dados ou tempo que você configurar, o que for atingido primeiro.
Se você deseja realizar algumas análises baseadas em janela nos registros no stream, oferecemos o Kinesis Analytics. Analytics permite que você flua streams juntos e execute operações SQL sobre seus registros com base nas janelas de tempo que você configurar. A saída pode subsequentemente fluir para outros fluxos que você criar, para que você possa construir um pipeline de streaming sem servidor inteiro.
O Kinesis se integra a vários editores e consumidores comuns. Inclui APIs com as quais você pode interagir diretamente ou pode usar qualquer número de bibliotecas, como a Kinesis Producer Library, o AWS mobile SDK, estruturas de registro populares como Log4j ou remetentes de log como Flume ou Fluentd.
Da mesma forma, também existem APIs para consumir fluxos, junto com nossa Biblioteca de Consumidores Kinesis. Para tornar as coisas ainda mais fáceis, você pode até mesmo consumir registros de uma maneira sem servidor, usando uma função Lambda. Kinesis também oferece suporte aos principais sistemas de processamento de fluxo, como Spark (que pode ser executado em EMR), Storm, Samza e Flink.
Sob o capô, os streams do Kinesis são divididos no conceito de "fragmentos". Você pode pensar em um shard, uma unidade altamente durável de computação e armazenamento para seus dados de fluxo, que é automaticamente replicado e tornado consistente em três zonas de disponibilidade. Tanto do ponto de vista do produtor quanto do consumidor, a semântica do fragmento é abstraída - você simplesmente os vê como um fluxo ordenado de eventos.
Com o tempo, você pode aumentar ou diminuir o número de fragmentos que alimentam um fluxo. O Kinesis se encarrega de rebalancear os dados de acordo com os fragmentos para você.
O Amazon Kinesis é ótimo para ingerir dados no S3 para aplicativos que você está executando totalmente no AWS. No entanto, ele foi projetado para ser totalmente sem servidor, com pequenas fatias de computação e armazenamento que você pode escalar elasticamente conforme necessário. Muitos clientes executam o Kafka, no entanto, como parte de seu ambiente híbrido entre seus data centers e a AWS, ou como parte de uma migração life & shift que passará por alguma transformação em Kinesis em algum ponto.
Os clientes também executam o Kafka, no entanto, porque sua arquitetura fornece "corretores" de armazenamento e computação totalmente baseados em VM para processar seus dados. Assim, em vez de dimensionar elasticamente pequenas fatias de computação, você pode ajustar o ambiente de VM para fornecer recursos de rendimento e retenção muito altos.
Com base nessa demanda pelo tipo de potência bruta que o Kafka pode fornecer, oferecemos o serviço Managed Streaming for Kafka. Este serviço cuida de todo o trabalho pesado indiferenciado que envolve o gerenciamento de corretores Kafka, armazenamento e Apache Zookeeper, para que você possa se concentrar em seus aplicativos em vez da infraestrutura Kafka.
Como uma rápida comparação, tanto o Kinesis Data Streams quanto o Kafka têm conceitos muito semelhantes. Enquanto o Kinesis oferece "fluxos" e "fragmentos", o Kafka oferece "tópicos" e "partições". Para todos os efeitos, eles funcionam praticamente da mesma maneira. A principal diferença é que, com o MSK, seu ambiente de computação básico é a máquina virtual, enquanto com o Kinesis é o próprio fragmento.
Indo um pouco mais longe na comparação, com o Kinesis você obtém principalmente uma experiência AWS totalmente nativa. Os fluxos são configurados com base no rendimento e na elasticidade necessários, e você tem maior controle para ajustar seus custos sobre o número preciso de fragmentos de que precisa a qualquer momento.
Por outro lado, o Kafka é um software livre com portabilidade em muitos ambientes de computação diferentes. Ele tem um ecossistema de terceiros robusto e um tremendo potencial de desempenho puro e simples. A desvantagem desse desempenho extra é que a taxa de transferência é configurada em um nível de cluster geral e, como tal, é muito mais difícil escalar elasticamente o Kafka. Além disso, os clientes do Kafka obtêm informações sobre corretores diretamente por meio do Apache Zookeeper, de modo que os clientes precisam restabelecer as conexões com os corretores de acordo com a ocorrência de eventos de dimensionamento. Embora o MSK automatize grande parte do gerenciamento do cluster, ainda há muitas partes móveis que precisam estar sincronizadas para que o cluster permaneça saudável. Portanto, Kafka vem com um fator de risco mais alto do que Kinesis.
Em um exemplo mais complicado, ainda temos nossos vários consumidores da web enviando informações de clique para nossa API no API Gateway, mas em vez de usar isso como um proxy para Kinesis Firehose, vamos enviar isso para um Kinesis Stream. Isso nos permite bifurcar o processamento para que ainda possamos enviar os dados para nosso Data Lake no S3 por meio do Firehose, mas também introduzir algumas análises em tempo real. Neste aplicativo do Analytics, calculamos as taxas de conversão ao longo de uma janela de tempo e enviamos esses resultados para seu próprio fluxo. As taxas de conversão são enviadas para Firehose para armazenamento em nosso Data Lake para fins históricos, mas também podemos usar uma função Lambda para começar a examiná-las para procurar anomalias (como um exemplo). Conforme são detectadas anomalias nas taxas de conversão, nossa função Lambda envia uma notificação ao SNS para que nossa equipe de campanha seja notificada.
Em muitos aspectos, os logs também são fluxos. Não é nada mais do que uma sequência de eventos, normalmente gravada em um arquivo, em vez de ter cada evento de registro emitido em um armazenamento de dados de streaming. Como tal, os mesmos padrões que vimos que se aplicam ao processamento de stream com Kinesis ou Kafka também se aplicam a logs. Além disso, temos CloudWatch.
Qualquer cliente da AWS existente, sem dúvida, terá encontrado o CloudWatch em algum ponto de seu uso. Muitos o usam como seu serviço de registro central, dado que uma série de registros e métricas. Embora quase todos os serviços da AWS enviem dados para o CloudWatch automaticamente, você precisará enviar seus próprios dados de aplicativo para ele. Se seu aplicativo estiver rodando em EC2, então você pode fazer isso facilmente instalando o CloudWatch Agent em suas instâncias e configurá-los para enviar logs no intervalo apropriado.
Para todos os logs que estão no CloudWatch, você pode exportá-los para seu Data Lake no S3 usando uma função Lambda em uma programação.
Se você não quiser aproveitar os recursos do CloudWatch, pode optar por instalar o Agente Kinesis em suas instâncias EC2. Este agente pode então encaminhar suas entradas de log para Firehose, para serem depositadas no S3.
Como em nosso exemplo ClickStream anterior, você pode encadear os vários serviços do Kinesis para criar um pipeline de processamento de log.
Sources link https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html
Targets link https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html
Existem várias técnicas disponíveis para extrair dados de bancos de dados upstream. Estes quatro parecem ser os que encontramos com mais frequência no campo - se você estiver ciente de quaisquer outros, por favor, compartilhe conosco para que possamos incluir aqui também. Essas técnicas consistem em aproveitar os carimbos de data / hora para quando os registros são criados ou modificados, comparar os dados em dois intervalos de tempo diferentes para determinar quais alterações ocorreram, disparar a extração quando ocorrerem alterações nos dados ou ler as alterações de um log ou fluxo de transações.
Felizmente, a AWS fornece o serviço de migração de banco de dados para muitos dos bancos de dados mais populares. Esse serviço cuida de todo o trabalho pesado de ler dados do log de transações e gravar no S3 para você.
Merece uma menção honrosa a AWS Schema Conversion Tool, um aplicativo complementar ao DMS. Essa ferramenta é muito útil quando você deseja alterar sua tecnologia de banco de dados upstream, como a migração de Oracle ou SQL Server para Aurora Postgres.
Embora o serviço seja chamado de Serviço de “Migração” de Banco de Dados devido à sua raiz, ele é usado com muita frequência hoje em dia para executar a replicação contínua de dados de bancos de dados para o S3 na produção.
O DMS é implantado como um par de HA nas Zonas de disponibilidade em instâncias EC2 que gerenciamos para você. Assim, ele fará failover automaticamente e retomará a execução se ocorrer uma falha no mestre atual e criará um novo ambiente escravo. É totalmente configurável quanto aos bancos de dados com os quais interage, quais tabelas dentro desses bancos de dados ele deve replicar e com que rapidez essas alterações serão obtidas. O principal é garantir que você dimensione e configure adequadamente as instâncias para a frequência e o volume de dados que deseja que seus trabalhos processem.
Quando o DMS é executado pela primeira vez, ele cria um arquivo de despejo em massa inicial de todos os registros do banco de dados. Depois de concluído, ele começará a gerar arquivos CDC para essa tabela, que possui um esquema semelhante com a adição do tipo de operação realizada (I para inserir, U para atualizar, D para excluir). É um padrão comum ter um trabalho em execução que executa a operação bulk + CDC e outro que faz um bulk dump menos frequente a cada vez como uma maneira de criar checkpoints e ressincronizar os dados se algo der errado com o processamento downstream.