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

PHP distribuído, fault-tolerant e assíncrono - ...

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. Who am I? • Software Developer • Product Owner •

    Leroy Merlin (Laravel) • Keep learning http://zizaco.net Luiz Fernando / Zizaco
  2. 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
  3. Microserviços: Desvantagens - Desenvolvimento trabalhoso - Complexidade operacional - Orquestração

    de serviços - Chamadas remotas lentas - Service discovery - Controle de versão entre serviços
  4. "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
  5. "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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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.
  11. Isolado e Concorrente - Crashes são isolados - Estado e

    dados são isolados - Balanceamento de carga de IO e CPU (eficiente em multicore)
  12. 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
  13. 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
  14. "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"
  15. "Another challenge is deciding how to partition the system into

    microservices. This is very much an art, [...]" - Chris Richardson - microservices.io
  16. 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."
  17. 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