Tecnologias para sistemas distribuidos escalaveis

Post on 07-Jul-2015

171 views 0 download

description

Apresentação de tecnologias escaláveis aos candidatos do programa de estágio da FluxoTI em Guarapuava.

Transcript of Tecnologias para sistemas distribuidos escalaveis

Tecnologiasparasistemasdistribuídos

escaláveis

MongoDB, Redis, Hadoop, Storm

Cesar Schneider

Eworks Tecnologia

Quemsoueu

• Inventor desde 1988

• Programadordesde 1998

• Analistadesde 2003

• Gerente/Consultordesde 2008

• “Canivetesuiço”desde 2010

• “Hacker” desde 2012

• Arquiteto/Designer desde 2013

O quejáaprendievivi

• C/C++, PHP, Java, Ruby, JavaScript, HTML, CSS, Action Script, Bash, Linux.

• Trabalheiemdiferentesprojetos no Brasil, EmiradosÁrabes, Chile eUSA.

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

• Apaixonadoporesportesradicais, músicaeletrônicaeautomobilismo.

ComputaçãoDistribuída

• É umareferênciaàcomputaçãoparalelaedescentralizada, realizadapordoisoumaiscomputadoresconectadosatravés de umarede, cujoobjetivoéconcluirumatarefaemcomum.

• Umacoleção de computadoresindependentesqueaparecemparaousuáriocomo um únicosistema.

ComputaçãoDistribuída

SistemasEscaláveis

• Um sistemaédescritocomoescalável se permaneceeficientequandohá um aumentosignificativo no número de recursos(dados) e no número de usuários

• São construídos com base numaarquiteturadistribuídaequepermiteadição de novosnóssemque a aplicaçãonecessiteser modificada

ArquiteturaEscalável

Tecnologiasescaláveis

• MongoDB: banco de dados orientadoàdocumentosou“NoSQL”

• Redis: armazenamento de dados emmemóriaRAM com replicaçãoem disco

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

• Storm: processamento de dados em tempo real através de topologiasbaseadasemgrafos

Banco de dados orientado a documentoquepermitearmazenarestruturas de

dados com alta performance, disponibilidade,escalabilidadeeesquemasflexívei

s.

Um banco de dados possuiváriascoleções(tabelas). Umacoleçãopossuiváriosdocumentos

(registro). Um documentopossuivários pares chave/valor.

• Flexibilidade: dados armazenados no formatoJSON

• Velocidade: consultassãomaisrápidasporquenãoexistem“joins”

• Escalabilidade: capacidade de cargapode ser aumentadafacilmenteusando“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ívelporémcomplexodevido a arquitetura

Principalvantagemporterum arquiteturaflexívelesemesquemadefinido

Consistência Ponto forte. Estruturarígidagarante a consistência dos dados

Eventual, masgaranteacessoaoúltimovalor atualizado

Disponibilidade Podenãosuportarumagrandedemanda de dados

Fatorfundamental.Algograu de distribuiçãopermitemaiornúmero de consultas

Servidor de estruturasda dados complexas, armazenadasemmemória RAM, quepermitem a execução de operaçõescomplexasemanipulação

de dados com baixalatência.

Possibilita a execução de operaçõesatômicascomoconcatenar strings,

incrementarcontadores, ordenarlistas, computarinterseções, uniõesediferenç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 (cadaelementopossui um score)

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

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

Use cases

• Auto complete

• Message queue

• Publish/subscribe

• Notification center

• Sorting/Ranking

• Timeline

É framework mantidopela Apache Foundation quepermiteprocessamentode grandes volumes de dados distribuídosem um cluster quepodeconteralgumasdezenasoumilhares de nós, ondecadanósexecutaearmazena dados de localmente.

Aoinvés de utilizarhardwarescarose com altadisponibilidade, épossívelmontar um cluster Hadoop com qualquertipo de máquinaporquefoidesenhado com estafinalidade.

• Hadoop Common• Hadoop Distributed File System (HDFS)• Hadoop YARN (job scheduling and cluster resource management)• HadoopMapReduce (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çãoparaaplicaçõesdistribuídas)

• Indexação de busca de produtos (Amazon)

• Sistema de recomendação (Netflix)

• Analise de logs erelatóriosanalíticos (Facebook)

• Analise de metadados de arquivos de audio (last.fm)

• Pessoasquetalvezvocêconheça (LinkedIn)

• Previsão de resultados (Obama)

Storm

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

Umatopologia Storm consume “streams” de dados

realizandoprocessamentoscomplexosdestasinformações, reparticionandoestes dados

emdiversarfases de processamento de acordocom 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 compostopornósquepodem ser “spouts” ou “bolts”)

• Streams (compostosporfontes de dados eprocessadores de dados)

• Data Models (definição dos camposetipos 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!