SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
1
VarrendoAPIsREST
emlargaescala
utilizandoPHP
Alexandre Gomes Gaigalas
PHP Conference 2010 – 26 de Novembro
22
AlexandreGomesGaigalas
●
PHP 5
●
OOP
●
REST
●
Linked Data
3
KingoLabs
●
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, MongoDB
4
Programaçãodehoje
● 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ísticas
5
Porquevarreremlargaescala?
●
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.
6
WebCrawlersxApiCrawlers
●
Muito DNS
●
Heterogêneo (mimes)
●
Gentil
●
Pouco DNS
●
Homogêneo (mimes)
●
Agressivo
7
ProcessamentoParalelocomPHP
●
pcntl_fork() - Fork de processos
●
curl_multi_init() - Terceirizar o trabalho
●
stream_select() - Streams assíncronas
8
pcntl_fork()
●
Adeus, memória.
●
Código confuso.
●
Só funciona no Linux
●
(não que eu use outro OS, mas sabe como é)
●
((multi-plataforma é umacaracterísticado PHP, temosque
respeitar isso))
9
curl_multi_init()
●
Requisições FTP/HTTP paralelas
●
Simples
●
Rápido
●
Estável
●
…mas espera as requisições completarem
sempre.
10
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.
11
RFC2616–HTTP
Tanto o cliente quanto o servidor podem
interromper a conexão a qualquer momento.
12
Ferramentas
●
KingoBase – Interna, experimental.
●
Foi o projeto piloto de crawler.
●
http://github.com/caferrari/SimpleCrawler
●
Somente HTTP
●
http://github.com/Respect/Stream
●
Qualquer stream
13
RespectStream
14
DeamonscomPHP
● PEAR System_Daemon
● System-V
● http://github.com/Respect/Daemon (emdesenvolvimento)
● upstart
● Supervisord
● Ferramenta externa
15
Filadeprocessamento
●
Processos engasgam
●
Conexões caem
●
APIs ficam indisponíveis
●
Firewalls surtam
●
Bancos de dados congelam
16
Filadeprocessamento
Twitter API
Queue
MongoDB
JSON.gz
JSON.gz
JSON.gz
17
Filadeprocessamento
Twitter API
Queue
MongoDB
JSON.gz
JSON.gz
JSON.gz
JSON.gz
JSON.gz
JSON.gz
JSON.gz
18
MySQL:EscalandoEscritas
●
InnoDB
●
Transactions
●
Partitions
●
Batch Operations (1000+ INSERTS)
19
MySQL:Partitions
●
Particionamento horizontal
●
Diminui o tamanho dos índices
●
Requer revisão das queries
20
MongoDB:EscalandoEscritas
Pronto!
21
Pruning:Removerdadosantigos
●
MySQL
●
ALTER TABLE twitter_status DROP PARTITION
p20091201;
●
MongoDB
●
db.createCollection(“twitter_status”, {capped:true,
size: 10240000});
22
Backup
●
Esqueça mysqldump e mongodump!
●
rsync
●
ec2-create-snapshot (Amazon EC2)
23
Snapshots:MySQL
●
FLUSH;
●
LOCK TABLES;
●
[snapshot do disco]
●
UNLOCK TABLES;
24
Snapshots:MongoDB
●
runCommand({fsync:1, lock:1});
●
[snapshot do disco]
●
db.$cmd.sys.unlock.findOne();
25
APIdoTwitter
●
REST API
●
Dados sob demanda
●
Stream API
●
Tweets em tempo real
26
Twitter:LimitedeRequisições
●
150 Requisições por:
●
Hora
●
IP
●
Usuário Autenticado (Oauth)
●
Uma Stream aberta por IP e/ou Usuário
27
Twitter:Cursores
28
Twitter:Cursores
●
twitter_scan_status
●
user_id
●
followers_cursor
●
favorites_cursor
●
lists_cursor
●
etc
29
Twitter:Ferramentas
● Phirehose
● Paraa Stream API
● Controlareconexões,erros,limites,etc
● http://phirehose.googlecode.com
● Twitter-Async
● Abstraiautenticação OAuth
● Faz requisiçõesparalelascomcurl_multi_init()
● https://github.com/jmathai/twitter-async
30
Facebook
●
Graph API
●
OAuth 2.0
●
SDK: http://github.com/facebook/php-sdk
●
Docs: http://graph.facebook.com
●
Real Time API
●
PubSubHubbub
31
Facebook:Limites(não-oficial)
●
600 Requisições por:
●
10min
●
Usuário autenticado (Oauth 2.0)
32
Facebook:BatchRequest
33
Facebook:Metadata
34
Facebook:Cropping
35
Obrigado!
3636
Eu,aquieali.
●
http://twitter.com/alganet
●
http://github.com/alganet
●
http://about.me/alganet
●
http://gaigalas.net
●
alexandre@gaigalas.net

