PHP ClassesPHP ClassesDesenvolvimento de sites de Web 2.0 em
PHP para grandes audiênciasManuel [email protected]
http://www.ManuelLemos.net/
webdevcamp 2007
São Paulo, 2 de Dezembro de 2007
Origem
● 1997 – Participação em listas de discussão
● 1998 – PHP 3 lançado com suporte a OOP
● Componentes prontos resolviam problemas frequentes de outros usuários
● Divulgação de classes prontas nas listas de discussão aumentaram muito a procura
● 1999 – Lançamento do site PHP ClassesPHP Classes →
Objetivos
● Meio de distribuição automática de classes
Minimizar esforço dos autores na divulgação
● Aumentar a base de usuários das classes
Alertar usuários por e-mail sobre novas classes e suas atualizações
● Estimular a partilha de conhecimento
Contribuição de novas classes e mais conteúdo →
Crescimento interminável
Web 2.0: Regra do 1%
● Site de conteúdo contribuído pelos usuários
● Por cada 100 novos usuários, 1 contribui
● Mais contribuições atraem mais usuários
● Quanto mais usuários, mais contribuidores →
Propaganda viral
Divulgação que traz mais divulgação
● Troca de anúncios com sites parceiros
● Top de autores
● Iniciativa amigos do site
● Espelhos do site
● Lista de grupos regionais de usuários de PHP
● Divulgação de novidades através de RSS →
As dores do crescimento
Problemas do crescimento interminável
1. Qualidade das contribuições
2. Custos de operação →
Qualidade das contribuições
O problema de ter muito do mesmo
● Sistema de votação
– Utilidade, consistência, exemplos, documentação, tutoriais em vídeo, e testes de unidade
– Top das classes mais votadas
● Prêmio de inovação
– Nomeação de classes inovadoras em cada mês
– Prêmios patrocinados para todos nomeados →
Custos de operação
Nada é de graça
● Custos de hospedagem– Capacidade de processamento
– Largura de banda
– Espaço em disco
● Custos de pessoal– Atendimento aos usuários
– Desenvolvimento de novas capacidades →
Redução de custos
Melhor software consome menos recursos
● Cache e mais cache– Turck MMCache para cache de PHP compilado
– Classe File Cache em PHP para cache de conteúdo
– Lighttpd: cache de acessos a conteúdo estático
● Compressão de conteúdo– mod_gzip reduz tamanho de páginas até 5 vezes
– Todos os navegadores modernos suportam
– Páginas carregam mais rapidamente →
Mais redução de custos
Aceleração com software automático
● Atendimento self-service– Robôs de resposta a e-mail de descadastramento
– Páginas com respostas a perguntas frequentes
● Ferramentas de geração de código– Metastorage gera código de acesso a objetos em
banco de dados definidos a partir de modelo
– Redução do tempo de escrita, teste e correção →
Cobertura de custos
Alternativas consideradas
1. Doações
2. Publicidade paga
3. Serviços pagos exclusivos para assinantes →
Doações
● Doação de hospedagem– Troca de hospedagem por publicidade
– Sites espelhos
● Doação de dinheiro– Não é garantido
– Não é recorrente →
Publicidade paga
● Pagamento por: exibição, clique ou tempo
● Receita cresce com a audiência
● Negociação direta é difícil à distância
● Intermediação por agências– Google AdSense, Tribalfusion, Fastclick, etc.
– Facilidade de alcance a grandes anunciantes
– Agências ficam com comissão elevada
– Pagamento por cheque, Paypal ou transferência →
Assinaturas pagas● Serviços exclusivos assinantes
– Navegação do site sem publicidade
– Acesso a fóruns de especialistas para resolver problemas difíceis
– Buscas e páginas favoritas personalizadas
– Diretório de profissionais disponíveis para prestar consultoria paga
● Adesão de uma pequena parte dos usuários
● Pagamento pelo Paypal ou PagSeguro
● Receita recorrente →
Riscos
Quem semeia e não segura pode colher amargura! (provérbio popular)
O que pode comprometer o projeto?
● Perda de informação por danos no servidor
● Perda de informação por invasão de crackers
● Número de acessos excessivos
● Ausência de simulação de problemas →
Cópias de segurança
● Cópias de segurança diárias dos bancos de dados e arquivos de conteúdo
– mysqldump + tar
● Replicação das cópias para outros servidores
– gnupg ou truecrypt + rsync
– Amazon S3 + Jungle Disk →
Auditoria de segurança
● Auditoria regular com ferramentas dedicadas
– nessus: testes de exploração de buracos de segurança conhecidos
● Desativação de serviços não usados e bloqueio das respectivas portas na firewall
● Eliminação de indícios do tipo e versão dos programas usados →
Vulnerabilidades comunsComo evitar?
● XSS: Cross-site Scripting– Conteúdo não confiável é servido por domínio
distinto: safe.phpclasses.net
● SQL Injection– Validação com a classe de formulários
– “Escape” de valores com Metabase →
● CSRF: Cross-site Request Forgery– Plug-in “secure submit” da classe de formulários
Limitação de acessos● Redirecionamento de usuários para espelhos
● Verificação CAPTCHA para parar robôs
● lighttpd: servidor para conteúdo estático
● Limitação dos processos do Apache
● mod_throttle: limitação de acessos simultâneos
● mod_fastcgi: balanceamento de carga usando mais computadores servidores
● Uso de filas para retardar tarefas pesadas →
Curiosidades● Linhas de código: ~135.000 em PHP (4.6MB)● Cadastros: ~540.000 (~10.300 novos por mês)● Autores: ~1.800 contribuiram ~3.600 componentes● Consumo de banda: ~200GB por mês● Cache de conteúdo: ~184.000 arquivos (1.5GB)● Servidor: dedicado com Pentium 4 HT 3.2GHz 1GB● Sistema operacional: Linux SuSE 9.2● Discos: 18GB SCSI com controlador RAID● Base de dados: MySQL 4 em partição dedicada 2.7GB● Maior tabela: 5.9 milhões de registros● Servidor e-mail: qmail ~2 milhões de e-mails/mês →
Futuro● Mais serviços pagos para assinantes
● Reclassificação de classes em sub-categorias
● Sincronização de classes a partir de repositórios CVS ou Subversion
● Canais PEAR
● Concurso de novo design para o site
● Divisão de lucros com os melhores autores
● O que mais os usuários sugerirem →
Perguntas?
● Manuel Lemos
● Repositório PHPClasses
http://www.phpclasses.org/
Conclusão
Lembrem-se sempre:
Cooperar é melhor que competir
Abracem a comunidade com vontade, que a comunidade vos abraçará muito mais
Obrigado pela atenção
Referências● Classe File Cache
http://www.phpclasses.org/filecache
● Classe Forms generation and validationhttp://www.phpclasses.org/formsgeneration
● Metabasehttp://www.phpclasses.org/metabase
● Metastoragehttp://www.metastorage.net/
● Google AdSensehttps://www.google.com/adsense/
● Tribalfusionhttp://www.tribalfusion.com/
● Fastclickhttp://www.fastclick.com/
● Paypalhttps://www.paypal.com/
● PagSegurohttps://pagseguro.uol.com.br/
● Amazon S3http://aws.amazon.com/s3
● Jungle Diskhttp://www.jungledisk.com/
● Gnupghttp://www.gnupg.org/
● TrueCrypthttp://www.truecrypt.org/
● Rsynchttp://rsync.samba.org/
● Nessushttp://www.nessus.org/
● lighttpdhttp://www.lighttpd.net/
● Turck MMCachehttp://turck-mmcache.sourceforge.net/index_old.html
● mod_gziphttp://www.schroepl.net/projekte/mod_gzip/
● FastCGIhttp://www.fastcgi.com/