SlideShare uma empresa Scribd logo
1 de 36
Estudo de Caso: Aplicação DataSnap para 10.000
usuários
Mario Guedes
Que Mario?
• 40 anos, pai do Júlio e da Fernanda
• Conectado desde 1999 (20 anos!)
• Sou artesão de Software em Delphi, Python, Lua, JavaScript, noSQL ...
• Estou CTO na Sofie Tecnologia
• Vivência em soluções de grande porte para Contact Center
• Em todas as redes: @jmarioguedes
• jmarioguedes@gmail.com
Minha jornada no grupo empresarial TL2M
• 2008 .. 2009 – Softwares de integração com telefonia – Desenvolvedor
Pleno
• 2010 .. 2011 – Contact Studio que deu errado – Desenvolvedor Sênior
• 2012 .. 2013 – NCS – Líder Técnico
• 2014 .. 2017 – Contact Studio que deu certo! – Gerente de Desenvolvimento
• 2018 – Início de uma nova fase - Diretor de Tecnologia
Proposta do workshop
• Compartilhar minha experiência no desenvolvimento de uma plataforma
escalável e resiliente na Contact Studio Software:
• Escalável: Capacidade de atender 10 ou 10.000 usuários sem reescrita de código
• Resiliente: Capacidade de tolerar e se recuperar rapidamente de rupturas
• Não vou me ater à códigos ou configurações mas sim em elencar o que deu
certo e o que de errado sob meu ponto de vista.
O que é um Contact Center?
• Contact Center é um Call Center bombado
• Basicamente é uma estrutura montada para interagir com os clientes de forma
ativa ou receptiva
• Vendas
• Reclamações
• Cobranças
• Dúvidas e suporte técnico
• Elogios (aham)
• E todas as coisas chatas do dia à dia
• Hoje o desafio é lidar com os vários canais possíveis:
• Telefone, Fax e SMS(clássicos)
• e-Mail (o novo fax – no sentido de estar em desuso)
• Chats (Plataforma próprias e populares como Facebook)
• Mídias Sociais (Twitter, Facebook, Instagram e etc)
Que tipo de soluções são necessárias?
• Processos de WorkFlow – Nível 1 e Back Office
• CTI – Integração entre Computador e Telefonia
• Receptivo
• Screen-Pop
• Discador automatizado
• Power
• Preview
• Preditivo
• Gravação de ligações telefônicas
• Tabulador
• URA – Unidade de Resposta Audível
• FAX
• SMS
• Chat
• Bot
• Mídias Sociais
• Integração não invasiva
Desafios chave
• Integração com a telefonia interna do cliente provendo o chamado “screen
pop” que é a sincronia entre voz e tela.
• Tudo que acontece no ramal do atendente deve refletir no front-end dele.
• Pelo front-end ele deve ser capaz de se logar na telefonia, se colocar em
pausa, se deslogar e por ai vai.
• O mesmo se aplica, obviamente, aos outros canais de atendimento como
eMail, Chat e por ai vai.
Cenário existente – 2009
• Sistema cliente servidor, desenvolvido em Delphi 6 com SQL Server
• Sistemas instalados na casa do cliente, majoritariamente Contact Centers
• Tudo é muito difícil:
• Servidor
• Software
• Pessoas
• Instalação e atualização nas estações de trabalho
• Customização
• Tudo!
• Logo, o software era caro.
• Alguém aqui se identifica? Levanta a mão!
Tecnologias - 2009
Viva o erro! - 2011
• Ano de 2011 e 2012
• Retumbante fracasso em reescrever o software da empresa
• Era para rodar na nuvem e não usamos HTTP (usamos o KBMMW)
• O front-end era Win32 implicando em down-time para atualização
• Era para ser escalável e não suportava mais de 100 usuários conectados
• Era para ser facilmente customizável mas tinha que ficar instalando exe e suas dependências
a todo momentos em todas as PAs
• Era para ser flexível mas esbarrava no DBA para criar uma nova coluna na tabela
• E diversos outros, digamos, inconvenientes.
• Ano de 2013
• Versão emergencial com DataSnap para atender o maior cliente sob pena de fecharmos
• A situação melhorou mas continuou sofrível
• O banco de dados relacional passou a ser o ofensor
• Sendo necessário “desnormalizar” o banco!
Tecnologia - 2011
Mas afinal, o que deu errado?
• Se só tinha fera na equipe?
• Se usávamos o último Delphi e uma porrada de componentes de terceiros?
• Se tínhamos dois DBA’s em SQL Server?
• Se tínhamos especialistas Delphi?
• Exemplos emblemáticos:
“Para importar um mailing leva-se quase meia hora e tinha que ser feito
fora de horário para não baixar o nível de serviço do sistema.”
“Era proibido tirar relatório durante o horário de produção!”
“Um simples novo campo no layout demandava programador, DBA e uma
RDM noturna.”
Finalmente acertamos a mão!
• Descobrimos que se as perguntas mudaram, as respostas não poderiam ser
as mesmas.
• Descobrimos que existe um mundo além do Windows + Delphi + SQL
Server.
• Descobrimos que tudo que sabíamos é que nada sabíamos.
INFRAARMAZENAMENTOLINGUAGENSARQUITETURA
Agora (desde 2014)
Mas calma!
• Estou falando o que deu certo para mim
• Não necessariamente serve tudo para você
• E não fiz nada sozinho, tem uma pequena mas valorosa equipe por trás
• E não foi fácil!
• Lembre-se: PESSOAS > TECNOLOGIA
• E por favor:
Tenha a mente aberta – as perguntas mudaram e por isso as respostas
também mudaram
Dissecando o ecossistema
Metas
• Oferecer uma solução cloud para o setor de Contact Center
• Ter flexibilidade para customizações
• Multi empresa
• Responder rapidamente às mudanças de estado
• Sincronia voz e tela
• Ser relativamente barato economicamente
• “Saving, saving, saving!”
• Parar de depender de grandes mas poucos clientes
• Passar a privilegiar muitos, mesmo que pequenos, clientes – Mercado SoHo
• CCaaS – Contact Center como um Serviço
Estratégia
• Codificar menos, entregar mais
• Falhar localmente
• Escalabilidade horizontal
• Desacoplamento
• A tecnologia certa para o problema certo
• Front end web estilo SPA
• Assíncronicidade sempre que possível
• Adoção de uma linguagem interpretada
• Preparar terreno para o Data Science
Os três pilares da nova arquitetura
• REST/JSON
• REST não guarda estado o que proporciona escalabilidade
• JSON é extremamente portável
• Micro serviço
• Alta especialização
• Baixo escopo
• noSQL
• Sem esquema
• Alta clusterização balanceando escrita e leitura
CAMADA RESTCAMADA CLIENTE MENSAGERIA MICRO SERVIÇOCAMADA HTTP STORAGE
Macro esquema simplificado
TOPOLOGIA
NGINX – Servidor Web Raiz
• Servidor web de alta densidade
• Promete suportar 10.000 conexões simultâneas
• https://nginx.org/en/
• Instalação para Windows (não para produção)
• http://nginx.org/en/docs/windows.html
• Software russo (curiosidade apenas)
• Extensível via linguagem Lua
• Proxy reverso
• Encaminhador de requisições
• Balanceador
• Fail over
• Altamente configurável
REDIS - REmote DIctionary Server
• Orientado à chave e valor, como um “arquivo INI gigante”
• Cacheamento lado servidor
• “O processamento mais rápido é aquele que não é feito”
• Mensageria entre processos
• PubSub -Publicação e Assinatura
• Enfileiramento
• Para um uso mais intenso considere o uso de um artefato especialista como o
RabbitMQ
• Possibilidade de se usar TTL nas chaves
• Execução de script em Lua
MongoDB
• Por já armazenar JSON, diminuímos a incompatibilidade de impedância
• É o esforço de mapear os dados entre as estruturas da linguagem e o banco
de dados relacional
• Aderente aos conceitos de Big Data
• Utiliza agregação e map-reduce para processamento
Como um carro seria armazenado no SQL Server?
Como um carro seria armazenado no MongoDB?
Por que o MongoDB?
• Permite escalabilidade horizontal
• Por trabalhar em cluster
Python – Sua nova segunda linguagem
• Python é uma linguagem fantástica e é uma boa opção para entender a sua
solução.
• Amanhã falaremos mais sobre isso.
Delphi – Protegendo o legado
• Legado não é um termo pejorativo
• Você trabalhou duro nos últimos anos e
tem o dever de preservar e adequar o
seu legado
• Se o Delphi é sua linguagem principal é
importante tentar quebrar os artefatos
em micro serviços.
• A solução não esta em nenhuma
tecnologia isolada, mas na arquitetura!
Próximos passos para a arquitetura
• Adoção de um message broker “de ofício”: RabbitMQ
• Adoção de containers para otimizar os servidores
• Integração com Blockchain
• Implantação de Aprendizado de Máquina e Data Science de um modo geral
• Otimização de discagens
• Análise de sentimentos
• Tecnologia cognitiva
• Predição de picos e vales para melhor planejamento
Conclusões finais
O segredo esta no conhecimento
• Se permita a conhecer tudo mas cuidado com as modinhas.
• Não tenha paixões – são apenas ferramentas.
• Cuidado, muito cuidado, com o vendor lock-in: Aprisionamento tecnológico
• Aplique a política “Baby Steps” – Um passo por vez!
• Erre rápido, aprenda rápido, corrija rápido!
Cuide das pessoas!
• O meu maior erro foi não considerar o “mapa mental” da equipe no
momento da mudança.
• Isso criou resistências e melindres absolutamente desnecessários.
• Isso deveria ser previsível, estávamos mexendo no status quo.
• Passado o perrengue:
• O DBA virou cientista de dados.
• O carinha do suporte virou um ninja web.
• O rapaz da infra virou DevOps.
• O programador Delphi conhece 3, 4 linguagens.
• Mas poderia ser menos traumático!
Materiais produzidos sobre estes e outros assuntos
• Meu blog: http://eugostododelphi.blogspot.com/
• Meu SlideShare: https://www.slideshare.net/jmarioguedes
• CodeRage Brasil III: Tudo sobre o REST Client Library:
https://youtu.be/ajl2GEJonQA
jmarioguedes@gmail.com
fb.com/jmarioguedes
linkedin.com/in/jmarioguedes
Obrigado

