O documento resume as principais lições aprendidas ao atualizar um projeto do PHP 5 para o PHP 7. Em três frases: A migração enfrentou problemas com extensões incompatíveis e bugs não detectados pelos testes. É essencial preparar o código para facilitar atualizações, realizar profiling e não supor que o PHP 7 trará melhorias de performance automaticamente. Testes completos e monitoramento cuidadoso são fundamentais para uma migração bem-sucedida.
4. Gabriel Caruso
Evangelista PHP (internals e externals)
BackEnd Developer na Leroy Merlin
Membro da comunidade PHPSP
@carusogabriel
TDC SP 2018 - TRILHA PHP ESSENCIAL
20. Migração PHP 7
Iniciada em Julho/2016 - Período 2 semanas entre as releases (Slack)
Planejamento inicial
◦ Reescrita do Mongolid para suportar a nova extensão (ext-mongodb) ✔
◦ Atualizar o Mongolid no projeto
◦ Atualização dos containers Docker
◦ Correção de breaking changes e testes unitários
◦ Atualizar versão do ElasticBeanstalk AWS
Objetivo
◦ Melhorar response time da aplicação
◦ Reduzir o número de maquinas na AWS
◦ Possibilitar uso de novas funcionalidades
TDC SP 2018 - TRILHA PHP ESSENCIAL
22. ext-mongodb (^1.1) estava em WIP
Objetos não tinham suporte a serialização
Não era possível estender suas classes (final)
Implementação diferente do objeto de datas (UTCDateTime)
TDC SP 2018 - TRILHA PHP ESSENCIAL
24. Suporte PHP 7 na AWS
Elastic Beanstalk
◦ Solução PaaS na AWS para gerenciar aplicação web
◦ Permite customizações nível AMI
◦ Criação AMI custom a partir de um .sh de setup
TDC SP 2018 - TRILHA PHP ESSENCIAL
25. Incompatibilidade entre extensões
TDC SP 2018 - TRILHA PHP ESSENCIAL
• Processamento
paralelo de arquivos
lote
• Um arquivo por loja
• ~30 lojas
pcntl_*
• Persistência com
MongoDB
• Usado pelo ODM
ext-mongodb
26. Importância dos testes
Testes unitários ✔
Testes em ambiente staging ✔
Testes com usuários internos 💣
TDC SP 2018 - TRILHA PHP ESSENCIAL
27. Monitoramento em produção
Testes unitários ✔
Testes em ambiente staging ✔
Testes com usuários internos 💣 ✔
Erros no NewRelic ✔
Vendas do e-commerce 💣
TDC SP 2018 - TRILHA PHP ESSENCIAL
29. Migração PHP 7
Iniciada em Julho/2016 - Período 2 3 semanas entre as releases (Slack)
Planejamento inicial
◦ Reescrita do Mongolid para suportar a nova extensão (ext-mongodb) ✔
◦ Atualizar o Mongolid no projeto
◦ Criar serializer/converter
◦ Workaround ext-mongodb em threads
◦ Atualização dos containers Docker
◦ Correção de breaking changes e testes unitários
◦ Mais correções e bugs
◦ Atualizar versão do ElasticBeanstalk AWS
◦ Tratar falso positivos
TDC SP 2018 - TRILHA PHP ESSENCIAL
30. Migração PHP 7
Objetivo
◦ Melhorar response time da aplicação
◦ Reduzir o número de maquinas na AWS
◦ Possibilitar uso de novas funcionalidades
TDC SP 2018 - TRILHA PHP ESSENCIAL
31. E a performance?
ANTES (8 INSTANCIAS) DEPOIS (12 INSTANCIAS)
TDC SP 2018 - TRILHA PHP ESSENCIAL
32. Migração PHP 7
Objetivo
◦ Melhorar response time da aplicação ❌
◦ Reduzir o número de maquinas na AWS ❌
◦ Possibilitar uso de novas funcionalidades ✔
TDC SP 2018 - TRILHA PHP ESSENCIAL
35. Cuidado ao usar os Tipos Escalares
TDC SP 2018 - TRILHA PHP ESSENCIAL
Não transforme documentação em tipos escalares nativos, ela pode estar
desatualizada
Não usar strict_types sem antes refatorar e analizar seu código, eles
também afetam funções internas
Use uma ferramenta de análise estática do código pode garantir que você
não esteja passando tipos errôneos para as funções que serão tipadas
36. Prepare seu código para facilitar
migrações
TDC SP 2018 - TRILHA PHP ESSENCIAL
Respeite a arquitetura da sua aplicação/framework
Crie ou use foward compatibility layers
Aplique Pollyfills
Procure por Adapters
38. Incompatibilidade entre extensões
Só use extensões se realmente necessário!
Algumas estatísticas ⭐
◦ PHP: 18k ⭐ (https://github.com/php/php-src)
◦ pthreads: 2,9k ⭐ (https://github.com/krakjoe/pthreads)
◦ ext-mongodb: 527⭐ (https://github.com/mongodb/mongo-php-driver)
◦ Duas juntas: ???
TDC SP 2018 - TRILHA PHP ESSENCIAL
39. Acompanhe a
evolução na
infraestrutura
◦ Use Infrastructure as Code
◦ ~5 minutos para configurar AMI
◦ Nova geração EC2
◦ Redução de 12 para 4 servidores
TDC SP 2018 - TRILHA PHP ESSENCIAL