big data da teoria à prática

Post on 21-Mar-2017

26 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

BigData: Da teoria à práticaUm case real de uso de banco noSQL com Delphi

Acompanhe em:

https://goo.gl/JbhLQX

Quiiii Máriiiioooo?

17+ anos na lida

Desenvolvedor Delphi, Python, JavaScript e LUA

Gestão de Desenvolvimento na CONTACT STUDIO Software

Ênfase em soluções para a área de Contact CenterDiscador, Chat, URA, Integrações e por aí vai

Mantenedor do blog: http://eugostododelphi.blogspot.com.br

Embarcadero MVP

mario.guedes@contactstudio.com | jmarioguedes@gmail.com

Arquitetura sugerida para uma grande solução

Se você está buscando criar uma grande solução que seja resiliente, escalável e disponível sugere-se a adoção das seguintes abordagens, mesmo que se comece pequeno porém pensando grande:

API First (REST/JSON): bom para web, mobile, IoT, e integrações ROA

A camada de apresentação será a mais conveniente para o seu negócio: De FoxPro à HTML/JavaScript passando pelo mobile

Serviço de Mensageria: desacoplamento entre os artefatos

Adoção de Microsserviços: escala horizontal

Persistência noSQL “poliglota”: a ferramenta certa para o problema certo

Big Data e os 5 V’s

Big Data embute muitos desafios. Armazenamento é um deles e é este o foco desta apresentação. O que fazer com os dados é outro problema.

Precisamos ter em mente ao menos 3 dos 5 V’s:

★Volume: Haja disco!

★Velocidade: “Não interessa como estava o trânsito há dez minutos!”

★Variedade: Formatos complexos e não estruturados (90% dos dados)

★Veracidade: Posso realmente confiar na fonte?

★Valor: Esses dados são realmente relevantes?

Paradigmas noSQL

noSQL: Not Only SQL

Uma grande solução requer várias abordagens de armazenamento complementares.

Um banco dito SQL adota o paradigma relacional (e.g. SQL Server)

Já no mundo noSQL temos 4 paradigmas em destaque:Orientado a Documento: mongoDB, CouchDB

Orientado a Chave e Valor: REDIS, memcached

Orientado a Coluna: Apache Cassandra

Orientado a Grafo: Neo4J

O pulo do gato é como os dados são armazenados em disco.

CONTACT STUDIO

O Contact Studio é uma grande plataforma de comunicação, com abordagem SaaS, e sua principal motivação foi o de centralizar os sistemas espalhados pelos Call Centers.

É totalmente “agnóstica” em termos de tecnologia: Delphi, C++, Python, JavaScript e LUA como linguagens de desenvolvimento assim como SQL Server, REDIS, mongoDB, Apache Cassandra e Neo4J como storages.

A equipe é composta por 10 desenvolvedores e essa transição começou há três anos. E não: Não está sendo fácil. Mas está sendo recompensador!

Problemas que enfrentamos lá atrás

Em 2010 fizemos uma primeira tentativa de migração do modelo Client/Server para o modelo Multi Camada.

Erros que merecem destaques (e quem liga para os acertos né?)Utilizamos um protocolo de comunicação proprietário (KBM)

Utilizamos o banco de dados relacional para resolver a fome do mundo:

Chegou um momento que era proibido tirar relatório em horário comercial

E a importação do mailing tinha que ser feito às 7 da manhã para dar tempo de acabar antes da operação começar… às 9.

Um aspecto importante era a flexibilidade de campos do mailing

Fácil fácil era necessário 5 tabelas para armazenamento do mailing

Não suportava mais de 150 operadores logados: vexame!

Em 2014 caiu a ficha: REDIS + MongoDB + Cassandra + Neo4J

Velocidade: Esses bancos foram concebidos para trabalhar em cluster o que possibilita leitura e escrita concorrentes

Disponibilidade: Se um nó cai, temos outros para suportar a carga

Diminuição da impedância representacional: Não é necessário transformar um dataset em um JSON aninhado conveniente para o frontend

Schema-free: Maior fluidez no desenvolvimento e respostas mais rápidas às mudanças de regras de negócios: 100+ tabelas se resumiu a 15 collections!

Novas oportunidades: Estamos investindo em predição e aprendizado de máquina.

Ainda em fase de MVP, hoje estamos na casa dos 1.000 usuários, com 4 empresas, e o sistema flui sem problemas.

CAMADA DE MICROSSERVIÇOS E TELEFONIA (Delphi & Python & C++ & FreeSWITCH)

Topologia Atual Simplificada

NGNIX

CAMADA REST (Delphi/DataSnap & Python/Tornado)

MENSAGERIA (REDIS)

LEGADO (SQL Server)

CACHE, SESSÃO(REDIS)

CADASTROS & File System(mongoDB)

CARDEX(mongoDB)

FÓSSIL(mongoDB)

Analytics(Cassandra)

FRONTEND: Delphi, AngularJS, Mobile, Integrações de Terceiros (e.g. Maquininha da Cielo)

Sorteio dos Livros

Três e-Books da Casa do Código para os três primeiros que enviar o nome e e-mail para o link acima.

