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

on

  • 1,922 views

Palestra realizada no TechEd 2011 em São Paulo.

Palestra realizada no TechEd 2011 em São Paulo.

Statistics

Views

Total Views
1,922
Views on SlideShare
1,922
Embed Views
0

Actions

Likes
1
Downloads
12
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Open a Window, see the clouds - TechEd 2011 Presentation 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