Mais conteúdo relacionado

Semelhante a Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuários

Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Mario Guedes
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Mario Guedes
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Mario Guedes
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
De zero a cem em cloud computing  transformando idéias em aplicações em pouco...De zero a cem em cloud computing  transformando idéias em aplicações em pouco...
De zero a cem em cloud computing transformando idéias em aplicações em pouco...Ricardo Martinelli de Oliveira
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JSEduardo Nunes Pereira
 
Os Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
Os Desafios do Profissional de T.I da Porta Paralela à Internet das CoisasOs Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
Os Desafios do Profissional de T.I da Porta Paralela à Internet das CoisasGustavo Ferreira Palma
 
QConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaQConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaDiego Pacheco
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Rodrigo Vieira
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiMario Guedes
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreRodrigo Kono
 
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaCase RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaAlessandro Binhara
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactFernando Henriques
 
TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?Rafael Salerno de Oliveira
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2
DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2 DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2
DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2 Vic Fernandes
 
DeskMetrics - Arquitetura, Python e NoSQL
DeskMetrics - Arquitetura, Python e NoSQLDeskMetrics - Arquitetura, Python e NoSQL
DeskMetrics - Arquitetura, Python e NoSQLHerberth Amaral
 

Semelhante a Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuários (20)

Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
De zero a cem em cloud computing  transformando idéias em aplicações em pouco...De zero a cem em cloud computing  transformando idéias em aplicações em pouco...
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JS
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
Os Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
Os Desafios do Profissional de T.I da Porta Paralela à Internet das CoisasOs Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
Os Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
 
QConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestruturaQConSP: Vivenciando dev ops para além da automação de infraestrutura
QConSP: Vivenciando dev ops para além da automação de infraestrutura
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnósticaCase RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
Case RDStation: Construindo DataLakes com Apache Hadoop em cloud agnóstica
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: React
 
TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2
DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2 DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2
DC2012 - First steps with Firemonkey and iOS apps in Delphi XE2
 
DeskMetrics - Arquitetura, Python e NoSQL
DeskMetrics - Arquitetura, Python e NoSQLDeskMetrics - Arquitetura, Python e NoSQL
DeskMetrics - Arquitetura, Python e NoSQL
 

Mais de Mario Guedes

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitMario Guedes
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISMario Guedes
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumMario Guedes
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTMario Guedes
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - CookbookMario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsMario Guedes
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsMario Guedes
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Mario Guedes
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis Mario Guedes
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisMario Guedes
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Mario Guedes
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosMario Guedes
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBMario Guedes
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
Abertura - GruPy-SP | G4 Solutions - Agosto 2015
Abertura - GruPy-SP | G4 Solutions - Agosto 2015Abertura - GruPy-SP | G4 Solutions - Agosto 2015
Abertura - GruPy-SP | G4 Solutions - Agosto 2015Mario Guedes
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 

