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

Implementando microserviços confiáveis baseados em PHP

Junior Grossi
December 12, 2020

Implementando microserviços confiáveis baseados em PHP

Event: Darkmira Tour PHP 2020

Arquitetura de microserviços é totalmente possível usando PHP. PHP tem crescido e melhorado cada vez mais, se tornando uma linguagem totalmente atualizada e com excelente performance. Vamos entender alguns novos conceitos e tecnologias que irão nos ajudar a desenvolver microserviços para durarem.

Junior Grossi

December 12, 2020
Tweet

More Decks by Junior Grossi

Other Decks in Programming

Transcript

  1. Tentando explicar de forma simples conceitos complexos do mundo da

    programação. 1º episódio sobre Clean Architecture em produção
  2. EU IREI COMPARTILHAR: o que tenho aprendido nos últimos 2

    anos o que estou aprendendo no momento
  3. "microserviços" é um estilo de arquitetura ele não irá resolver

    problemas que você não tem ainda! (pode ser que você nunca os tenha)
  4. COMUNICAÇÃO ASSÍNCRONA Frontend API Gateway Queue Service A Service B

    Service C book for a class BOOKING_REQUEST 202 (listening to B_R event) GET /v2/bar {"bar":"123"} BOOKING_CONFIRMED results via websockets if required (listening to B_C event) Send notification
  5. COMUNICAÇÃO ASSÍNCRONA um serviço "subscribe" a um evento usa os

    dados (payload) para fazer alguma coisa event identif er "BOOKING_REQUEST" event payload { "userId": "1234567890", "classId": "2345", "classStartDate": "2020-05-14T15 19 21+00 00" }
  6. INVESTIGAÇÃO DE BUG Frontend API Gateway Queue Service A Service

    B Service C book for a class BOOKING_REQUEST 202 (listening to B_R event) GET /v2/bar {"bar":"123"} BOOKING_CONFIRMED results via websockets if required (listening to B_C event) Send notification
  7. NÃO ECONOMIZE NOS LOGS log de todos os requests enviados

    e recebidos log de todas as respostas enviadas e recebidas log de todos os dados de eventos emitidos log de todos os dados de eventos consumidos log de todas as decisões importantes "em microserviços, logs são tipo um best-friend."
  8. RESPONSABILIDADE cada serviço precisa de uma razão pra existir é

    permitido duplicar código, mas não dados precisa de algum dado? peça outro serviço! pense 2x antes de sincronizar/copiar dados entre serviços
  9. O QUE EVITAR: 2 ou mais serviços compartilhando o mesmo

    DB (quem mudou o dado? "source of truth"?) implementação parcial de domínio (quando vc tem lógicas iguais/parecidas em serviços diferentes / legado)
  10. PRODUTIVIDADE evitar a "sopa de linguagens" (2 ou 3 no

    máximo) vc contratou a Maria. ela é fodassa em PHP ela começou um serviço novo em Scala ela continua mantendo o serviço de boas Maria sai da empresa agora vc precisa de 2 pessoas: PHP + Scala
  11. PRODUTIVIDADE usar arquitetura de software e padrões similares mais fácil

    de lidar com vários projetos mais fácil de lidar com várias linguagens mais fácil de manter mais fácil de integrar "DDD/Clean Architecture" se encaixam muito bem!
  12. PRODUTIVIDADE compartilhe processos entre serviços compartilhe padrões Git/VCS padrões docker

    compartilhe práticas de CI/CD compartilhe processos de deploy
  13. ARQUITETURA DE SOFTWARE precisamos de algo flexível precisamos de algo

    organizado precisamos de qualidade precisamos de poder
  14. Robert C. Martin "The goal of software architecture is to

    minimize the human resources required to build and maintain the required system."
  15. ARQUITETURA EM CAMADAS "deixe opções em aberto" (acredite, elas mudam)

    camadas independentes casos de uso independentes comandos independentes
  16. OBJETIVOS: independente de framework (framework-as-a-tool) testável sem qualquer elemento externo

    independente de UI (Web / Console) independente de banco de dados independente de qualquer agente externo
  17. SCREAMING ARCHITECTURE "a arquitetura fala por si só" sobre o

    que é seu serviço? (resposta pelo código!) pagamentos? reservas? autenticação? ou é uma aplicação escrita em Laravel, Slim ou Symfony?
  18. THE DEPENDENCY RULE "source code dependencies must point only inward,

    toward higher-level policies" ninguém de uma camada "interna" pode saber algo concreto de uma camada "externa".
  19. Coroutine based Async PHP programming framework Build high-performance, scalable, concurrent

    TCP, UDP, Unix Socket, HTTP, WebSocket services with PHP and fluent Coroutine API. https://www.swoole.co.uk/
  20. AVISO ⚠ use somente para novos serviços (não é uma

    boa ideia pro legadão que vc trabalha)
  21. PRA FICAR DE ALERTA! ☢ variable scope / DI Container

    (singleton) exception handling static content
  22. install RoadRunner $ make psr worker.php while ($request = $psr7

    acceptRequest()) { $response = new \Zend\Diactoros\Response(); $response getBody() write("hello world"); $psr7 respond($response); } conf g f le http: address: :8080 workers: command: "php psr worker.php" pool: numWorkers: 4 run $ ./rr serve v d
  23. Coroutine Based Concurrency with PHP and Swoole Bruce Dou |

    @doubaokun Feb 2020 PHPUK2020 https://speakerdeck.com/doubaokun/coroutine-based-concurrency-with-php-and-swoole