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

Post on 08-Oct-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Orquestração de microservices com RESTna Americanas.com

Americanas.com

Submarino.com

JefersonLeão

Americanas.com

Submarino.com

Shoptime.com

Soubarato.com

Microservices

ManutençãoEscalabilidade

Inovação

O que acontece com a informação?

API de ClienteProdutos

API de Cliente

API de Carrinho

API de Frete

Cliente

EndereçosProdutos Total

Entregas

Integração

A B C

Integração

Complexidade

APIs Clientes

Código duplicado

MiddlewaresBFFs

RoundtripsIntegração 3GBrowsers

RoundtripsIntegração

Concorrência

JS

Java

Objective C

3GBrowsers

Encadeamentos

Falhas

Encadeamentos

Hackathon

Falcor GraphQL

Modelo ÚnicoOs dados são a APIBackend e Frontend

Linguagem de consultaFiltragem de dadosBackend e Frontend

Olhando para fora

Linguagem de consulta

Encadeamento de chamadas

ParalelismoLatência reduzida

Pragmatismo

A B C

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

Mapeamentos

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

URLs são mapeadas echamadas de recursos

chamadas de recursos

Consultas

Paralelização

ParalelizaçãoHero

Villainhttp://hero.api/hero/Restman

http://villain.api/villain/SOAPLord

APIs

JSfunction loadData() {

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

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

}

from hero with name = "Restman"

from villain with name = "SOAPLord"

Resposta

{ "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

Encadeamento

Hero

Sidekick

http://hero.api/hero/Restman

http://hero.api/sidekick/123

APIs

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

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 })

}

from hero with name = "Restman"

from sidekick with hero = hero.id

Iteração

from hero with name = "Restman"

from villain with name = "SOAPLord"

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

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 }))

}

from search with role = "hero"

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

Lista deParâmetros

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

from hero with name = "restQL Master"

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

Parâmetros

de lista

Parâde lis

ta

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

Filtragem

E quando uma chamada falha?

Filtragem

APIs

E quando uma chamada falha?

AB

C D

Encadeamentos

200 OK

A B

C D

from heroes as hero with name = "$name"

Variáveis

Variáveis

http://restql.server/run-query

Base URL

Namespace

Nome daconsulta

Versionamento

/heroes /1/by-name

Namespace

Nome daconsulta

Variáveis

Versionamento

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

PersistênciaVersionamento

Organização

MongoDB

O restQL gera

pouquíssima

carga no banco

carga no banco

Performance

HttpKit

Clojure

Servidor Assíncrono

O restQL suporta mais carga que as

APIs que consulta

core.async

ExtensibilidadeSistema de plugins

InstrumentaçãoEncoders

Pragmatismo

SimplificaçãoRobustez

Production Ready

Obrigado

Perguntas?

/B2W-BIT/restQL-server

http://restql.b2w.io

top related