orquestração de microservices com rest na americanas · 2017. 6. 2. · r l modelo Único os...

38
Orquestração de microservices com REST na Americanas.com

Upload: others

Post on 08-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Orquestração de microservices com RESTna Americanas.com

Americanas.com

Submarino.com

Page 2: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

JefersonLeão

Americanas.com

Submarino.com

Shoptime.com

Soubarato.com

Page 3: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Microservices

ManutençãoEscalabilidade

Inovação

O que acontece com a informação?

API de ClienteProdutos

Page 4: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

API de Cliente

API de Carrinho

API de Frete

Cliente

EndereçosProdutos Total

Entregas

Page 5: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Integração

A B C

Page 6: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Integração

Complexidade

APIs Clientes

Código duplicado

MiddlewaresBFFs

RoundtripsIntegração 3GBrowsers

Page 7: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

RoundtripsIntegração

Concorrência

JS

Java

Objective C

3GBrowsers

Encadeamentos

Falhas

Page 8: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Encadeamentos

Hackathon

Page 9: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Falcor GraphQL

Modelo ÚnicoOs dados são a APIBackend e Frontend

Linguagem de consultaFiltragem de dadosBackend e Frontend

Olhando para fora

Page 10: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Linguagem de consulta

Encadeamento de chamadas

ParalelismoLatência reduzida

Pragmatismo

Page 11: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

A B C

Page 12: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

http://hero.api/hero/:name hero

Mapeamentos

http://villain.api/villain/:name villain

URLs são mapeadas echamadas de recursos

Page 13: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

chamadas de recursos

Consultas

Paralelização

Page 14: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

ParalelizaçãoHero

Villainhttp://hero.api/hero/Restman

http://villain.api/villain/SOAPLord

APIs

Page 15: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

JSfunction loadData() {

const heroPromise = loadHero({name: "Restman"}) const villainPromise = loadVillain({name: "SOAPLord"})

return Promise.all([heroPromise, villainPromise]) .then(([hero, villain]) => ({ hero: hero, villain: villain })

}

Page 16: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

from hero with name = "Restman"

from villain with name = "SOAPLord"

Resposta

Page 17: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

{ "hero": { "details": { "success": true, "status": 200 }, "result": { "id": "123", "name": "Restman", "power": 9000 } }, "villain": { "details": { "success": true, "status": 200 }, "result": { "name": "Soap Lord", "power": 8000 } }}

Resposta

Encadeamento

Page 18: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Encadeamento

Hero

Sidekick

http://hero.api/hero/Restman

http://hero.api/sidekick/123

APIs

{ "id": "123", "name": "Restman", "power": 9000}

Page 19: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

JSfunction loadData() {

const heroPromise = loadHero({name: "Restman"})

const sidekickPromise = heroPromise.then(hero => loadSidekick({heroId: hero.id}))

return Promise.all([heroPromise, sidekickPromise]) .then(([hero, sidekick]) => ({ hero: hero, sidekick: sidekick })

}

Page 20: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

from hero with name = "Restman"

from sidekick with hero = hero.id

Page 21: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Iteração

from hero with name = "Restman"

from villain with name = "SOAPLord"

Page 22: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Iteração

Search

Herohttp://hero.api/search?role=hero

http://hero.api/hero/Restman

APIs

[ {"name": "Restman"}

{"name": "Microservant"}

{"name": "Clojurian"}]

http://hero.api/hero/Microservant

http://hero.api/hero/Clojurian

Page 23: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

JSfunction loadData() {

const searchPromise = loadSearch({role: "hero"})

const heroesPromise = searchPromise.then(search => { const heroes = search.map(item => loadHero({name: item.name}) return Promise.all(heroes) })

return Promise.all([searchPromise, heroesPromise]) .then(([search, heroes]) => ({ search: search, heroes: heroes }))

}

Page 24: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

from search with role = "hero"

from hero as heroes with name = search.results.name

Lista deParâmetros

Page 25: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Hero

Battle

http://hero.api/hero/Restman

http://battle.api/battle?skill=Semantic&skill=Http&skill=Innovation

APIs

{ "name": "Restman", "skills": [ {"name": "Semantic"}, {"name": "Http"} {"name": "Innovation"} ]}

Lista deParâmetros

Page 26: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

from hero with name = "restQL Master"

from battle as combat with skills = hero.skills -> flatten

Parâmetros

de lista

Page 27: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Parâde lis

ta

from heroes as hero with name = "restQL Master" only skills, name, archEnemy

Filtragem

E quando uma chamada falha?

Page 28: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Filtragem

APIs

E quando uma chamada falha?

AB

C D

Page 29: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Encadeamentos

200 OK

A B

C D

Page 30: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

from heroes as hero with name = "$name"

Variáveis

Page 31: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Variáveis

http://restql.server/run-query

Base URL

Namespace

Nome daconsulta

Versionamento

/heroes /1/by-name

Page 32: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Namespace

Nome daconsulta

Variáveis

Versionamento

/heroes /1/by-name... ?name=Restman

Page 33: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

PersistênciaVersionamento

Organização

MongoDB

O restQL gera

pouquíssima

carga no banco

Page 34: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

carga no banco

Performance

HttpKit

Clojure

Servidor Assíncrono

O restQL suporta mais carga que as

APIs que consulta

core.async

Page 35: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

ExtensibilidadeSistema de plugins

InstrumentaçãoEncoders

Page 36: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Pragmatismo

SimplificaçãoRobustez

Production Ready

Page 37: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Obrigado

Page 38: Orquestração de microservices com REST na Americanas · 2017. 6. 2. · r L Modelo Único Os dados são a API Backend e Frontend Linguagem de consulta Filtragem de dados Backend

Perguntas?

/B2W-BIT/restQL-server

http://restql.b2w.io