Post on 06-Jun-2015
description
Sapo-Broker & Solr
Luis Neves
<luis.neves@co.sapo.pt>
CodeBits 2007
Lisboa
Agenda
● Sapo-Broker● Event-driven architecture (EDA)● Message Oriented Middleware (MOM)● Introdução a ”Messaging”● Arquitectura● Exemplos
● Solr: Pesquisa de texto livre
Event-driven architecture
● Mudança significativa de estado● minuto 49->50 !!
● Alguns exemplos● mudança de temperatura de x->y● email que passa de recebido->apagado● bilhete que passa de disponível->vendido
Características de EDA
● Os eventos são propagados● Os eventos são ”pontuais”● A comunicação é assíncrona● A granularidade dos eventos é baixa● Os eventos são processados
Importância de EDA
● O produtor desconhece por completo o consumidor
● A ”informação de estado” é reduzida ou mesmo completamente eliminada
● Complementa SOA uma vez que os serviços podem ser iniciados como resposta a eventos
Message-oriented middleware
● Infraestrutura que permite a troca de mensagens em sistemas distríbuidos
● Fornece ”queueing” e ”handling” de mensagens● Bastante usado em soluções de integração entre sistemas díspares
● Exemplos:● IBM MQSeries
● TIBCO
● ActiveMQ
● Sapo-Broker :-)
Modelos de Messaging
● Publish-Subscribe● One-to-Many
● Point-to-Point● One-to-One
Publish-Subscribe
● Baseado em Tópicos● Produtores e Consumidores
● O produtor desconhece os consumidores
● As mensagens são entregues a todos os subscritores
Publish-Subscribe
Vantagens de Pub-Sub
● Ideal para publicar eventos de negócio● apenas os interessados recebem as mensagens● ”Observer pattern” distríbuida
● Promove ”Event Driven Architechture”
Pub-Sub
Demo
Point-to-Point
● Baseado em Queues● Mensagens são enviadas para Queues
● Entregues uma e apenas uma vez● Entregue apenas a um consumidor
● Retenção de mensagens em Queue● Independência temporal● As mensagens são guardadas até serem consumidas ou expiradas
Point-to-Point
Vantagens de P2P
● Ideal para ”load-balancing” de consumidores
● Monitorizar Queues é fácil● Tamanho e ”throughput”
● Re-entrega de mensagens● As falhas parciais são bem toleradas
● por exemplo falhas devido a manutenção
P2P demo
Demo
Sapo-Broker
● Rápido e altamente escalável● rede distribuída de ”brokers” que agem como um só
● Polivalente● Livrarias para C, PHP, Perl, Python e .NET
● Fácil de usar● a configuração necessária é reduzida
● Aberto● Código livre: GPL
Sapo-Broker: Juicy bits
● Wildcard Subscriptions● ”/foo/>”. Tudo o que está abaixo de ”foo”
● ”/foo/#/bar”. Match com ”/foo/x/bar” e ”/foo/y/bar”
● Queues Virtuais● Queues que são populadas por tópicos
● HTTP Endpoint● Mensagens com Prioridade
Broker quickstart
Demo
Se só se lembrarem de uma coisa!
Como é que eu vivia sem isto?!
Pesquisas de texto livre com Solr
”And Now for Something Completely Different”
Lucene<http://lucene.apache.org>
● Livraria para pesquisa de texto livre com elevada “performance”.
● Foco: Indexação + Pesquisa de Documentos● “Documento” é apenas uma lista de tuplos nome+valor
● Não fornece “crawlers” nem extracção de texto
● Análise de texto flexível (tokenizers + token filters)
● 100% Java, sem dependências externas, sem ficheiros de configuração
Solr<http://lucene.apache.org/solr/>
● Servidor de pesquisa baseado em Lucene● Interface XML/HTTP, JSON● Pesquisa facetada (contagem por categoria)● ”Schema” flexível que permite definir campos e tipos de dados
● Hit Highlighting● Arquitectura extensível● Interface Web para administração● Java5, basta colocar um ficheiro WAR no servidor
Aplicação
admin update select
Standard request handler
Custom request handler
XML response writer
JSON response writer
XML Update Handler
CSV Update Handler
Lucene
Documentsuper_name: Mr. Fantasticname: Reed Richardscategory: superheropowers: elasticity
Query Response(matching docs)Query
(powers:agility)
http://solr/update http://solr/select
Ser
vlet
Con
tain
er Solr
WebappIndexer
Adicionar documentos
<add><doc> <field name=“id”>05991</field> <field name=“name”>Peter Parker</field> <field name=“supername”>Spider-Man</field> <field name=“category”>superhero</field> <field name=“powers”>agility</field> <field name=“powers”>spider-sense</field></doc></add>
HTTP POST para http://localhost:8080/solr/update
Eliminar documentos
Apagar por ID, mais eficiente
<delete><id>05591</id><id>32552</id>
</delete>
<delete><query>category:supervillain</query>
</delete>
Apagar por Query
Aplicar as alterações
● Todas as alterações visíveis apenas depois de emitir <commit />
● <optimize /> semelhante ao ”commit” mas rearranja os ficheiros em disco para permitir maior velocidade de pesquisa
<commit /><optimize />
Sintaxe de pesquisa
● carro vermelho● carro OR vermelho● por omissão o operador usado é o OR
● +carro +vermelho -marca:ferrari● carro AND vermelho NOT marca:ferrari
● tipo:desportivo^10 description:desportivo● description:”carro curvas”~100
Sintaxe de pesquisa (cont.)
● releaseDate:[2000 TO 2007]● Pesquisa com wildcards: sup?r, su*r, super*
● carro~● ”Fuzzy search”: Distância de Levenshtein● Semelhança mínima: carro~0.7
● *:*
Solr Quickstart
Demo
Se só se lembrarem de uma coisa!
● Rápido● Poderoso e configurável● Excelente relevância de resultados de pesquisa
● Produto com maturidade● Características semelhantes a produtos que custam muito $$$
● Comunidade fantástica● Programadores de Lucene, peritos em IR● Consultadoria á borla: soluções e problemas são partilhados
Help me!
● WWW● <http://trac.softwarelivre.sapo.pt/broker>● <http://lucene.apache.org/solr>● <http://wiki.apache.org/solr>
● Luis Neves● email: <luis.neves@co.sapo.pt>● xmpp: <lfs_neves@sapo.pt>
Perguntas?
?