Weitere ähnliche Inhalte

Ähnlich wie Varrendo APIs REST em Larga Escala utilizando PHP

Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código abertoSuissa
 
Python Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasPython Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasRuda Filgueiras
 
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAnitaibezerra
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
Relatórios e estatísticas utilizando logs em tempo real
Relatórios e estatísticas utilizando logs em tempo realRelatórios e estatísticas utilizando logs em tempo real
Relatórios e estatísticas utilizando logs em tempo realFrancisco Freire
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código abertoSuissa
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchBernardo Donadio
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slidesSuissa
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesSuissa
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universoelliando dias
 
O caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyO caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyRicardo Faria
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
OS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATAOS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATALeonardo Dias
 
Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para phpFabio B. Silva
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
PostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com PentahoPostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com PentahoAmbiente Livre
 

Ähnlich wie Varrendo APIs REST em Larga Escala utilizando PHP (20)

Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
 
Python Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhasPython Eve - APIs RESTful Profissionais em poucas linhas
Python Eve - APIs RESTful Profissionais em poucas linhas
 
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Relatórios e estatísticas utilizando logs em tempo real
Relatórios e estatísticas utilizando logs em tempo realRelatórios e estatísticas utilizando logs em tempo real
Relatórios e estatísticas utilizando logs em tempo real
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Treinamento hadoop - dia4
Treinamento hadoop - dia4Treinamento hadoop - dia4
Treinamento hadoop - dia4
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearchXen e CoreOS: solução para data mining com NodeJS e ElasticSearch
Xen e CoreOS: solução para data mining com NodeJS e ElasticSearch
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slides
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slides
 
PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
 
O caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendlyO caminho das pedras na construção de uma aplicação cloud friendly
O caminho das pedras na construção de uma aplicação cloud friendly
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
OS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATAOS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATA
 
Hadoop
HadoopHadoop
Hadoop
 
Hadoop
HadoopHadoop
Hadoop
 
Doctrine 2 camada de persistência para php
Doctrine 2   camada de persistência para phpDoctrine 2   camada de persistência para php
Doctrine 2 camada de persistência para php
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
PostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com PentahoPostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
PostgreSQL em projetos de Business Analytics e Big Data Analytics com Pentaho
 

Mehr von Alexandre Gaigalas

Domine Validação de Dados em 45min
Domine Validação de Dados em 45minDomine Validação de Dados em 45min
Domine Validação de Dados em 45minAlexandre Gaigalas
 
REST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC GoiâniaREST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC GoiâniaAlexandre Gaigalas
 
Mágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 GoiâniaMágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 GoiâniaAlexandre Gaigalas
 
assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011Alexandre Gaigalas
 
REST: Faça o Serviço Direito
REST: Faça o Serviço DireitoREST: Faça o Serviço Direito
REST: Faça o Serviço DireitoAlexandre Gaigalas
 
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011Alexandre Gaigalas
 
HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12Alexandre Gaigalas
 

Mehr von Alexandre Gaigalas (9)

Domine Validação de Dados em 45min
Domine Validação de Dados em 45minDomine Validação de Dados em 45min
Domine Validação de Dados em 45min
 
REST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC GoiâniaREST: Faça o Serviço Direito - TDC Goiânia
REST: Faça o Serviço Direito - TDC Goiânia
 
Mágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 GoiâniaMágica com Manipulação de Imagens - TDC 2011 Goiânia
Mágica com Manipulação de Imagens - TDC 2011 Goiânia
 
assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011assertTrue($tdd) - Latinoware 2011
assertTrue($tdd) - Latinoware 2011
 
REST: Faça o Serviço Direito
REST: Faça o Serviço DireitoREST: Faça o Serviço Direito
REST: Faça o Serviço Direito
 
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
Autoloaders Universais + Microframeworks em PHP - Trilha de PHP do TDC 2011
 
HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12HTTP: A Base do Desenvolvimento Web - FISL 12
HTTP: A Base do Desenvolvimento Web - FISL 12
 
GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1
 
assertTrue($tdd)
assertTrue($tdd)assertTrue($tdd)
assertTrue($tdd)
 

Varrendo APIs REST em Larga Escala utilizando PHP