Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

20
MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

description

 

Transcript of Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Page 1: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Arquitetura de mensagens assíncrona.

Page 2: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Gerente de Desenvolvimento

Page 3: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

AGENDA➔ Diferença entre sites e plataformas

➔ Organização de recursos

➔ Arquitetura de mensagens

➔ Consistência eventual

➔ Lições aprendidas

➔ Perguntas

Page 4: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Lembramos a diferença de um site e uma plataforma

Arquitetura de mensagens assíncrona.

WebSite

Frontend

Platform API

Mobile Device

DB

Third-party

Page 5: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Os recursos da nossa API estão agrupados lógicamente em departamentos

Cada departamento é independente dos outros, isto significa:● Escolha livre de tecnologia● Deploys independentes● Minimizar dependência

Arquitetura de mensagens assíncrona.

Page 6: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Externamente a API é como uma coisa só, mas está toda dividida em departamentos.

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Items

/items/items/MLBX/descriptions/items/MLBX/relist

Categories

/categories/MLXXX

Questions

/questions/

MercadoLivre API RestFul

Page 7: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Ok, mas como fazemos quando dois ou mais departamentos dividem dados.

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Page 8: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Um departamento tem uma cópia original e propaga as mudanças aos outros, por exemplo, o recurso de items realiza operações básicas (CRUD) e propaga os eventos ao motor de busca para que indexe as publicações.

Arquitetura de mensagens assíncrona.

/items (GET, PUT, POST, DELETE )

MercadoLivre - API ResFul

/sites/MLB/search?q=ipod

Web Servers

Cache

SQL DatabaseSearch Engine

Web Servers

events

Page 9: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

O serviço de fila permite propagar uma mensagem por meio de um feed e a guarda até que alguém a consuma.

Arquitetura de mensagens assíncrona.

Queue Service

items

searchqueue

moderationqueue

items-feed

moderation

search

Page 10: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Como chegam as mensagens?

Arquitetura de mensagens assíncrona.

Page 11: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Dado que as mensagens são assíncronas, elas podem chegar desordenadas e como não se persiste em um único lugar, podem chegar repetidas.

Então as mensagens:● Podem chegar repetidas● Podem chegar desordenadas

A solução é que a ação realizada depois de receber uma mensagem seja idempotente.

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Page 12: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Qual o conteúdo das mensagens?

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Page 13: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Utilizamos 2 tipos de mensagens

Arquitetura de mensagens assíncrona.

Apenas o ID do recurso modificado

Vantagem- Mensagem pequena

Desvantagem- GET para obter os dados

Toda a entidade com id de versão

Vantagem- Não necessita um GET ao recurso

Desvantagem- A mensagem é mais pesada

Page 14: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

Um poucos mais de teoria

Arquitetura de mensagens assíncrona.

Page 15: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Não forçar uma consistência nos ajuda a obter

● Latência baixa● Alta disponibilidade e tolerância a falhas● Facilidade para escalar

Devido a nossa plataforma estar altamente distribuída e utilizar mensagens assíncronas, existe uma consistência eventual.

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Page 16: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

E para que podemos utilizar esta arquitetura?

Arquitetura de mensagens assíncrona.

Page 17: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Diferenças entre o hábito de guardar dados em uma tabela e processar depois X utilizar uma fila de mensagens.

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Jobs

QueueServices

Workers

Workers

ID Status Work Date

1 Pending ..... 12/31

2 Pending ..... 12/31

3 Done .... 12/31

4 Done ..... 12/31

Page 18: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

MercadoLivre Developers Conference

O que aprendemos no caminho

Arquitetura de mensagens assíncrona.

Page 19: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Trabalhe offline

● Minimizar o trabalho para responder cada request.● Tudo o que pode ser feito offline, não faça online.

Guardar informações redundantes

● Se os dados têm múltiplas formas de apresentação, guarde todas elas.● O espaço em disco e memória é mais barato que fazer o usuário esperar.

Cachear tudo

● Informação da base de dados.● Guardar dados pré-carregados.

MercadoLivre Developers Conference Arquitetura de mensagens assíncrona.

Page 20: Arquitetura de Mensagens Assíncronas - MeliDevConf 2013 - SP

Perguntas?

Pablo Moretti@elsantob