Upload
mario-guedes
View
27
Download
0
Embed Size (px)
Citation preview
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
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: [email protected]