pipes: uma linguagem para processamento distribuído de eventos complexos
DESCRIPTION
PIPES: Uma linguagem para processamento distribuído de eventos complexosTRANSCRIPT
![Page 1: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/1.jpg)
Uma Linguagem para Processamento Distribuído de Eventos Complexos
Juan Lopes24 de setembro de 2014
![Page 2: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/2.jpg)
➔ Pai do Miguel➔ Bacharel em Ciência da Computação (UERJ)➔ Mestrando em Ciências Computacionais (UERJ)➔ Viciado em algoritmos e competições de programação➔ Programador na Intelie➔ {github.com,twitter.com}/juanplopes
pipes.intelie.com#qconrio
Quem sou eu?Não que credenciais importem muito, mas esse slide já é tradicional
![Page 3: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/3.jpg)
➔ Pai do Miguel➔ Bacharel em Ciência da Computação (UERJ)➔ Mestrando em Ciências Computacionais (UERJ)➔ Viciado em algoritmos e competições de programação➔ Programador na Intelie➔ {github.com,twitter.com}/juanplopes➔ Aquele que separa vocês do happy hour. Foi mal.
pipes.intelie.com#qconrio
Quem sou eu?Não que credenciais importem muito, mas esse slide já é tradicional
![Page 4: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/4.jpg)
pipes.intelie.com#qconrio
QConSP 2013Estruturas de dados probabilísticas
![Page 5: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/5.jpg)
pipes.intelie.com#qconrio
QConSP 2013Estruturas de dados probabilísticas
Slidesjuanlopes.net/qconsp2013
Vídeoinfoq.com/br/presentations/analisando-fluxo-dados-tempo-real
![Page 6: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/6.jpg)
pipes.intelie.com
Slidesjuanlopes.net/qconsp2013
Vídeoinfoq.com/br/presentations/analisando-fluxo-dados-tempo-real
#qconrio
Set membership
Bloom FiltersBurton H. Bloom (1970)
QConSP 2013Estruturas de dados probabilísticas
![Page 7: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/7.jpg)
Slidesjuanlopes.net/qconsp2013
Vídeoinfoq.com/br/presentations/analisando-fluxo-dados-tempo-real
pipes.intelie.com#qconrio
Multiset sumarization
Count-MinGraham Cormode, et al. (2003)
Set membership
Bloom FiltersBurton H. Bloom (1970)
QConSP 2013Estruturas de dados probabilísticas
![Page 8: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/8.jpg)
Slidesjuanlopes.net/qconsp2013
Vídeoinfoq.com/br/presentations/analisando-fluxo-dados-tempo-real
pipes.intelie.com#qconrio
Multiset sumarization
Count-MinGraham Cormode, et al. (2003)
Set cardinality
HyperLogLogPhilippe Flajolet, et al. (2007)
Set membership
Bloom FiltersBurton H. Bloom (1970)
QConSP 2013Estruturas de dados probabilísticas
![Page 9: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/9.jpg)
➔ Slides
juanlopes.net/qconrio2014
➔ Site e documentação
pipes.intelie.com
➔ Tutorial interativo
pipes.intelie.com/tutorial
pipes.intelie.com#qconrio
LinksNão precisa correr para anotar, esse slide irá voltar
![Page 10: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/10.jpg)
1 PROCESSAMENTO DE EVENTOS 101
2 POR QUE MAIS UMA LINGUAGEM DE CEP?
3 DETALHES DA LINGUAGEM
4 DEMOS
pipes.intelie.com
WHAT?
WHY?
HOW?
WTF?
#qconrio
AgendaPorque ter uma agenda sempre dá uma boa impressão
![Page 11: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/11.jpg)
1 PROCESSAMENTO DE EVENTOS 101
2 POR QUE MAIS UMA LINGUAGEM DE CEP?
3 DETALHES DA LINGUAGEM
4 DEMOS
pipes.intelie.com
WHAT?
WHY?
HOW?
WTF?
#qconrio
AgendaPorque ter uma agenda sempre dá uma boa impressão
1 PROCESSAMENTO DE EVENTOS 101 WHAT?
![Page 12: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/12.jpg)
pipes.intelie.com#qconrio
An event is a significant change of state at a particular point in time.
![Page 13: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/13.jpg)
pipes.intelie.com#qconrio
EventosOnde?
➔ Monitoração de infraestrutura➔ Análise de informações de negócio➔ Algorithmic trading➔ Bioinformática➔ Controle de tráfego urbano➔ Orquestração de software embarcardo➔ etc.
![Page 14: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/14.jpg)
pipes.intelie.com#qconrio
EventosOnde?
➔ Monitoração de infraestrutura➔ Análise de informações de negócio➔ Algorithmic trading➔ Bioinformática➔ Controle de tráfego urbano➔ Orquestração de software embarcardo➔ etc.
![Page 15: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/15.jpg)
pipes.intelie.com#qconrio
EventosOnde?
➔ Monitoração de infraestrutura➔ Análise de informações de negócio
Não há ferramenta universal.Considerar: Latência × Flexibilidade × Desempenho
![Page 16: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/16.jpg)
pipes.intelie.com#qconrio
EventosSua infra está repleta deles
![Page 17: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/17.jpg)
pipes.intelie.com#qconrio
EventosSua infra está repleta deles
eventos de negócio
logs
métricas
user analytics
auditoria
![Page 18: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/18.jpg)
eventos de negócio
logs
métricas
user analytics
auditoria
pipes.intelie.com#qconrio
EventosSua infra está repleta deles
?
![Page 19: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/19.jpg)
➔ Consultas contínuas➔ Primitivas temporais➔ Detecção de padrões➔ Janelas de eventos➔ Controle do output➔ Tudo em memória
pipes.intelie.com#qconrio
Por que não SQL?Por que não!
![Page 20: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/20.jpg)
pipes.intelie.com#qconrio
Database InvertidoO índice fica nas consultas
dados consultas
consultasresultado
eventosresultados
modelorelacional
modelo baseado em eventos
foco no passadoconsultas sem estado
dados são o estado
foco no presenteconsultas com estado
dados sem estado
![Page 21: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/21.jpg)
pipes.intelie.com#qconrio
FerramentasTem muita gente fazendo isso
![Page 22: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/22.jpg)
pipes.intelie.com#qconrio
declare Sale @role( event )end
declare window Ticks Sale() over window:length(5) from entry-point MyEntryPointend
rule "More than 2 sale suceess in 5 events"when Number($cnt : intValue,intValue > 2) from accumulate( Sale (saleHappened == "Y") from window Ticks, count(1) )then System.out.println( "A sale has happened over " + $cnt +" events" );end
var forward = inputStream.AlterEventStartTime( s => s.StartTime.AddSeconds(1));
var query = from evt in inputStream from prev in forward where prev.Value < threshold && evt.Value > threshold select new { Time = evt.Time, Low = prev.Value, High = evt.Value };
![Page 23: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/23.jpg)
pipes.intelie.com#qconrio
SELECT count(*) as fails, timestamp, local, description,FROM HttpMonitor(type = "error" OR description ="Timeout::Error") .std:groupwin(description) .win:time(15 minutes)
SELECT T.firstc, T.lastc, T.Ac1, T.Bc1, T.avgCc1, T.Dc1 FROM S0 MATCH_RECOGNIZE ( MEASURES first(C.c2) as firstc, last(C.c2) as lastc, avg(C.c1) as avgCc1, A.c1 as Ac1, B.c1 as Bc1, D.c1 as Dc1 PATTERN(A B C* D) DEFINE A as A.c1 = 30, B as B.c2 = 10.0, C as C.c1 = 7, D as D.c1 = 40) as T
![Page 24: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/24.jpg)
pipes.intelie.com#qconrio
SELECT STREAM "SuspectLoginFailures"."accountNumber", "loginFailureCount", "transactionType", "amount"FROM "SuspectLoginFailures" OVER "lastFew"JOIN "Transactions" OVER "lastFew" ON "SuspectLoginFailures"."accountNumber" = "Transactions"."accountNumber"WHERE ("transactionType" = 'isDebit')WINDOW "lastFew" AS (RANGE INTERVAL '1' MINUTE PRECEDING);
CREATE OUTPUT STREAM TickStats AS SELECT openval() AS StartOfTimeSlice, avg(NumberTicks) AS AvgTicksPerSecond, stdev(NumberTicks) AS StdevTicksPerSecond, lastval(NumberTicks) AS LastTicksPerSecond, FeedName FROM TicksPerSecond [ SIZE 20 ADVANCE 1 ON StartOfTimeSlice PARTITION BY FeedName ] GROUP BY FeedName;
![Page 26: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/26.jpg)
➔ ECA (Event–Condition–Action)
➔ ESP (Event Stream Processing)
➔ CEP (Complex Event Processing)
pipes.intelie.com#qconrio
NomenclaturaUm pouco de bikeshedding não faz mal a ninguém
![Page 27: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/27.jpg)
➔ ECA (Event–Condition–Action)
➔ ESP (Event Stream Processing)
➔ CEP (Complex Event Processing)
pipes.intelie.com#qconrio
NomenclaturaUm pouco de bikeshedding não faz mal a ninguém
![Page 28: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/28.jpg)
pipes.intelie.com#qconrio
NomenclaturaPara falar a verdade, não há tanto consenso
CEP
ESP
alto desempenhoagregações complexas
causalidadeinferências complexas
![Page 29: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/29.jpg)
pipes.intelie.com#qconrio
NomenclaturaPara falar a verdade, não há tanto consenso
detection-oriented
CEP
aggregation-oriented
CEP
![Page 30: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/30.jpg)
pipes.intelie.com#qconrio
NomenclaturaPara falar a verdade, não há tanto consenso
detection-oriented
CEP
aggregation-oriented
CEP
![Page 31: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/31.jpg)
select count(*) from stream
pipes.intelie.com
EPL
#qconrio
AgregaçõesNo passado é simples
![Page 32: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/32.jpg)
select count(*) from stream
pipes.intelie.com
EPL
#qconrio
AgregaçõesNo passado é simples, mas e em tempo real?
public class AggregatorCount implements AggregationMethod{ protected long numDataPoints;
public void clear() { numDataPoints = 0; }
public void enter(Object object) { numDataPoints++; }
public void leave(Object object) { numDataPoints--; }
public Object getValue() { return numDataPoints; }}
JAVA
![Page 33: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/33.jpg)
public void leave(Object object) { numDataPoints--; sum -= ((Number) object).doubleValue(); }
public Object getValue() { if (numDataPoints == 0) return null; return sum / numDataPoints; }}
select avg(field) from stream
pipes.intelie.com
EPL
#qconrio
AgregaçõesNo passado é simples, mas e em tempo real?
public class AggregatorAvg implements AggregationMethod{ protected double sum; protected long numDataPoints;
public void clear() { sum = 0; numDataPoints = 0; }
public void enter(Object object) { numDataPoints++; sum += ((Number) object).doubleValue(); }
JAVA
![Page 34: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/34.jpg)
count(*) == 6
1 minute
select count(*) from stream.win:time(1 minute)
pipes.intelie.com
EPL
#qconrio
Enter, leave?A lógica em agregações sobre eventos é um pouco diferente
tempo
![Page 35: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/35.jpg)
count(*) == 5
1 minute
select count(*) from stream.win:time(1 minute)
pipes.intelie.com
EPL
#qconrio
Enter, leave?A lógica em agregações sobre eventos é um pouco diferente
tempo
leave enter
![Page 36: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/36.jpg)
➔ Agregações não precisam recalcular novos eventos➔ Algoritmos online são essenciais➔ Estabilidade numérica é importante; exemplo ruim:
pipes.intelie.com#qconrio
Janelas de eventosDefinem o conjunto de eventos sobre os quais a agregação irá executar
public class AggregatorAvg implements AggregationMethod{ //... public Object getValue() { if (numDataPoints == 0) return null; return sum / numDataPoints; } //...}
JAVA
![Page 37: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/37.jpg)
➔ Agregações não precisam recalcular novos eventos➔ Algoritmos online são essenciais➔ Estabilidade numérica é importante; exemplo bom:
pipes.intelie.com#qconrio
Janelas de eventosDefinem o conjunto de eventos sobre os quais a agregação irá executar
![Page 38: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/38.jpg)
select count(*) from stream.win:time(1 day)output last every 1 second
pipes.intelie.com
EPL
#qconrio
Janelas de tempoDifícil prever custo de memória
![Page 39: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/39.jpg)
select count(*) from stream.win:time(1 day)output last every 1 second
pipes.intelie.com
EPL
#qconrio
Janelas de tempoDifícil prever custo de memória
Bilhões de eventos por dia? OOM na certa.
java.lang.OutOfMemoryError: GC overhead limit exceeded
![Page 40: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/40.jpg)
1 PROCESSAMENTO DE EVENTOS 101
2 POR QUE MAIS UMA LINGUAGEM DE CEP?
3 DETALHES DA LINGUAGEM
4 DEMOS
pipes.intelie.com
WHAT?
WHY?
HOW?
WTF?
#qconrio
AgendaPorque ter uma agenda sempre dá uma boa impressão
2 POR QUE MAIS UMA LINGUAGEM DE CEP? WHY?
![Page 42: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/42.jpg)
➔ Usado na Globo.com➔ Processa bilhões de linhas de log por dia➔ Índice full-text com Lucene modificado➔ Sistema completamente distribuído
Como processar esses logs em tempo real?
pipes.intelie.com#qconrio
![Page 44: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/44.jpg)
➔ Usado na Globo.com e Walmart.com➔ Processa tanto eventos de infra quanto de negócio➔ Permite criar dashboards, alertas, relatórios, etc.➔ Processa centenas de eventos/segundo tranquilamente➔ Usa Esper como um dos motores de regras
Como escalar?
pipes.intelie.com#qconrio
![Page 45: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/45.jpg)
cluster
pipes.intelie.com#qconrio
LOGSe outros eventos
?
reports
graphs
alerts
![Page 46: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/46.jpg)
cluster
pipes.intelie.com#qconrio
LOGSe outros eventos
reports
graphs
alerts
![Page 47: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/47.jpg)
➔ Processar bilhões de eventos por dia (até 300 mil/s)➔ Suportar milhares de queries simultâneas➔ Permitir processamento distribuído!➔ Não onerar a rede excessivamente➔ Baixo consumo de memória➔ Em apenas uma passagem pelos dados
pipes.intelie.com#qconrio
Objetivos primáriosNão dava para simplesmente jogar o Esper aí
![Page 48: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/48.jpg)
➔ Filtros baseados na sintaxe do Lucene➔ Poder escrever consultas em apenas uma linha➔ Design monádico (esqueça SQL)➔ Mesmo permitindo processamento distribuído, também
fornecer ferramentas para single-node➔ Custo de memória o mais previsível possível
pipes.intelie.com#qconrio
Objetivos secundáriosJá que vamos criar uma linguagem nova...
![Page 49: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/49.jpg)
1 PROCESSAMENTO DE EVENTOS 101
2 POR QUE MAIS UMA LINGUAGEM DE CEP?
3 DETALHES DA LINGUAGEM
4 DEMOS
pipes.intelie.com
WHAT?
WHY?
HOW?
WTF?
#qconrio
AgendaPorque ter uma agenda sempre dá uma boa impressão
3 DETALHES DA LINGUAGEM HOW?
![Page 50: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/50.jpg)
➔ Slides
juanlopes.net/qconrio2014
➔ Site e documentação
pipes.intelie.com
➔ Tutorial interativo
pipes.intelie.com/tutorial
pipes.intelie.com#qconrio
LinksEu disse que voltaria; no final ele aparece de novo
![Page 51: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/51.jpg)
field:value => count() every minute
pipes.intelie.com
PIPES
#qconrio
Exemplo motivadorO mínimo que precisava ser feito
filtro agregação
![Page 52: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/52.jpg)
type:http status:404
pipes.intelie.com
PIPES
#qconrio
FiltrosJá que Lucene não tem real-time, implementamos o nosso
![Page 53: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/53.jpg)
type:http status:404
pipes.intelie.com
PIPES
#qconrio
FiltrosJá que Lucene não tem real-time, implementamos o nosso
type:http status:200 PIPES
type:http status:(2?? | 3??) PIPES
![Page 54: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/54.jpg)
type:http status:404
pipes.intelie.com
PIPES
#qconrio
FiltrosJá que Lucene não tem real-time, implementamos o nosso
type:http status:200 PIPES
type:http status:(2?? | 3??) PIPES
![Page 55: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/55.jpg)
type:http status:404
pipes.intelie.com
PIPES
#qconrio
FiltrosJá que Lucene não tem real-time, implementamos o nosso
type:http status:200 PIPES
type:http status:(2?? | 3??) PIPES
![Page 56: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/56.jpg)
pipes.intelie.com#qconrio
Autômatos de filtroMinimizam o consumo de CPU dos filtros
??
field: type
field: status
http
2
3
404
??
and
00
and
or and
type:http status:404
type:http status:200
type:http status:(2?? | 3??)
![Page 57: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/57.jpg)
pipes.intelie.com#qconrio
Autômatos na unhaRegex match em Java é NP-difícil (em Ruby, Python, Perl etc. também)
github.com/juanplopes/pyrex
![Page 58: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/58.jpg)
pipes.intelie.com#qconrio
Autômatos na unhaEm alguns casos regex nem ajudaria tanto
blog.notdot.net/2010/07/Damn-Cool-Algorithms-Levenshtein-Automata
text:food~2 PIPES
![Page 59: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/59.jpg)
pipes.intelie.com#qconrio
Tipos de filtro implementadosNem todos os tipos de filtro do Lucene foram implementados
➔ Match all:*
➔ Term: <field>:<term>
➔ Range:<field>:[<lower>, <upper>]
➔ Fuzzy: <field>:<term>~<number>
➔ AND: <filter> & <filter>
➔ OR:<filter> | <filter>
➔ NOT: -<filter>
![Page 60: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/60.jpg)
pipes.intelie.com#qconrio
Composição de filtrosUm pouco mais poderosa até que a do Lucene
WebAccess PIPES
![Page 61: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/61.jpg)
pipes.intelie.com#qconrio
Composição de filtrosUm pouco mais poderosa até que a do Lucene
WebAccess PIPES
WebAccess browser:firefox PIPES
![Page 62: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/62.jpg)
pipes.intelie.com#qconrio
Composição de filtrosUm pouco mais poderosa até que a do Lucene
WebAccess PIPES
WebAccess browser:firefox PIPES
WebAccess browser:(firefox|chrome) PIPES
![Page 63: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/63.jpg)
pipes.intelie.com#qconrio
Composição de filtrosUm pouco mais poderosa até que a do Lucene
WebAccess PIPES
WebAccess browser:firefox PIPES
WebAccess browser:(firefox|chrome) PIPES
WebAccess browser:(firefox|chrome|(IE* product_id#:[15, 60])) PIPES
![Page 64: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/64.jpg)
➔ Filtros não sabem dizer se um evento dá match ou não➔ Apenas sabem criar o autômato que reconhece um valor➔ Registrar um filtro significa adicionar ao autômato
transições que reconheçam o valor e listeners para estados de aceite
➔ Os eventos são submetidos aos autômatos (um para cada campo) e os matchs são notificados e encadeados
➔ Código complexo (e com alta cobertura)
pipes.intelie.com#qconrio
FiltrosUm pequeno resumo
![Page 65: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/65.jpg)
pipes.intelie.com#qconrio
FiltrosUm pequeno resumo
??
field: type
field: status
http
2
3
404
??
and
00
and
or and
type:http status:404
type:http status:200
type:http status:(2?? | 3??)
![Page 66: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/66.jpg)
➔ A linguagem não assume nada sobre o tipo dos fluxos➔ Tipos são codificados na consulta, não em um schema
externo➔ Existe apenas um fluxo global e filtros sobre ele➔ Somente 8 tipos são tratados pela linguagem
pipes.intelie.com#qconrio
Tipagem estática, mas sem schemaO máximo para evitar problemas
![Page 67: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/67.jpg)
* => count() every minute
pipes.intelie.com
PIPES
#qconrio
AgregaçõesUma abordagem bem diferente do tradicional
count: 123
count: 456
count: 579
![Page 68: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/68.jpg)
* => avg(field#) every minute
pipes.intelie.com
PIPES
#qconrio
AgregaçõesUma abordagem bem diferente do tradicional
mean: 237.44sumw: 205
mean: 1061.08sumw: 57
mean: 416.63sumw: 262
![Page 69: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/69.jpg)
* => avg(response_time#):describe at the end
> {"sumw":2125.0,"mean":2.420657513400854}
pipes.intelie.com
MIXED
#qconrio
AgregaçõesCada agregação tem uma representação intermediária
* => (variance(response_time#)*count()):describe at the end
> {"trees":[{"sumw":2125.0,"mean":2.420657513400854,"m2":3582.7099512146638},{"value":3481}]}
MIXED
* => median(response_time#):describe at the end
> {"sketch":{"e":4.147768903288338E-5,"width":65536,"M":[...],"mask":65535,"total":2125.0}}
MIXED
![Page 70: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/70.jpg)
pipes.intelie.com#qconrio
AgregaçõesToda agregação precisa implementar três conceitos
public interface Aggregation<T> extends Expression<T> { State newState(int flips); Merger newMerger(); T eval(Tree tree, WindowBounds bounds);}
public interface State { void yield(Object obj); Tree flip();}
public interface Merger { void add(Tree tree); void remove(Tree tree); void clear(); Tree get();}
JAVA
![Page 71: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/71.jpg)
pipes.intelie.com#qconrio
AgregaçõesToda agregação precisa implementar três conceitos
intermediate representation
aggregation
window or reducer
tree
merger
event state
reducer
evaluator result
![Page 72: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/72.jpg)
count() == 16
5 minutes
* => count() over last 5 minutes every minute
pipes.intelie.com
PIPES
#qconrio
tempo
Janelas de eventosUsam o mesmo mecanismo para mesclar resultados
![Page 73: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/73.jpg)
count() == 16
5 minutes
3 4 2 2 5 4 2 3
* => count() over last 5 minutes every minute
pipes.intelie.com
PIPES
#qconrio
Janelas de eventosUsam o mesmo mecanismo para mesclar resultados
tempo
![Page 74: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/74.jpg)
➔ Vantagens◆ Quantidade de memória previsível em compile-time◆ Permite janelas muito maiores (mês, ano, etc.)
➔ Desvantagens◆ Output precisa ser compatível com janela◆ Janela precisa ter tamanho múltiplo do output
pipes.intelie.com#qconrio
Janelas de eventosUsam o mesmo mecanismo para mesclar resultados
![Page 75: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/75.jpg)
pipes.intelie.com#qconrio
Por que o nome é Pipes?Unix pipelines
curl http://example.com | grep somestring | wc -l | xargs echo ‘Result:’ SHELL
curl grep wc xargs
![Page 76: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/76.jpg)
WebAccess=> count() by host over last 2 hours every 5 minutes=> @sort _ desc
pipes.intelie.com
PIPES
#qconrio
Encadeamento de queriesA saída de uma torna-se a entrada de outra
filter count sort
![Page 77: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/77.jpg)
Metric|WebAccess=> [ @filter \Metric kind:memory => avg(value#):bytes as mem by host every hour join on host @filter \Metric kind:'cpu load' => avg(value#):format('0%') as cpu by host every hour join on host @filter \WebAccess => count() as requests by host every hour]=> @sort requests desc
pipes.intelie.com
PIPES
#qconrio
Encadeamento de queriesA saída de uma torna-se a entrada de outra
filter
filter
sortfilter
filter
count
avg
avg
![Page 78: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/78.jpg)
pipes.intelie.com#qconrio
Encadeamento de queriesA saída de uma torna-se a entrada de outra
single machine
filter safe semi-safe unsafesafe
reducer machine
mapper machine (1)
filter safesemi-safemapper
unsafesemi-safereducer
mapper machine (2)
filter safesemi-safemapper
safe
![Page 79: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/79.jpg)
pipes.intelie.com#qconrio
Testes, testes e mais testesIsso não deveria ser mais novidade
➔ 17K functional SLOC➔ 21K test SLOC➔ 11K generated SLOC➔ 2260 test cases➔ 100% line coverage➔ 96% branch coverage
![Page 80: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/80.jpg)
1 PROCESSAMENTO DE EVENTOS 101
2 POR QUE MAIS UMA LINGUAGEM DE CEP?
3 DETALHES DA LINGUAGEM
4 DEMOS
pipes.intelie.com
WHAT?
WHY?
HOW?
WTF?
#qconrio
AgendaPorque ter uma agenda sempre dá uma boa impressão
4 DEMOS WTF?
![Page 81: PIPES: Uma linguagem para processamento distribuído de eventos complexos](https://reader035.vdocuments.mx/reader035/viewer/2022081720/5591f6fc1a28ab740b8b4777/html5/thumbnails/81.jpg)
➔ Slides
juanlopes.net/qconrio2014
➔ Site e documentação
pipes.intelie.com
➔ Tutorial interativo
pipes.intelie.com/tutorial
pipes.intelie.com#qconrio
LinksAgora pode anotar