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

Construindo aplicações orientas a eventos utili...

Construindo aplicações orientas a eventos utilizando Serverless e Python

Discutiremos conceitos de uma arquitetura orientada a eventos, com suas vantagens e desafios, e como microsserviços se beneficiam dela. A nível de implantação, vamos conhecer o padrão serverless (com foco em AWS Serverless) e como podemos nos utilizar do Python nessa arquitetura.

Avatar for Paula Grangeiro

Paula Grangeiro

November 06, 2020

More Decks by Paula Grangeiro

Other Decks in Programming

Transcript

  1. print('Paula Grangeiro') Desenvolvedora Full Stack, especializada em backend (construção de

    APIs e microsserviços). Atualmente, consultora sênior na Thoughtworks [email protected] paula.grangeiro @paulagrangeiro /paulagrangeiro
  2. Publish/Subscriber class CancelledAccountEventBus : def __init__(self, subscribers : list): self.subscribers

    = subscribers or [] def publish(self, event ): for subscriber in self.subscribers: subscriber.notify( event) class CancelAccountCommand : event_bus = CancelledAccountEventBus() def execute(self): # do something event_bus.publish( event)
  3. Arquitetura orientada a Eventos Event Notification + Desacoplamento entre serviços

    - O serviço de origem não tem conhecimento sobre o estado
  4. [ {"event_id": "01EP5A9N084BVKVRE5R1E0ZXVK", "account_id": "01EP5ABR58E4ZCGVVE5FZW27WM", "type": "CREATED ACCOUNT", "created_at": 1604348875,

    "created_by": "01EP5AC362VR3PT6B69X83XVZ5"}, {"event_id": "01EP5B2XH1Z7RY2HRN2VXHJ1DF", "account_id": "01EP5ABR58E4ZCGVVE5FZW27WM", "type": "BLOCKED ACCOUNT", "created_at": 1604352475, "created_by": "01EP5AC362VR3PT6B69X83XVZ5"}, {"event_id": "01EP5B2XH1Z7RY2HRN2VXHJ1DF", "account_id": "01EP5ABR58E4ZCGVVE5FZW27WM", "type": "CANCELLED ACCOUNT", "created_at": 1606940875, "created_by": "01EP5AC362VR3PT6B69X83XVZ5"} ] Arquitetura orientada a Eventos Event Sourcing + Histórico + Reconstruir o estado - Complexidade
  5. Arquitetura orientada a eventos Componentes, comunicação, processamento e persistência são

    definidos para suportar os eventos. Um evento compreende um estado de uma entidade de domínio. Um conjunto de eventos define a linha do tempo do mesmo. Eventos nessa arquitetura são representados por objetos imutáveis.
  6. Serverless Containers stateless, sensibilizados através de eventos, que permitem executar

    código backend sem provisionamento ou configuração de servidores. Solução de infra estrutura terceirizada. FaSS
  7. FaSS AWS Lambda É possível executar qualquer solução que seja

    suportada por sistemas Unix. AWS é responsável por alocar recursos, levantar e destruir os containers de maneira transparente. São realizadas configurações máximas de concorrência, memória e timeout. Os recursos são alocados de acordo com a necessidade. O código é deployado através de pacotes .zip. A cada novo deploy é gerada automaticamente uma versão.
  8. Python em AWS Lambda Python é a linguagem mais performática

    (cold start). A linguagem fica atrás apenas de Rust, Go e Haskell. Não é preciso mais lidar com as limitações conhecidas do GIL, uma vez que a concorrência é delegada à arquitetura de infraestrutura.
  9. # app.py from flask import Flask app = Flask(__name__) @app.route("/")

    def hello(): return "Hello World!" service: serverless-flask plugins: - serverless-python-requirements - serverless-wsgi custom: wsgi: app: app.app packRequirements: false pythonRequirements: dockerizePip: non-linux provider: name: aws runtime: python3.6 stage: dev region: us-east-1 functions: app: handler: wsgi.handler events: - http: ANY / - http: 'ANY {proxy+}'
  10. fontes • Desenvolvendo sistemas gigantes na internet com arquiteturas baseadas

    em eventos - Paula Santana • O que é arquitetura orientada a eventos? • What do you mean by “Event-Driven”? • GOTO 2017 • The Many Meanings of Event-Driven Architecture • Martin Fowler • Event Sourcing • Serverless Architectures • GOTO 2017 • Designing for the Serverless Age • Gojko Adzic • Benchmarking AWS Lambda runtimes in 2019