tecnologias para sistemas distribuidos escalaveis

Post on 25-May-2015

732 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Tecnologias para sistemas distribuídos escaláveis

MongoDB, Redis, Hadoop, Storm

Cesar SchneiderEworks Tecnologia

@cesschneidercesar@eworks.com.br

Quem sou eu

• Inventor desde 1988• Programador desde 1998• Analista desde 2003• Gerente/Consultor desde 2008• “Canivete suiço” desde 2010• “Hacker” desde 2012• Arquiteto/Designer desde 2013

O que já aprendi e vivi• C/C++, PHP, Java, Ruby, JavaScript, HTML, CSS, Action Script, Bash,

Linux.

• Trabalhei em diferentes projetos no Brasil, Emirados Árabes, Chile e USA.

• Experiência com os mercados de gerenciamento de risco, rastreamento de veículos, geolocalização, GIS, e-commerce, aplicações móveis, integração de sistemas, Web Services e administração de servidores Linux.

• Apaixonado por esportes radicais, música eletrônica e automobilismo.

Computação Distribuída

• É uma referência à computação paralela e descentralizada, realizada por dois ou mais computadores conectados através de uma rede, cujo objetivo é concluir uma tarefa em comum.

• Uma coleção de computadores independentes que aparecem para o usuário como um único sistema.

Computação Distribuída

Sistemas Escaláveis

• Um sistema é descrito como escalável se permanece eficiente quando há um aumento significativo no número de recursos (dados) e no número de usuários

• São construídos com base numa arquitetura distribuída e que permite adição de novos nós sem que a aplicação necessite ser modificada

Arquitetura Escalável

Tecnologias escaláveis

• MongoDB: base de dados orientado à documentos ou “NoSQL”

• Redis: armazenamento de objetos em memória RAM

• Hadoop: processamento de grandes volumes de dados usando Map/Reduce

• Storm: processamento de dados em tempo real através de “workflows”

Banco de dados orientado a documento que permite armazenar estruturas de dados com alta

performance, disponibilidade, escalabilidade e esquemas flexíveis.

Um banco de dados possui várias coleções (tabelas). Uma coleção possui vários

documentos (registro). Um documento possui vários pares chave/valor.

• Flexibilidade: dados armazenados no formato JSON

• Velocidade: consultas são mais rápidas porque não existem “joins”

• Escalabilidade: capacidade de carga pode ser aumentada facilmente usando “shards”

• Recursos: indices geoespaciais, queries dinâmicas, ordenação, agregação, replicação

{name: “Cesar Schneider”,email: “cesar@eworks.com.br”,age: 34,skills: [“C”, “PHP”, “Java”],availableForConsulting: true

}

Relacional Documento

Escalonamento Possível porém complexo devido a arquitetura

Principal vantagem por ter um arquitetura flexível e sem esquema definido

Consistência Ponto forte. Estrutura rígida garante a consistência dos dados

Eventual, mas garante acesso ao último valor atualizado

Disponibilidade Pode não suportar uma grande demanda de dados

Fator fundamental. Algo grau de distribuição permite maior número de consultas

Servidor de estruturas da dados complexas, armazenadas em memória RAM, que permitem

a execução de operações complexas e manipulação de dados com baixa latência.

Possibilita a execução de operações atômicas como concatenar strings, incrementar contadores, ordenar listas, computar

interseções, uniões e diferenças.

• Twitter• Instagram• Digg• Stack Overflow• Flickr• Mercado Livre

Data types

• Strings (“string”)• Lists (“a”, “a”, “b”, “b”, ”c”, ”c”)• Sets (“a”, ”b”, “c”)• Hashes (“username cesar password 12345”)• Sorted sets (cada elemento possui um score)

$ redis-cli set mykey "my binary safe value"OK$ redis-cli get mykeymy binary safe value

$ redis-cli set counter 100OK$ redis-cli incr counter(integer) 101$ redis-cli incr counter(integer) 102

Use cases

• Auto complete• Message queue• Publish/subscribe• Notification center• Sorting/Ranking• Timeline

É framework mantido pela Apache Foundation que permite processamento de grandes volumes de dados distribuídos em um cluster que pode conter algumas dezenas ou milhares de nós, onde cada nós executa e armazena dados de localmente.

Ao invés de utilizar hardwares caros e com alta disponibilidade, é possível montar um cluster Hadoop com qualquer tipo de máquina porque foi desenhado com esta finalidade.

• Hadoop Common• Hadoop Distributed File System (HDFS)• Hadoop YARN (job scheduling and cluster resource management)• Hadoop MapReduce (YARN based parallel data processing)

• Ambari (web-based monitoring, management and provisioning)• AVRO (data serialization system)• Cassandra (multi-master database sem SPF)• Hbase (distributed database for structured data and big tables)• Hive (datawarehouse infrastructure for data summarization)• Pig (data-flow language and execution framework)• Mahout (machine learning e data mining)• Zookeeper (serviço de coordenação para aplicações distribuídas)

• Indexação de busca de produtos (Amazon)• Sistema de recomendação (Netflix)• Analise de logs e relatórios analíticos (Facebook)• Analise de metadados de arquivos de audio

(last.fm)• Pessoas que talvez você conheça (LinkedIn)• Previsão de resultados (Obama)

Storm

Sistema distribuído de processamento de dados em tempo real a partir de “streams” de dados.

Uma topologia Storm consume “streams” de dados realizando processamentos complexos

destas informações, reparticionando estes dados em diversar fases de processamento de acordo com a necessidade do resultado final.

Storm Use Cases

• Twitter• Groupon• Rubicon Project• Full Contact• Alibaba• Mercado Livre

Storm Architecture

Storm Concepts

• Topologies (grafos de transformações de dados composto por nós que podem ser “spouts” ou “bolts”)

• Streams (compostos por fontes de dados e processadores de dados)

• Data Models (definição dos campos e tipos de dados do resultado final)

Storm Topology

Storm Topology

TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("sentences", new RandomSentenceSpout(), 5);

builder.setBolt("split", new SplitSentence(), 8) .shuffleGrouping("sentences");

builder.setBolt("count", new WordCount(), 12) .fieldsGrouping("split", new Fields("word"));

That’s all, folks!

top related