Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

12 factor in the PHP world

776 views

Published on

Os 12 fatores são uma lista de boas práticas que projetos e times podem aplicar para rodar seus aplicativos na núvem Nesta palestra vou apresentar cada um dos fatores, suas vantagens e como aplicá-los em projetos PHP

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

12 factor in the PHP world

  1. 1. 12 fatores em projetos PHP Elton Minetto http://eltonminetto.net @eminetto
  2. 2. Criado pela equipe da Heroku é uma espécie de “manifesto” com os 12 fatores que uma aplicação deveria seguir para ser "cloud native".
  3. 3. I.Codebase
  4. 4. Uma única base de código, múltiplos deploys, gerenciado por controle de versões
  5. 5. → Github → Gitlab → Bitbucket
  6. 6. II.Dependencies
  7. 7. Todas as dependências do projeto devem estar declaradas no próprio projeto.
  8. 8. → Composer → Infrastructure as Code (Docker, Puppet, Chef, Ansible, Terraform, etc)
  9. 9. III.Config
  10. 10. Configurações armazenadas fora do código.
  11. 11. Variáveis de ambiente <?php public static function build() { $bernardSerializer = new BernardSerializer(new FQCNMessageFactory(), new NoOpMessageConverter()); switch (getenv('QUEUE_DRIVER')) { case 'sqs': $connection = SqsClient::factory([ 'key' => getenv('QUEUE_SQS_KEY'), 'secret' => getenv('QUEUE_SQS_SECRET'), 'region' => getenv('QUEUE_SQS_REGION') ]); $driver = new SqsDriver($connection); break; case 'flatfile': $driver = new FlatFileDriver(getenv('QUEUE_FLATFILE_PATH')); break; } $queue = new PersistentFactory($driver, $bernardSerializer); return $queue; }
  12. 12. Arquivos distintos para ambientes distintos ls -l config/ -rw-r--r-- 1 eminetto staff 646 Nov 27 11:51 local.php -rw-r--r-- 1 eminetto staff 1237 Oct 2 09:06 staging.php -rw-r--r-- 1 eminetto staff 357 Jul 31 11:21 testing.php -rw-r--r-- 1 eminetto staff 549 Oct 2 09:06 production.php
  13. 13. IV.Backing Services
  14. 14. Serviços externos que o aplicativo consome. Banco de dados, cache, podem estar tanto locais quanto remotos sem mudanças de código
  15. 15. → Doctrine → Bernard → Zend Cache, Doctrine Cache, etc
  16. 16. V.Build, release, run
  17. 17. Três fases bem separadas e definidas facilita a criação de scripts e procedimentos a serem executados em cada uma delas.
  18. 18. → Makefiles → Shell script → Deployer
  19. 19. VI.Processes
  20. 20. O aplicativo como um ou mais processos, que sejam “stateless” e “share-nothing” Diminuir o acoplamento entre componentes do projeto para facilitar a escala
  21. 21. → JWT → Filas, cache, S3, etc.
  22. 22. VII.Port binding
  23. 23. Não depender de um servidor externo para ser executado, poder ser auto-contido e executar em uma porta específica que seria acessado por outras partes do projeto. Depender de uma estrutura de nomes e endereços que podem ser configurados em arquivos de configuração
  24. 24. <?php namespace ApplicationService; use PsrContainerContainerInterface; class InstallFactory { public function __invoke(ContainerInterface $container) { $entityManager = $container->get('EntityManager'); $cache = $container->get('Cache'); $config = $container->get('config'); $tokenService = $container->get('TokenService'); $providerService = $container->get('ProviderService'); return new Install($entityManager, $cache, $config, $tokenService, $providerService); } }
  25. 25. VIII. Concurrency
  26. 26. Pensar o projeto como processos que podem ser executados em paralelo.
  27. 27. → RabbitMQ, Gearman, SQS (Bernard ajuda a deixar transparente)
  28. 28. IX. Disposability
  29. 29. Processos facilmente descartáveis, que podem ser iniciados ou parados a qualquer momento. Facilitar este processo, permitindo início rápido, processo de finalização simplificado
  30. 30. X. Dev/prod parity
  31. 31. Ambientes de desenvolvimento, homologação e produção devem ser iguais
  32. 32. → Vagrant → Docker → Puppet, Chef, Ansible, Terraform
  33. 33. XI. Logs
  34. 34. O código não deve se preocupar com o formato de armazenamento. Pode enviar as mensagens para a saída padrão e esta deve ser redirecionada para locais específicos de acordo com o ambiente onde o projeto está executando. Ou usar ferramentas específicas.
  35. 35. → Monolog → Zend Log → Sentry
  36. 36. XII. Admin processes
  37. 37. Tarefas administrativas como limpar caches, carregar dados, atualizar bases de dados, devem ser tratadas de forma automatizada
  38. 38. → Migrations (Laravel, Doctrine, etc) → Fixtures (Laravel, Doctrine, etc) → Makefiles → Shell Script
  39. 39. Resumindo
  40. 40. I.Codebase II.Dependencies III.Config IV.Backing Services V.Build, release, run VI.Processes VII.Port binding VIII. Concurrency IX. Disposability X. Dev/prod parity XI. Logs XII. Admin processes
  41. 41. Perguntas
  42. 42. Contato http://eltonminetto.net http://coderockr.com http://codenation.com.br http://asemanaphp.com.br

×