• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Varrendo APIs REST em Larga Escala utilizando PHP

on

  • 3,846 views

APIs em REST tornaram-se o padrão de facto para integração com grandes sistemas como Twitter, Facebook, Foursquare e LinkedIn. ...

APIs em REST tornaram-se o padrão de facto para integração com grandes sistemas como Twitter, Facebook, Foursquare e LinkedIn.

Mostrarei como ir além do básico e extrair grandes quantidades de dados, processá-los e obter informações que não estariam disponíveis diretamente por essas APIs.

Statistics

Views

Total Views
3,846
Views on SlideShare
3,654
Embed Views
192

Actions

Likes
5
Downloads
43
Comments
1

8 Embeds 192

http://www.mestreseo.com.br 122
http://www.linkedin.com 33
http://www.agenciamestre.com 17
http://www.desenvolvimentodesites.net 13
http://otimizacaoseo.net 4
http://www.infoblogs.com.br 1
http://feeds.feedburner.com 1
https://www.linkedin.com 1
More...

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

11 of 1 previous next

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

    Varrendo APIs REST em Larga Escala utilizando PHP Varrendo APIs REST em Larga Escala utilizando PHP Presentation Transcript

    • Varrendo APIs REST em larga escala utilizando PHP Alexandre Gomes Gaigalas1 PHP Conference 2010 – 26 de Novembro
    • Alexandre Gomes Gaigalas ● PHP 5 ● OOP ● REST ● Linked Data2 2
    • Kingo Labs● Coleta e Análise de Dados● Twitter, Facebook, Foursquare, etc● Sorteie.me, trmanager, Kingo Meter, kingo.to, rial.to, etc● Ubuntu, PHP 5.3, MySQL, MongoDB3
    • Programação de hoje● Por que varrer em larga escala?● Processamento paralelo● Daemons● Processamento em fila● Escalabilidade de escritas no banco de dados● Backups● Twitter: Características● Facebook: Características4
    • Por que varrer em larga escala?● A API tem os dados que eu quero, mas não na granularidade que eu quero.● Quero pré-carregar dados ao invés de ler sob demanda.● Quero dominar o mundo e preciso dos dados dos usuários.5
    • Web Crawlers x Api Crawlers● Muito DNS ● Pouco DNS● Heterogêneo (mimes) ● Homogêneo (mimes)● Gentil ● Agressivo6
    • Processamento Paralelo com PHP● pcntl_fork() - Fork de processos● curl_multi_init() - Terceirizar o trabalho● stream_select() - Streams assíncronas7
    • pcntl_fork()● Adeus, memória.● Código confuso.● Só funciona no Linux ● (não que eu use outro OS, mas sabe como é) ● ((multi-plataforma é uma característica do PHP, temos que respeitar isso))8
    • curl_multi_init()● Requisições FTP/HTTP paralelas● Simples● Rápido● Estável● …mas espera as requisições completarem sempre.9
    • stream_select()● Uma forma de percorrer várias streams sem locks de leitura nem escrita.● Qualquer plataforma.● Qualquer stream (proc_open(), fopen(), stream_socket_client(), etc.)● Você tem que manipular o HTTP na unha.10
    • RFC2616 – HTTP Tanto o cliente quanto o servidor podem interromper a conexão a qualquer momento.11
    • Ferramentas● KingoBase – Interna, experimental. ● Foi o projeto piloto de crawler.● http://github.com/caferrari/SimpleCrawler ● Somente HTTP● http://github.com/Respect/Stream ● Qualquer stream12
    • RespectStream13
    • Deamons com PHP● PEAR System_Daemon ● System-V● http://github.com/Respect/Daemon (em desenvolvimento) ● upstart● Supervisord ● Ferramenta externa14
    • Fila de processamento● Processos engasgam● Conexões caem● APIs ficam indisponíveis● Firewalls surtam● Bancos de dados congelam15
    • Fila de processamento Twitter API JSON.gz JSON.gz Queue JSON.gz MongoDB16
    • Fila de processamento JSON.gz JSON.gz Twitter API JSON.gz JSON.gz Queue JSON.gz JSON.gz MongoDB JSON.gz17
    • MySQL: Escalando Escritas● InnoDB● Transactions● Partitions● Batch Operations (1000+ INSERTS)18
    • MySQL: Partitions● Particionamento horizontal● Diminui o tamanho dos índices● Requer revisão das queries19
    • MongoDB: Escalando Escritas Pronto!20
    • Pruning: Remover dados antigos● MySQL ● ALTER TABLE twitter_status DROP PARTITION p20091201;● MongoDB ● db.createCollection(“twitter_status”, {capped:true, size: 10240000});21
    • Backup● Esqueça mysqldump e mongodump!● rsync● ec2-create-snapshot (Amazon EC2)22
    • Snapshots: MySQL● FLUSH;● LOCK TABLES;● [snapshot do disco]● UNLOCK TABLES;23
    • Snapshots: MongoDB● runCommand({fsync:1, lock:1});● [snapshot do disco]● db.$cmd.sys.unlock.findOne();24
    • API do Twitter● REST API ● Dados sob demanda● Stream API ● Tweets em tempo real25
    • Twitter: Limite de Requisições● 150 Requisições por: ● Hora ● IP ● Usuário Autenticado (Oauth)● Uma Stream aberta por IP e/ou Usuário26
    • Twitter: Cursores27
    • Twitter: Cursores● twitter_scan_status ● user_id ● followers_cursor ● favorites_cursor ● lists_cursor ● etc28
    • Twitter: Ferramentas● Phirehose ● Para a Stream API ● Controla reconexões, erros, limites, etc ● http://phirehose.googlecode.com● Twitter-Async ● Abstrai autenticação OAuth ● Faz requisições paralelas com curl_multi_init() ● https://github.com/jmathai/twitter-async29
    • Facebook● Graph API ● OAuth 2.0 ● SDK: http://github.com/facebook/php-sdk ● Docs: http://graph.facebook.com● Real Time API ● PubSubHubbub30
    • Facebook: Limites (não-oficial)● 600 Requisições por: ● 10min ● Usuário autenticado (Oauth 2.0)31
    • Facebook: Batch Request32
    • Facebook: Metadata33
    • Facebook: Cropping34
    • Obrigado!35
    • Eu, aqui e ali.● http://twitter.com/alganet● http://github.com/alganet● http://about.me/alganet● http://gaigalas.net● alexandre@gaigalas.net36 36