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 (: