Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apresentação Nameko Grupy-SP

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

Apresentação Nameko Grupy-SP

Avatar for victorpb

victorpb

July 04, 2019

More Decks by victorpb

Other Decks in Technology

Transcript

  1. Hello! Eu sou Victor Pereira Formado em Matemática, porém apaixonado

    por tecnologia, atualmente trabalho como Python Developer na Sky.One
  2. Nameko é um framework para a construção de micro serviços

    em Python, onde permite você focar na lógica de negócio.
  3. Micro serviço é? Um micro serviço é uma pequena porção

    de software que roda de maneira independente, focada em um único e pequeno (daí o nome micro) conjunto de atividades dentro de um conjunto de serviços muito maior, formando uma arquitetura de micro serviços
  4. Como o Nameko pode ajudar? • Escrever seu backend como

    micro serviços • Não ter muita preocupação ao escalar os micros serviços • Você quer escrever seu micro serviço em python
  5. Como posso fazer isso? • RPC usando AMQP • Eventos

    assíncronos usando AMQP (Publish-Subscriber) • Métodos HTTP • Usando temporizador
  6. RPC • RPC - Remote Procedure Call • AMQP -

    Advanced Message Queuing Protocol • RabbitMQ - Sistema de gerenciamento de mensagens
  7. Exemplo from nameko.rpc import rpc, RpcProxy class ServiceY: name =

    "service_y" @rpc def append_identifier(self, value): return "{}-y".format(value) class ServiceX: name = "service_x" y = RpcProxy("service_y") @rpc def remote_method(self, value): res = "{}-x".format(value) return self.y.append_identifier(res)
  8. Publish-Subscriber Permite a um aplicativo anunciar eventos para vários consumidores

    de seu interesse assincronamente, sem acoplar os remetentes aos destinatários.
  9. Exemplo from nameko.events import EventDispatcher, event_handler from nameko.rpc import rpc

    class ServiceA: """ Event dispatching service. """ name = "service_a" dispatch = EventDispatcher() @rpc def dispatching_method(self, payload): self.dispatch("event_type", payload) class ServiceB: """ Event listening service. """ name = "service_b" @event_handler("service_a", "event_type") def handle_event(self, payload): print("service b received:", payload)
  10. Exemplo import json from nameko.web.handlers import http class HttpService: name

    = "http_service" @http('GET', '/get/<int:value>') def get_method(self, request, value): return json.dumps({'value': value}) @http('POST', '/post') def do_post(self, request): return u"received: {}".format(request.get_data(as_text=True)) @http('GET,PUT,POST,DELETE', '/multi') def do_multi(self, request): return request.method
  11. Exemplo from nameko.timer import timer class Service: name ="service" @timer(interval=1)

    def ping(self): # method executed every second print("pong")
  12. Injeção de dependência import boto3 class SqsSend(DependencyProvider): def __init__(self, url,

    region="eu-west-1", **kwargs): self.url = url self.region = region super(SqsSend, self).__init__(**kwargs) def setup(self): self.client = boto3.client('sqs', region_name=self.region) def get_dependency(self, worker_ctx): def send_message(payload): # assumes boto client is thread-safe for this action, because it # happens inside the worker threads self.client.send_message( QueueUrl=self.url, MessageBody=payload ) return send_message from nameko.rpc import rpc, RpcProxy from sqs_sender import SqsSend class ServiceY: name = "service_y" sqs_send = SqsSend(url) @rpc def append_identifier(self, payload): return sqs_send(payload)
  13. Quando usar o nameko? • Quando todos os serviços são

    de uso exclusivo de quem desenvolve • Você não quer se preocupar muito com a escalabilidade • Seus serviços estão dentro de uma rede controlada • Quer implementar ele em Python
  14. Quando NÃO usar o nameko? • Quando o recurso do

    serviço precisa ser acessado por terceiros • Seus serviços NÃO estão dentro de uma rede controlada, por exemplo acesso pelo browser