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

PHP distribuído, fault-tolerant e assíncrono - Microserviços vs Monolito

Zizaco
March 28, 2017

PHP distribuído, fault-tolerant e assíncrono - Microserviços vs Monolito

PHP distribuído, fault-tolerant e assíncrono
"Microserviços vs Monolito": O melhor dos 2 mundos

Vídeo da Apresentação (2017/03/28): https://youtu.be/3alX9_RAouw
Apresentado em: https://phpexperience2017.imasters.com.br/

Who am I?
Luiz Fernando / Zizaco
http://zizaco.net

Monolíto/Camadas vs Microserviços

Microserviços:
- Vantagens
- Escalabilidade
- Melhor utilização de recursos
- Isolamento de falhas
- Deploy parcial
- Equipes focadas em cada serviço
- Organização do codebase
- Agnóstico de tecnologia
- Desvantagens
- Desenvolvimento trabalhoso
- Complexidade operacional
- Orquestração de serviços
- Chamadas remotas lentas
- Service discovery
- Controle de versão entre serviços

"The code became very complex to read and nobody understood the platform end to end. This caused pull requests and code reviews to be ineffective [...] We were also duplicating effort across teams since there were no shared components."
- By Avi Cavale, Shippable.com

"To solve these issues, we switched to a ‘mono repo’ a few months ago. This meant that even though our services are still developed and deployed independently, the code for all services lives in one repository."
- By Avi Cavale, Shippable.com

Microserviços MonoRepo:
- Vantagens
- Escalabilidade
- Melhor utilização de recursos
- Isolamento de falhas
- Deploy parcial
- Equipes focadas em cada serviço
- Organização do codebase
- Agnóstico de tecnologia
- Desvantagens
- Desenvolvimento trabalhoso
- Complexidade operacional
- Orquestração de serviços
- Chamadas remotas lentas
- Service discovery
- Controle de versão entre serviços

Command Bus Architecture:
- Vantagens
- Escalabilidade
- Melhor utilização de recursos
- Isolamento de falhas
- Deploy parcial
- Equipes focadas em cada serviço
- Organização do codebase
- Agnóstico de tecnologia
- Desvantagens
- Desenvolvimento trabalhoso
- Complexidade operacional
- Orquestração de serviços
- Chamadas remotas lentas
- Service discovery
- Controle de versão entre serviços

Distributed Application, Definição:
- Multiplos nodes interconectados.
- Não existe memória física compartilhada entre os nodes.
- Toda a comunicação entre os nodes é realizada via troca de mensagens.
- Concorrência de componentes.
- Não existe "lock global".
- Tolerante a falha de um componente.

Upswarm:

Multi-processed, async, fault-tolerant micro-framework
for writing distributed service-oriented PHP applications.

https://github.com/Zizaco/upswarm

[Live Demo]

Isolado e Concorrente
- Crashes são isolados
- Estado e dados são isolados
- Balanceamento de carga de IO e CPU (eficiente em multicore)

Broker
(Ex: RabbitMQ, Beanstalkd, IronMQ, Kafka)
Brokerless
(Ex: ZeroMQ)

Performance?

[Live Demo]

Upswarm / Distributed App:
- Vantagens
- Escalabilidade
- Melhor utilização de recursos
- Isolamento de falhas
- Deploy parcial
- Equipes focadas em cada serviço
- Organização do codebase
- Agnóstico de tecnologia
- Desvantagens
- Desenvolvimento trabalhoso
- Complexidade operacional
- Orquestração de serviços
- Chamadas remotas lentas
- Service discovery
- Controle de versão entre serviços

"Good modular structure is useful in any program, but becomes exponentially more important as the software grows in size. Perhaps more importantly, it grows more in importance as the team developing it grows in size."
- Martin Fowler about "Microservice Trade-Offs"

Arquitetura em camadas

"Another challenge is deciding how to partition the system into microservices.This is very much an art, [...]"
- Chris Richardson - microservices.io

Arquitetura "self-contained"

Conway’s Law: "The architecture of the system will reflect the organization that produced it. Parts of the organization that don’t talk together will likely produce software that doesn’t talk together."