Valendo!

REDIS - O que é?

https://redis.io/

Banco de Dados orientado à Chave e Valor

Baseado em memória

Abordagem bloqueante

Oferece várias tipos de dados e operações

TTL e Suporta script LUA

Utilizamos para:Armazenamento de sessão de usuário

Cacheamento server side: o processamento mais rápido é aquele que não é feito

Mensageria via PUB/SUB e enfileiramento

REDIS - Como usa?

Use o driver do Daniele Tetihttps://github.com/danieleteti/delphiredisclient

Em produção dê preferência a um servidor Linux

Para Windows baixe os binários em:https://github.com/MSOpenTech/redis/releases

Tem uma interface gráfica em:https://redisdesktop.com/download

Pense no REDIS como um grande “arquivo INI” ou como uma espécie de memória compartilhada

mongoDB - O que é?

https://www.mongodb.com/

Banco de Dados orientado a Documento

Oferece várias operações

Armazena JSON, só que no formato BSON

Oferece operações de MAP/REDUCE (em JavaScript) e AGREGAÇÃO

Ideal para:Dados de configuração

Fossilização de dados

Armazenamento de dados complexos

Armazenamento de arquivos

Como um carro é armazenado em um banco relacional:

Como um carro é armazenado no mongoDB:

mongoDB - Como usa?

Basta acionar o mongod com os parâmetros adequados

É possível rodar como serviço

As instruções CRUD são feitas com argumentos em JSON

Não olhe para o mongoDB com o mesmo mapa mental que você tem em relação a um banco relacional:

É um sofrimento desnecessário.

Comece a usar o mongoDB agora!

Aprenda tudo sobre mongoDB com Delphi com o Thulio Bittencourt:

Curso de MongoDB com Delphihttps://www.youtube.com/playlist?list=PLvrBgLo9icwMz1N9vh59OMf-J4XXZGdsw

Apache Cassandra - O que é?

http://cassandra.apache.org/

Banco de Dados orientado a Coluna

Rígido em sua modelagem mas, em troca, estupidamente rápido

Ideal para:Dados analíticos

Armazenamento de arquivos em “pedaços” para recuperação via streaming

Netflix faz isso

Base para o Hadoop: processamento em cluster

Apache Cassandra - Como usa?

A modelagem da coleção deve ser orientada às respostas que você quer.

Suporta uma linguagem de consulta denominada CQL, com sintaxe idêntica ao bom e velho SQL.

É o mais mais complexo de se entender e manter.Também, o que esperar de algo feito em Java né?

Neo4J - O que é?

https://neo4j.com/

Banco orientado a Grafo

Ainda está sendo estudado pela equipe

Ideal para:Determinar relacionamentos entre conceitos

Quais agentes estão falando com quais consumidores da cidade de Florianópolis?

Neo4J - Idéia básica

Basicamente temos “nós” com propriedades e as “arestas” entre estes nós. A “aresta” em si também possui propriedades.

Viu, agora dá para criar aquela rede social :)

ObjetivoIdentificar o melhor operador para atender um determinado cliente de acordo com critérios diversos

Mensagem final

Existem outros paradigmas de storage e outros vendors.

Não é o caso de colocar o mongoDB no lugar do seu SQL Server de uma hora para outra: baby steps!

A ferramenta certa para o problema certo: Analise o problema e crie repertório para resolvê-lo.

Achou o noSQL bacana? Saiba que existe o newSQL…Basicamente são bancos multiparadigmas

Então não seja resistente nem arrojado demais: seja ninja!

Cuidados importantes

Verifique a profundidade do lago antes de mergulhar.

Cuide da sua equipe: tenha consciência que toda mudança causa resistência.

Não magoe o seu DBA: convide-o a participar do processo - Cientista de Dados é o novo sexy.

Não se prenda aos seus conceitos atuais: “desapega! desapega!”

Livros bacanasNoSQL Essencial

https://novatec.com.br/livros/nosql-essencial/

Introdução ao MongoDBhttps://novatec.com.br/livros/introducao-ao-mongodb/

Armazenando dados com Redis https://www.casadocodigo.com.br/products/livro-redis

MongoDB - Construa novas aplicações com novas tecnologiashttps://www.casadocodigo.com.br/products/livro-mongodb

NoSQL - Como armazenar os dados de uma aplicação modernahttps://www.casadocodigo.com.br/products/livro-nosql

Desvendando o mongoDB - Do Mongo Shell ao Java Driverhttp://www.cienciamoderna.com.br/desvendando-o-mongodb-do-mongo-shell-and-java-driver/p

Links interessantesNon-Relational Database

http://www.non-relational.com/

Os 5 V's do Big Datahttp://www.gta.ufrj.br/grad/15_1/bigdata/vs.html

Visão Geral do Apache Cassandrahttps://www.infoq.com/br/interviews/Visao-Geral-do-Apache-Cassandra

Obrigado!

Dá tempo para perguntas?

Nas redes sociais você me localiza como /jmarioguedes

Mas me manda um e-mail vai: jmarioguedes@gmail.com

top related