Mais de Mario Guedes (20)

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST Summit
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da Ethereum
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - Cookbook
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e Redis
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
 
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDBArquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
Arquitetura escalável e resiliente com NGINX, DataSnap, REDIS e MongoDB
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
Abertura - GruPy-SP | G4 Solutions - Agosto 2015
Abertura - GruPy-SP | G4 Solutions - Agosto 2015Abertura - GruPy-SP | G4 Solutions - Agosto 2015
Abertura - GruPy-SP | G4 Solutions - Agosto 2015
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 

Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuários

  • 1.
  • 2. Estudo de Caso: Aplicação DataSnap para 10.000 usuários Mario Guedes
  • 3. Que Mario? • 40 anos, pai do Júlio e da Fernanda • Conectado desde 1999 (20 anos!) • Sou artesão de Software em Delphi, Python, Lua, JavaScript, noSQL ... • Estou CTO na Sofie Tecnologia • Vivência em soluções de grande porte para Contact Center • Em todas as redes: @jmarioguedes • jmarioguedes@gmail.com
  • 4. Minha jornada no grupo empresarial TL2M • 2008 .. 2009 – Softwares de integração com telefonia – Desenvolvedor Pleno • 2010 .. 2011 – Contact Studio que deu errado – Desenvolvedor Sênior • 2012 .. 2013 – NCS – Líder Técnico • 2014 .. 2017 – Contact Studio que deu certo! – Gerente de Desenvolvimento • 2018 – Início de uma nova fase - Diretor de Tecnologia
  • 5. Proposta do workshop • Compartilhar minha experiência no desenvolvimento de uma plataforma escalável e resiliente na Contact Studio Software: • Escalável: Capacidade de atender 10 ou 10.000 usuários sem reescrita de código • Resiliente: Capacidade de tolerar e se recuperar rapidamente de rupturas • Não vou me ater à códigos ou configurações mas sim em elencar o que deu certo e o que de errado sob meu ponto de vista.
  • 6. O que é um Contact Center? • Contact Center é um Call Center bombado • Basicamente é uma estrutura montada para interagir com os clientes de forma ativa ou receptiva • Vendas • Reclamações • Cobranças • Dúvidas e suporte técnico • Elogios (aham) • E todas as coisas chatas do dia à dia • Hoje o desafio é lidar com os vários canais possíveis: • Telefone, Fax e SMS(clássicos) • e-Mail (o novo fax – no sentido de estar em desuso) • Chats (Plataforma próprias e populares como Facebook) • Mídias Sociais (Twitter, Facebook, Instagram e etc)
  • 7. Que tipo de soluções são necessárias? • Processos de WorkFlow – Nível 1 e Back Office • CTI – Integração entre Computador e Telefonia • Receptivo • Screen-Pop • Discador automatizado • Power • Preview • Preditivo • Gravação de ligações telefônicas • Tabulador • URA – Unidade de Resposta Audível • FAX • SMS • Chat • Bot • Mídias Sociais • Integração não invasiva
  • 8. Desafios chave • Integração com a telefonia interna do cliente provendo o chamado “screen pop” que é a sincronia entre voz e tela. • Tudo que acontece no ramal do atendente deve refletir no front-end dele. • Pelo front-end ele deve ser capaz de se logar na telefonia, se colocar em pausa, se deslogar e por ai vai. • O mesmo se aplica, obviamente, aos outros canais de atendimento como eMail, Chat e por ai vai.
  • 9. Cenário existente – 2009 • Sistema cliente servidor, desenvolvido em Delphi 6 com SQL Server • Sistemas instalados na casa do cliente, majoritariamente Contact Centers • Tudo é muito difícil: • Servidor • Software • Pessoas • Instalação e atualização nas estações de trabalho • Customização • Tudo! • Logo, o software era caro. • Alguém aqui se identifica? Levanta a mão!
  • 11. Viva o erro! - 2011 • Ano de 2011 e 2012 • Retumbante fracasso em reescrever o software da empresa • Era para rodar na nuvem e não usamos HTTP (usamos o KBMMW) • O front-end era Win32 implicando em down-time para atualização • Era para ser escalável e não suportava mais de 100 usuários conectados • Era para ser facilmente customizável mas tinha que ficar instalando exe e suas dependências a todo momentos em todas as PAs • Era para ser flexível mas esbarrava no DBA para criar uma nova coluna na tabela • E diversos outros, digamos, inconvenientes. • Ano de 2013 • Versão emergencial com DataSnap para atender o maior cliente sob pena de fecharmos • A situação melhorou mas continuou sofrível • O banco de dados relacional passou a ser o ofensor • Sendo necessário “desnormalizar” o banco!
  • 13. Mas afinal, o que deu errado? • Se só tinha fera na equipe? • Se usávamos o último Delphi e uma porrada de componentes de terceiros? • Se tínhamos dois DBA’s em SQL Server? • Se tínhamos especialistas Delphi? • Exemplos emblemáticos: “Para importar um mailing leva-se quase meia hora e tinha que ser feito fora de horário para não baixar o nível de serviço do sistema.” “Era proibido tirar relatório durante o horário de produção!” “Um simples novo campo no layout demandava programador, DBA e uma RDM noturna.”
  • 14. Finalmente acertamos a mão! • Descobrimos que se as perguntas mudaram, as respostas não poderiam ser as mesmas. • Descobrimos que existe um mundo além do Windows + Delphi + SQL Server. • Descobrimos que tudo que sabíamos é que nada sabíamos.
  • 16. Mas calma! • Estou falando o que deu certo para mim • Não necessariamente serve tudo para você • E não fiz nada sozinho, tem uma pequena mas valorosa equipe por trás • E não foi fácil! • Lembre-se: PESSOAS > TECNOLOGIA • E por favor: Tenha a mente aberta – as perguntas mudaram e por isso as respostas também mudaram
  • 18. Metas • Oferecer uma solução cloud para o setor de Contact Center • Ter flexibilidade para customizações • Multi empresa • Responder rapidamente às mudanças de estado • Sincronia voz e tela • Ser relativamente barato economicamente • “Saving, saving, saving!” • Parar de depender de grandes mas poucos clientes • Passar a privilegiar muitos, mesmo que pequenos, clientes – Mercado SoHo • CCaaS – Contact Center como um Serviço
  • 19. Estratégia • Codificar menos, entregar mais • Falhar localmente • Escalabilidade horizontal • Desacoplamento • A tecnologia certa para o problema certo • Front end web estilo SPA • Assíncronicidade sempre que possível • Adoção de uma linguagem interpretada • Preparar terreno para o Data Science
  • 20. Os três pilares da nova arquitetura • REST/JSON • REST não guarda estado o que proporciona escalabilidade • JSON é extremamente portável • Micro serviço • Alta especialização • Baixo escopo • noSQL • Sem esquema • Alta clusterização balanceando escrita e leitura
  • 21. CAMADA RESTCAMADA CLIENTE MENSAGERIA MICRO SERVIÇOCAMADA HTTP STORAGE Macro esquema simplificado
  • 23. NGINX – Servidor Web Raiz • Servidor web de alta densidade • Promete suportar 10.000 conexões simultâneas • https://nginx.org/en/ • Instalação para Windows (não para produção) • http://nginx.org/en/docs/windows.html • Software russo (curiosidade apenas) • Extensível via linguagem Lua • Proxy reverso • Encaminhador de requisições • Balanceador • Fail over • Altamente configurável
  • 24. REDIS - REmote DIctionary Server • Orientado à chave e valor, como um “arquivo INI gigante” • Cacheamento lado servidor • “O processamento mais rápido é aquele que não é feito” • Mensageria entre processos • PubSub -Publicação e Assinatura • Enfileiramento • Para um uso mais intenso considere o uso de um artefato especialista como o RabbitMQ • Possibilidade de se usar TTL nas chaves • Execução de script em Lua
  • 25. MongoDB • Por já armazenar JSON, diminuímos a incompatibilidade de impedância • É o esforço de mapear os dados entre as estruturas da linguagem e o banco de dados relacional • Aderente aos conceitos de Big Data • Utiliza agregação e map-reduce para processamento
  • 26. Como um carro seria armazenado no SQL Server?
  • 27. Como um carro seria armazenado no MongoDB?
  • 28. Por que o MongoDB? • Permite escalabilidade horizontal • Por trabalhar em cluster
  • 29. Python – Sua nova segunda linguagem • Python é uma linguagem fantástica e é uma boa opção para entender a sua solução. • Amanhã falaremos mais sobre isso.
  • 30. Delphi – Protegendo o legado • Legado não é um termo pejorativo • Você trabalhou duro nos últimos anos e tem o dever de preservar e adequar o seu legado • Se o Delphi é sua linguagem principal é importante tentar quebrar os artefatos em micro serviços. • A solução não esta em nenhuma tecnologia isolada, mas na arquitetura!
  • 31. Próximos passos para a arquitetura • Adoção de um message broker “de ofício”: RabbitMQ • Adoção de containers para otimizar os servidores • Integração com Blockchain • Implantação de Aprendizado de Máquina e Data Science de um modo geral • Otimização de discagens • Análise de sentimentos • Tecnologia cognitiva • Predição de picos e vales para melhor planejamento
  • 33. O segredo esta no conhecimento • Se permita a conhecer tudo mas cuidado com as modinhas. • Não tenha paixões – são apenas ferramentas. • Cuidado, muito cuidado, com o vendor lock-in: Aprisionamento tecnológico • Aplique a política “Baby Steps” – Um passo por vez! • Erre rápido, aprenda rápido, corrija rápido!
  • 34. Cuide das pessoas! • O meu maior erro foi não considerar o “mapa mental” da equipe no momento da mudança. • Isso criou resistências e melindres absolutamente desnecessários. • Isso deveria ser previsível, estávamos mexendo no status quo. • Passado o perrengue: • O DBA virou cientista de dados. • O carinha do suporte virou um ninja web. • O rapaz da infra virou DevOps. • O programador Delphi conhece 3, 4 linguagens. • Mas poderia ser menos traumático!
  • 35. Materiais produzidos sobre estes e outros assuntos • Meu blog: http://eugostododelphi.blogspot.com/ • Meu SlideShare: https://www.slideshare.net/jmarioguedes • CodeRage Brasil III: Tudo sobre o REST Client Library: https://youtu.be/ajl2GEJonQA

Notas do Editor

  1. Apresentação pessoal
  2. - Apresentação profissional
  3. - Proposta de trabalho
  4. - Cenário existente