Open a Window, see the clouds - TechEd 2011
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Open a Window, see the clouds - TechEd 2011

  • 1,988 views
Uploaded on

Palestra realizada no TechEd 2011 em São Paulo.

Palestra realizada no TechEd 2011 em São Paulo.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,988
On Slideshare
1,988
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
12
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Open a Window, see the clouds Azure e PHP Rafael Dohms photo credit: Denis GrzeticFriday, September 30, 2011
  • 2. photo credit: Rob Allen Rafael Dohms Evangelista PHP, membro ativo da Comunidade PHP e certificado ZCE. Ele ajudou na fundação de dois Grupos de Usuários de PHP ao longo do tempo e hoje compartilha a coordenação do PHPSP. Desenvolvedor, gamer e apaixonado por código ele também é host do primeiro podcast de PHP do Brasil: PHPSPCast. Atualmente ele trabalha na equipe SWAT do grupo MIH, uma equipe de experts que fornecem conhecimento técnico para o grupo além de trabalhar com P&D buscando novos nichos da internet e tecnologia. Seu papel como Desenvolvedor Sênior é codar, treinar e auxiliar outras empresas e se divertir enquanto faz isso.Friday, September 30, 2011
  • 3. OLHANDO PELA JANELA •O que é a nuvem? • Por que escolher a nuvem? • Vamos conhecer o Windows Azure com PHP • Como isso vai afetar meu código?Friday, September 30, 2011
  • 4. O QUE É A NUVEM? não é só mais uma palavra no buzzword bingoFriday, September 30, 2011
  • 5. HOSPEDAGEM COMUM • Conta compartilhada, VPS ou máquina local • Uma máquina, em um local • Pagamento mensalFriday, September 30, 2011
  • 6. Própria HOSPEDAGEM COMUM • Conta compartilhada, VPS ou máquina local • Uma máquina, em um local • Pagamento mensalFriday, September 30, 2011
  • 7. COMPUTAÇÃO NA NUVEM • Menos “apego físico” (virtualização) • Uma ou mais máquinas ou “instancias” • Geograficamente espalhada • Pagamento por hora/recurso • “abstração” de recursos • 3 Sabores: IaaS, PaaS, SaaSFriday, September 30, 2011
  • 8. Dados Aplicação Software Sistema Operacional Hardware/RedeFriday, September 30, 2011
  • 9. Armazenamento Dados Compartilhar Publicação Aplicação Desenvolvimento MySQL Software Apache Configuração Sistema Operacional Upgrades Resfriamento Hardware/Rede CabeamentoFriday, September 30, 2011
  • 10. IaaS a Service” “Infrastructure as “Infraestrutura como Serviço” Dados Aplicação Software Sistema Operacional Hardware/RedeFriday, September 30, 2011
  • 11. IaaS a Service” “Infrastructure as “Infraestrutura como Serviço” Dados Aplicação Software Sistema Operacional você eles Hardware/RedeFriday, September 30, 2011
  • 12. PaaS “Platform as a Service” “Plataforma como Serviço” Dados Aplicação você eles Software Sistema Operacional Hardware/RedeFriday, September 30, 2011
  • 13. SaaS “Software as a Service” “Software como Serviço” Dados você eles Aplicação Software Sistema Operacional Hardware/RedeFriday, September 30, 2011
  • 14. IaaS Paas SaaS custos gerenciamento do servidor gerenciamento do software publicação da aplicaçãoFriday, September 30, 2011
  • 15. X POR QUE ESCOLHER A NUVEM? Quais são as vantagens de escolher a nuvem?Friday, September 30, 2011
  • 16. trafego tempo O MODELO CONTA DE LUZFriday, September 30, 2011
  • 17. trafego tempo O MODELO CONTA DE LUZFriday, September 30, 2011
  • 18. trafego pico tempo O MODELO CONTA DE LUZFriday, September 30, 2011
  • 19. trafego pico tempo O MODELO CONTA DE LUZFriday, September 30, 2011
  • 20. trafego pico tempo O MODELO CONTA DE LUZFriday, September 30, 2011
  • 21. DISPONIBILIDADEFriday, September 30, 2011
  • 22. DISPONIBILIDADEFriday, September 30, 2011
  • 23. DISPONIBILIDADEFriday, September 30, 2011
  • 24. ESCALABILIDADE Computação sem estado + Armazenamento durávelFriday, September 30, 2011
  • 25. ESCALABILIDADE Computação sem estado + Armazenamento durávelFriday, September 30, 2011
  • 26. OLHANDO POR DENTROFriday, September 30, 2011
  • 27. Windows Azure Fabric Compute StorageFriday, September 30, 2011
  • 28. Fabric Middleware, usado para desenvolver, testar, publicar e gerenciar sua aplicação. AppFabric developerFriday, September 30, 2011
  • 29. Fabric Compute StorageFriday, September 30, 2011
  • 30. Compute Web Role Worker Role VM Role Máquina virtual de Aplicação Web Processamento em Windows Server rodando sobre o plano de fundo 2008 carregada IIS sob demandaFriday, September 30, 2011
  • 31. Fabric Compute StorageFriday, September 30, 2011
  • 32. Versão cacheada de CDN qualquer recurso com uma URI Storage Armazenamento de dados Table Storage Blob Storage SQL Azure Queue Troca de Armazenamento Texto e dados Compatível com o mensagens entre o estruturado binários SQL Server Web e o WorkerFriday, September 30, 2011
  • 33. PRONTO PRA RODAR para Desenvolver e Publicar • Requisitos: • IIS7 e ferramentas • Azure SDK (instala o DevAppFabric, o simulador de azure) • Command Line Tools (linha de comando) • Command line tools for PHPFriday, September 30, 2011
  • 34. CAIXA DE FERRAMENTAS • Command Line tools for PHP • Cria o pacote da aplicação e roda no emulador, simulando o computacional e o armazenamento. • Azure Tools para Eclipse • Torna a maioria dos processos “next, next finish” e fornece uma IDE completa.Friday, September 30, 2011
  • 35. Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageFriday, September 30, 2011
  • 36. Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageFriday, September 30, 2011
  • 37. Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageFriday, September 30, 2011
  • 38. Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP php package.php --project="twitter-azure" Ferramentas de empacotamento --target="c:azure-build" de comando ou eclipse) (linha --source="C:twitter-azure" Pacote + Configuração do Serviço --defaultDoc="public/index.php" --phpRuntime="C:Program Files (x86)PHPv5.3" --cleanRebuild --runDevFabric Azure Window Azure (AppFabric) SQLAzure StorageFriday, September 30, 2011
  • 39. Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageFriday, September 30, 2011
  • 40. O BOM • APIs em REST • Armazenamento • Diagnósticos • BD Relacional: SQL Azure • Arquitetura por “Roles”Friday, September 30, 2011
  • 41. O RUIM • Gerenciamento apenas pelo Windows • Sem Emulador Azure para SO não-Windows • Sem ferramentas de empacotamento para SO não-WindowsFriday, September 30, 2011
  • 42. COMO ISSO AFETA MEU CÓDIGO? Que ferramentas podemos usar e como devemos desenhar nossas aplicações?Friday, September 30, 2011
  • 43. COM O QUE DEVO ME PREOCUPAR?Friday, September 30, 2011
  • 44. COM O QUE DEVO ME PREOCUPAR? CódigoFriday, September 30, 2011
  • 45. COM O QUE DEVO ME PREOCUPAR? Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 46. COM O QUE DEVO ME PREOCUPAR? Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 47. COM O QUE DEVO ME PREOCUPAR? Escalando a aplicação Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 48. COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento aplicação Local Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 49. COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 50. COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 51. COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 52. COM O QUE DEVO ME PREOCUPAR? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 53. COM O QUE DEVO ME PREOCUPAR? Que tipo? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 54. COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Que tipo? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 55. COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Framework ou PHP SDK Que tipo? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 56. COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Framework ou PHP SDK Que tipo? Banco de Dados Armazenamento Relacional Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 57. COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Framework ou PHP SDK Que tipo? Banco de Migrar para SQL Azure Dados Armazenamento Relacional Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsFriday, September 30, 2011
  • 58. FRAMEWORKS PRONTOS PARA O AZUREFriday, September 30, 2011
  • 59. O QUE FAZ ELE SER COMPATÍVEL? Código Roda usando PHP no Windows? Ferramentas Tem wrappers das APIs? Banco de Dados É compatível com MS SQL Server?Friday, September 30, 2011
  • 60. Ferramentas • Blobs, Tables e Queues (operações CRUD) • Classes auxiliares para transporte HTTP, AuthN/ AuthZ, REST and Gerenciamento de Erros • Gerenciamento, Instrumentação e supporte a logs Banco de Dados • Não testado, mas deve funcionar.Friday, September 30, 2011
  • 61. Banco de Dados • Drivers de MS-SQL* são compatíveis com SQLAzure * Usando pdo_sql_server, possivelmente o pdo_dblib Powered by Doctrine:Friday, September 30, 2011
  • 62. • PHP roda normalmente no Azure, qualquer framework vai funcionar. • Outras ferramentas para se comunicar com recursos como: BD, Filas etc... • Estes aqui já foram testados!Friday, September 30, 2011
  • 63. AZURE PHP SDK • Serviços: • Blob Storage • Table Storage • Queue Storage • Diagnostic Tools • Compatível com PHP 5+Friday, September 30, 2011
  • 64. SAINDO PELA JANELA Aplicação de teste para ilustrar • Aplicação de teste: “Twitter RT Calculator” • Objetivo: Analisar sues últimos tweets, verificar quais foram re-tuitados e fazer cálculos baseado em palavras e localizações. • Exemplificar a migração: • Banco de dados: MySQL > SQLAzure • Mover o processamento para um Worker Role e usar a FilaFriday, September 30, 2011
  • 65. SAINDO PELA JANELA Aplicação de teste para ilustrar • Aplicação de teste: “Twitter RT Calculator” • Objetivo: Analisar sues últimos tweets, verificar quais foram re-tuitados e fazer cálculos baseado em palavras e localizações. • Exemplificar a migração: • Banco de dados: MySQL > SQLAzure • Mover o processamento para um Worker Role e usar a FilaFriday, September 30, 2011
  • 66. Twitter OAuth Segura ai..Friday, September 30, 2011
  • 67. Twitter OAuth Segura ai..Friday, September 30, 2011
  • 68. Twitter OAuth Segura ai..Friday, September 30, 2011
  • 69. Twitter OAuth Segura ai.. MySQLFriday, September 30, 2011
  • 70. Twitter OAuth Segura ai.. MySQL ResultadosFriday, September 30, 2011
  • 71. Twitter OAuth Segura ai.. MySQL ResultadosFriday, September 30, 2011
  • 72. Twitter OAuth Segura ai.. MySQL ResultadosFriday, September 30, 2011
  • 73. Twitter OAuth Te ligo mais tarde..Friday, September 30, 2011
  • 74. Twitter OAuth Queue Te ligo mais tarde..Friday, September 30, 2011
  • 75. Twitter OAuth Queue Te ligo mais tarde.. WorkerFriday, September 30, 2011
  • 76. Twitter OAuth Queue Te ligo mais tarde.. WorkerFriday, September 30, 2011
  • 77. Twitter OAuth Queue Te ligo mais tarde.. WorkerFriday, September 30, 2011
  • 78. Twitter OAuth Queue Te ligo mais tarde.. Worker SQLAzureFriday, September 30, 2011
  • 79. Twitter OAuth Queue Te ligo mais tarde.. Worker SQLAzureFriday, September 30, 2011
  • 80. Twitter OAuth Queue Te ligo mais tarde.. Worker Resultados SQLAzureFriday, September 30, 2011
  • 81. Twitter OAuth Queue Te ligo mais tarde.. Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Resultados SQLAzureFriday, September 30, 2011
  • 82. USANDO SQLAZURE PDO MSSQL Driver doctrine.dbal.connection_options: driver: pdo_sqlsrv dbname: twitter-sample-app host: pl69qjwy8k.database.windows.net port: 1433 user: rdohmsDemo@pl69qjwy8k password: *password*Friday, September 30, 2011
  • 83. TODOS PARA A FILA //Add user to our Queue $qItem = new stdClass(); $qItem->twitter_handle = $twitterInfo->screen_name; $qManager = new AzureQueue($this->getApp()->getConfig(azure)); $qManager->addToQueue($qItem);Friday, September 30, 2011
  • 84. TODOS PARA A FILA //Add user to our Queue $qItem = new stdClass(); $qItem->twitter_handle = $twitterInfo->screen_name; $qManager = new AzureQueue($this->getApp()->getConfig(azure)); $qManager->addToQueue($qItem); $this->client = new Zend_Service_WindowsAzure_Storage_Queue( $qConfig[host], $qConfig[accountName], $qConfig[accountKey] ); $this->queue = $this->getQueueInstance($queueName); __contruct()Friday, September 30, 2011
  • 85. TODOS PARA A FILA //Add user to our Queue $qItem = new stdClass(); $qItem->twitter_handle = $twitterInfo->screen_name; $qManager = new AzureQueue($this->getApp()->getConfig(azure)); $qManager->addToQueue($qItem); $this->client = new Zend_Service_WindowsAzure_Storage_Queue( $qConfig[host], $qConfig[accountName], $qConfig[accountKey] ); $this->queue = $this->getQueueInstance($queueName); __contruct() public function addToQueue($item) { $this->client->putMessage($this->queue->name, serialize($item)); }Friday, September 30, 2011
  • 86. PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); //Process User $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Friday, September 30, 2011
  • 87. PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); //Process User $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Friday, September 30, 2011
  • 88. PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; function getMessage() public } { $messages = $this->client->getMessages($this->queue->name, 1); //Retrieve User {... doctrine query for stored twitter handle ...} if (count($messages) > 0){ $qMessage = array_shift($messages); //Clear Message $this->logAction("Removing= message form queue..."); $message new stdClass(); $qManager->deleteMessage($qMessage); = $qMessage; $message->qMessage $message->decoded = unserialize($qMessage->messagetext); //Process User $this->processUser($user); return $message; } //Warn User $this->sendWarning($user); return null; } catch (Exception $e) { } $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Friday, September 30, 2011
  • 89. PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; function getMessage() public } { $messages = $this->client->getMessages($this->queue->name, 1); //Retrieve User {... doctrine query for stored twitter handle ...} if (count($messages) > 0){ $qMessage = array_shift($messages); //Clear Message $this->logAction("Removing= message form queue..."); $message new stdClass(); $qManager->deleteMessage($qMessage); = $qMessage; $message->qMessage $message->decoded = unserialize($qMessage->messagetext); //Process User $this->processUser($user); return $message; } //Warn User $this->sendWarning($user); array( return null; messageid => $messageId, insertiontime => $insertionTime, } catch (Exception $e) { } expirationtime => $expirationTime, $this->logAction("Exception found:" .$e->getMessage popreceipt => $popReceipt, timenextvisible => $timeNextVisible, } dequeuecount => $dequeueCount, messagetext => $messageText $this->logAction("Initiating sleep for next loop."); ); sleep(2); }Friday, September 30, 2011
  • 90. PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); //Process User $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Friday, September 30, 2011
  • 91. PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); Após 20 segundos, a mensagem //Process User volta para a fila $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Friday, September 30, 2011
  • 92. SAINDO PELA JANELA • Veja todas mudanças: github.com/rdohms/Sample-Azure- App • Compare estes branches: non-cloud-version x cloud-designed-versionFriday, September 30, 2011
  • 93. FECHANDO A JANELA • Descobrimos o que é a nuvem • Vimos razões por que escolher a nuvem • Conhecemos o Windows Azure e seus recursos • Olhamos rapidamente em como isso afeta nosso códigoFriday, September 30, 2011
  • 94. LEITURA COMPLEMENTAR... PHP Development in the Cloud ISBN: 9780981034522 Pages: 172 Authors: Ivo Jansch and Vito Chin http://bit.ly/i9Awk0Friday, September 30, 2011
  • 95. COMECE A BRINCAR.. • Conta de teste gratuita: WindowsAzurePass.com http://azurephp.com http://phpazure.codeplex.com/ http://azurephptools.codeplex.com/ http://www.ben-waine.co.uk/blog/php-azure http://marvelley.com/category/php/php-on-azure/Friday, September 30, 2011
  • 96. http://slides.doh.ms twitter.com/rdohms http://doh.ms Perguntas? OBRIGADO! rafael@doh.msFriday, September 30, 2011