Fontes:
Our Journey to Microservices: Mono Repo vs Multiple Repos - Avi Cavale - Shippable.com
http://blog.shippable.com/our-journey-to-microservices-and-a-mono-repository

ZeroMQ: Broker vs Brokerless
http://zeromq.org/whitepapers:brokerless

We use one repository at google - Jeremy Wall - Google
https://news.ycombinator.com/item?id=7020584

Microservices: A definition of this new architectural term - Martin Fowler
https://martinfowler.com/articles/microservices.html

Micro-Services: Is HTTP the only way? - Ben Shaw
https://www.youtube.com/watch?v=O1qaoykYIXY

PHP Framework Benchmark - kenjis
https://github.com/kenjis/php-framework-benchmark

Distributed computing - Wikipedia
https://en.wikipedia.org/wiki/Distributed_computing

What Exactly is DevOps? - Neil Garnichaud
http://www.drdobbs.com/architecture-and-design/what-exactly-is-devops/240009147

Building Microservice Architectures - Neal Ford
https://www.youtube.com/watch?v=pjN7CaGPFB4

Microservice Trade-Offs - Martin Fowler
https://martinfowler.com/articles/microservice-trade-offs.html

Trabalhe conosco (:

Zizaco

March 28, 2017
Tweet

More Decks by Zizaco

Other Decks in Technology

Transcript

  1. PHP distribuído,
    fault-tolerant e
    assíncrono
    "Microserviços vs Monolito"
    O melhor dos 2 mundos

    View Slide

  2. Who am I?
    ● Software Developer
    ● Product Owner
    ● Leroy Merlin (Laravel)
    ● Keep learning
    http://zizaco.net
    Luiz Fernando / Zizaco

    View Slide

  3. Monolíto/Camadas vs Microserviços

    View Slide

  4. Monolíto/Camadas vs Microserviços

    View Slide

  5. Microserviços: Vantagens
    - Escalabilidade
    - Melhor utilização de recursos
    - Isolamento de falhas
    - Deploy parcial
    - Equipes focadas em cada serviço
    - Organização do codebase
    - Agnóstico de tecnologia

    View Slide

  6. Microserviços: Desvantagens
    - Desenvolvimento trabalhoso
    - Complexidade operacional
    - Orquestração de serviços
    - Chamadas remotas lentas
    - Service discovery
    - Controle de versão entre serviços

    View Slide

  7. Monolíto/Camadas vs Microserviços
    Microservices
    Monolithic

    View Slide

  8. View Slide

  9. Monolíto/Camadas vs Microserviços
    Microservices
    Mono Repo
    Microservices
    Monolithic

    View Slide

  10. "The code became very complex to
    read and nobody understood the
    platform end to end. This caused pull
    requests and code reviews to be
    ineffective [...] We were also
    duplicating effort across teams since
    there were no shared components."
    - By Avi Cavale, Shippable.com

    View Slide

  11. "To solve these issues, we switched to
    a ‘mono repo’ a few months ago. This
    meant that even though our services
    are still developed and deployed
    independently, the code for all services
    lives in one repository."
    - By Avi Cavale, Shippable.com

    View Slide

  12. Monolíto/Camadas vs Microserviços
    Microservices
    Mono Repo
    Microservices
    Monolithic

    View Slide

  13. Microserviços MonoRepo: Vantagens
    - Escalabilidade
    - Melhor utilização de recursos
    - Isolamento de falhas
    - Deploy parcial
    - Equipes focadas em cada serviço
    - Organização do codebase
    - Agnóstico de tecnologia

    View Slide

  14. Microserviços MonoRepo: Desvantagens
    - Desenvolvimento trabalhoso
    - Complexidade operacional
    - Orquestração de serviços
    - Chamadas remotas lentas
    - Service discovery
    - Controle de versão entre serviços

    View Slide

  15. Monolíto/Camadas vs Microserviços
    Microservices
    Mono Repo
    Microservices
    Monolithic

    View Slide

  16. View Slide

  17. View Slide

  18. Monolíto/Camadas vs Microserviços
    Monolithic
    Microservices
    Mono Repo
    Microservices
    Command Bus
    Based Architecture

    View Slide

  19. Command Bus Arch.: Vantagens
    - Escalabilidade
    - Melhor utilização de recursos
    - Isolamento de falhas
    - Deploy parcial
    - Equipes focadas em cada serviço
    - Organização do codebase
    - Agnóstico de tecnologia

    View Slide

  20. Command Bus Arch.: Desvantagens
    - Desenvolvimento trabalhoso
    - Complexidade operacional
    - Orquestração de serviços
    - Chamadas remotas lentas
    - Service discovery
    - Controle de versão entre serviços

    View Slide

  21. Monolíto/Camadas vs Microserviços
    Monolithic
    Microservices
    Mono Repo
    Microservices
    Command Bus
    Based Architecture

    View Slide

  22. Monolíto/Camadas vs Microserviços
    Monolithic
    Microservices
    Mono Repo
    Microservices
    Command Bus
    Based Architecture
    Distributed
    Application

    View Slide

  23. Monolíto/Camadas vs Microserviços
    Monolithic
    Microservices
    Mono Repo
    Microservices
    Command Bus
    Based Architecture
    Distributed
    Application

    View Slide

  24. Distributed Application
    - Multiplos nodes interconectados.
    - Não existe memória física compartilhada entre os
    nodes.
    - Toda a comunicação entre os nodes é realizada via
    troca de mensagens.
    - Concorrência de componentes.
    - Não existe "lock global".
    - Tolerante a falha de um componente.

    View Slide

  25. Multi-processed, async, fault-tolerant micro-framework
    for writing distributed service-oriented PHP applications. https://github.com/Zizaco/upswarm

    View Slide

  26. Distributed Application
    Server
    Client
    Client
    Client

    View Slide

  27. Distributed Application
    Client
    Client
    Client

    View Slide

  28. Live Demo

    View Slide

  29. Live Demo

    View Slide

  30. Live Demo

    View Slide

  31. Live Demo

    View Slide

  32. Live Demo

    View Slide

  33. Live Demo

    View Slide

  34. Live Demo

    View Slide

  35. Live Demo

    View Slide

  36. Live Demo

    View Slide

  37. Live Demo

    View Slide

  38. Live Demo

    View Slide

  39. Live Demo

    View Slide

  40. Live Demo

    View Slide

  41. Live Demo

    View Slide

  42. Live Demo

    View Slide

  43. Live Demo

    View Slide

  44. Live Demo

    View Slide

  45. Live Demo

    View Slide

  46. Live Demo

    View Slide

  47. Live Demo

    View Slide

  48. Distributed Application
    Server
    Client
    Client
    Client
    Client

    View Slide

  49. Distributed Application
    Server
    Client
    Client
    Client
    Server
    Client

    View Slide

  50. Distributed Application
    Server
    Client
    Client
    Client
    Server
    Client
    ZeroMQ

    View Slide

  51. Distributed Application
    Client
    Client
    Client
    Client

    View Slide

  52. Distributed Application
    Client
    Client
    Client
    Client

    View Slide

  53. Distributed Application
    Client
    HttpServer
    Service
    Products
    Controller
    Categories
    Controller
    Repository
    Service
    Permissions
    Service

    View Slide

  54. Distributed Application
    Client
    HttpServer
    Service
    Products
    Controller
    Categories
    Controller
    Repository
    Service
    Permissions
    Service

    View Slide

  55. Isolado e Concorrente
    - Crashes são isolados
    - Estado e dados são isolados
    - Balanceamento de carga de IO e CPU
    (eficiente em multicore)

    View Slide

  56. Distributed Application
    Client
    Client
    Client
    Client

    View Slide

  57. Distributed Application
    Client
    Client
    Client
    Client
    Server
    Server
    Server

    View Slide

  58. Distributed Application
    Client
    Client
    Client
    Client
    Server
    Server
    Server
    ZeroMQ

    View Slide

  59. Distributed Application
    Broker
    (Ex: RabbitMQ, Beanstalkd, IronMQ, Kafka)
    Brokerless
    (Ex: ZeroMQ)

    View Slide

  60. Distributed Application
    Client
    Client
    Client
    Client
    Server
    Server
    Server

    View Slide

  61. Performance?

    View Slide

  62. Live Demo

    View Slide

  63. Live Demo

    View Slide

  64. View Slide

  65. Upswarm / Distributed App.: Vantagens
    - Escalabilidade
    - Melhor utilização de recursos
    - Isolamento de falhas
    - Deploy parcial
    - Equipes focadas em cada serviço
    - Organização do codebase
    - Agnóstico de tecnologia

    View Slide

  66. Upswarm / Distributed App.: Desvantagens
    - Desenvolvimento trabalhoso
    - Complexidade operacional
    - Orquestração de serviços
    - Chamadas remotas lentas
    - Service discovery
    - Controle de versão entre serviços

    View Slide

  67. View Slide

  68. "Good modular structure is useful in any
    program, but becomes exponentially
    more important as the software grows in
    size. Perhaps more importantly, it grows
    more in importance as the team
    developing it grows in size."
    - Martin Fowler about "Microservice Trade-Offs"

    View Slide

  69. src
    Http
    WebServerService.php
    ProductCatalog
    CatalogService.php
    Cart
    CartService.php
    Product.php
    Category.php
    Cart.php
    ...
    Arquitetura em
    camadas

    View Slide

  70. src
    Http
    WebServerService.php
    ProductCatalog
    Cart
    CartService.php
    Cart.php
    ...
    Infrastructure
    Persistance
    Caching
    Arquitetura em
    camadas

    View Slide

  71. src
    Http
    WebServerService.php
    ProductCatalog
    Cart
    PersistanceService.php
    DataMapperInterface.php
    Infrastructure
    Persistance
    Product
    Cart
    Arquitetura em
    camadas

    View Slide

  72. "Another challenge is deciding how to
    partition the system into microservices.
    This is very much an art, [...]"
    - Chris Richardson - microservices.io

    View Slide

  73. src
    Http
    WebServerService.php
    ProductCatalog
    CatalogService.php
    Product.php
    Category.php
    Cart.php
    Arquitetura
    "self-contained"
    Persistance
    Cart
    CartService.php
    Caching

    View Slide

  74. src
    Http
    WebServerService.php
    ProductCatalog
    CatalogService.php
    Product.php
    Category.php
    PersistanceService.php
    Arquitetura
    "self-contained"
    Persistance
    ProductDataMapper.php
    CategoryDataMapper.php

    View Slide

  75. Conway’s Law: "The architecture of
    the system will reflect the
    organization that produced it. Parts of
    the organization that don’t talk
    together will likely produce software
    that doesn’t talk together."

    View Slide

  76. Fontes
    Our Journey to Microservices: Mono Repo vs Multiple Repos - Avi Cavale - Shippable.com
    http://blog.shippable.com/our-journey-to-microservices-and-a-mono-repository
    ZeroMQ: Broker vs Brokerless
    http://zeromq.org/whitepapers:brokerless
    We use one repository at google - Jeremy Wall - Google
    https://news.ycombinator.com/item?id=7020584
    Microservices: A definition of this new architectural term - Martin Fowler
    https://martinfowler.com/articles/microservices.html
    Micro-Services: Is HTTP the only way? - Ben Shaw
    https://www.youtube.com/watch?v=O1qaoykYIXY
    PHP Framework Benchmark - kenjis
    https://github.com/kenjis/php-framework-benchmark
    Distributed computing - Wikipedia
    https://en.wikipedia.org/wiki/Distributed_computing
    What Exactly is DevOps? - Neil Garnichaud
    http://www.drdobbs.com/architecture-and-design/what-exactly-is-devops/240009147

    View Slide

  77. Fontes
    Building Microservice Architectures - Neal Ford
    https://www.youtube.com/watch?v=pjN7CaGPFB4
    Microservice Trade-Offs - Martin Fowler
    https://martinfowler.com/articles/microservice-trade-offs.html

    View Slide

  78. Trabalhe conosco (:
    Back-end
    Front-end
    UX
    [email protected]
    assunto: [vaga]

    View Slide