microservice on rails - rubyconfbr 2015

68
RUBYCONF 2015 MARCIO MANGAR MICROSERVICES on RAILS Microservices on Rails

Upload: marcio-mangar

Post on 11-Apr-2017

373 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGARMICROSERVICES on RAILS

Microserviceson Rails

Page 2: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Agradecimento

Page 3: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Agenda

Microservices

Ruby on Rails

Page 4: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Apresentação

Marcio Mangar

@mangar github.com/mangar

marcio.mangar [at] gmail.com

http://rga.com

Page 5: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Microserviços

Page 6: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

O que são Microserviços

Page 7: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Service Oriented Architecture

Page 8: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Aplicação Monolítica

Page 9: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes Pedidos

Banco de Dados

def make()

Aplicação Monolitica

Page 10: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes Pedidos

Banco de Dados

def make()

www.sistema

Page 11: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes Pedidos

Banco de Dados

def make()

www.sistema cart.sistema search.sistema

Page 12: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Escalabilidade

Page 13: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

X

Escalabilidade X

Clientes

Pedidos

Load Balancer

Clientes

Pedidos

Clientes

Pedidos. . . . .

Page 14: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Aplicação com Microserviços

Page 15: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes

admin.clientes.

api.clientes.

www.clientes.

Pedidos

admin.pedidos.

api.pedidos.

www.pedidos.

Aplicação com Microserviços

Banco de Dados

Page 16: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Comunicação

Page 17: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes Pedidos

Comunicação

Síncrona Assíncrona

REST

SOAP

WS

ActiveMQ

RabbitMQ

Notificação

Page 18: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Comunicação entre módulos via API

Page 19: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Delivery de conteúdo web

estático via CDN

Page 20: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes

api.clientes.

Servidor Web

api.admin.clientes.

www.clientes.

CDN

admin.clientes.

CDN

Delivery de estático via CDN

Page 21: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Clientes consumindo APIs

Page 22: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

api.orders.

api.clientes.

Servidor Web

api.admin.clientes.

API

Page 23: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Escalabilidade X e Y

Page 24: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

X

Y

Clientes

Load Balancer

Clientes

Pedidos

Load Balancer

Pedidos Pedidos Pedidos Pedidos

Escalabilidade X e Y

Page 25: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Ruby on Rails

Page 26: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Routes

Page 27: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

only / except

resources :customers resources :orders

GET (index, new, edit, show)POST (create)PATH,PUT (update)DELETE (destroy)

Page 28: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

only / except

resources :customers, only: [:index]

GET (index)

Page 29: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

only / except

resources :orders, except: [:destroy, :edit, update]

GET (index, new, edit, show)POST (create)PATH,PUT (update)DELETE (destroy)

Page 30: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

with_options

resources :customers, only: [:index] resources :orders, only: [:index]

Page 31: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

with_options

with_options only: :index do |option| option.resources :customers option.resources :ordersend

Page 32: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

constraints

http://clientes.sistema http://pedidos.sistema

http://www.sistema

Page 33: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

constraints

resources :customers, contraints: { subdomain: 'clientes'}resources :orders, contraints: { subdomain: 'pedidos'}

Page 34: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

constraints

constraints subdomain: 'api' do resources :customersresources :orders

end

Page 35: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

constraints

http://pow.cx/

Page 36: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

namespaces

constraints subdomain: 'api' do resources :customersresources :orders

end

http://api.sistema/customers http://api.sistemas/orders

Page 37: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

namespaces

constraints subdomain: 'api' do resources :customersresources :orders

end

controllers/customer_controllercontrollers/order_controller

Page 38: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

namespaces

constraints subdomain: 'api' do namespace :api do resources :customers resources :orders end

end

http://api.sistema/api/customers http://api.sistemas/api/orders

Page 39: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

namespaces

constraints subdomain: 'api' do namespace :api, path: '/' do resources :customers resources :orders end

end

controllers/api/customer_controllercontrollers/api/order_controller

http://api.sistema/customers http://api.sistemas/orders

Page 40: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Formatos

Page 41: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

content negotiation

http://api.sistema/clientes.json http://api.sistema/clientes.xml

Page 42: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

content negotiation

http://api.sistema/clientes.json http://api.sistema/clientes.xml

Page 43: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

content negotiation

{ 'Accept' => Mime::JSON }

{ 'Accept' => Mime::XML }

HEADER

Page 44: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

respond_to

respond_to do |format| format.json { render json: customers, status: 200 } format.xml { render xml: customers, status: 200 }end

HTTP/1.1 200 OKContent-Type: application/json

Page 45: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Accept-Language

{ 'Accept-Language' => 'en' }

{ 'Accept-Language' => 'pt-BR' }

HEADER

Page 46: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Accept-Language

I18n.locale = request.headers['Accept-Language']

Controller

Page 47: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Accept-Language

gem 'http_accept_language'

locales = I18n.available_localesI18n.locale = http_accept_language.compatible_language_from(locales)

Page 48: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

HTTP

Page 49: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

GET POST PUT

PATCH DELETE

Page 50: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

GET POST PUT

PATCH DELETE

Obter dados sem efeito colateral.

Page 51: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

GET POST PUT

PATCH DELETE

Criar Registro.

Page 52: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

GET POST PUT

PATCH DELETE

Atualizar Registro

Page 53: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

GET POST PUT

PATCH DELETE Remover Registro

Page 54: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

http://api.sistema/customers/delete/123.json

Page 55: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Verbos HTTP

http://api.sistema/customers/delete/123

Page 56: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Retorno sem body

render nothing: true, status: 204

head 204

POST

Page 57: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Versionamento de API

Page 58: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

URI

/v1/customers/1

/v2/customers/1http://api.sistema/ {

Page 59: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

URI

namespace :v1 do resources :customersend

namespace :v2 do resources :customersend

/v1/customers/1

/v2/customers/1http://api.sistema/ {

Page 60: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Header

application/vnd.apocalypse[.version]+json

Page 61: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

URI

/v1/customers/1

/customers/1http://api.sistema/ {

Page 62: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Autenticação

Page 63: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Basic Authentication

Base64.encode64(username:senha)

Page 64: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Basic Authentication

Base64.encode64(username:senha)

{ 'Authorization' => 'Basic XXXXXXXXXX'}

HEADER

Page 65: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Basic Authentication

Base64.encode64(username:senha)

{ 'Authorization' => 'Basic XXXXXXXXXX'}

HEADER

authenticate_or_request_with_http_basic

Decode

Page 66: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Token

Token gerado pelo server Utilizado na comunicação com o cliente

Page 67: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Referencia

Page 68: Microservice on Rails - RubyConfBR 2015

RUBYCONF 2015 MARCIO MANGAR

MICROSERVICES on RAILS

Obrigado

@mangar github.com/mangar

marcio.mangar [at] gmail.com