No PHP, como você codifica tendo em mente a escalabilidade?
8
Sei que essa pode ser uma pergunta geral, mas o que exatamente ocorre na escala para todos os usuários que você encontrará, mesmo que não nos próximos meses? Eu fiz algumas pesquisas e a maior parte do que é feito é do lado do servidor, com caches e outras coisas semelhantes. Quaisquer pontos na direção certa seriam úteis.
"Mesmo que não nos próximos meses" cheira a otimização prematura. Não faça isso:
Não vale a pena. Muitas pessoas, ao realizar um projeto, acreditam que seu projeto será o segundo Facebook. Em seguida, eles o liberam e percebem que dez visitantes por mês é o melhor que podem fazer. Gastar menos dinheiro e tempo na otimização para maior escalabilidade e mais tempo pensando no projeto em si ajudaria.
É como nos gargalos e na criação de perfis: você sempre tem a impressão de saber perfeitamente onde está o gargalo e, na maioria dos casos, descobre que estava errado ao criar um perfil. Faça sua aplicação primeiro. Veja como é usado. Crie um perfil. Reúna dados de BI. Reúna métricas de desempenho. Analise isso. Verifique se sua análise estava correta. Faça as previsões sobre o futuro, com base em sua análise, e otimize para escalabilidade o que você realmente precisa otimizar.
Por exemplo, um aplicativo da Web escalável deve poder ser hospedado em vários servidores. O último projeto que fiz para o meu cliente teve como objetivo ser escalável. Havia uma opção: gastamos 1,5 meses a mais para fazer o aplicativo Web funcionar em vários servidores ou o cliente compra um servidor de alta qualidade (apenas uma máquina) e o aplicativo Web é hospedado apenas nessa máquina. Era muito mais barato comprar um servidor caro, contando o custo direto (preço do servidor versus preço de 1,5 meses de trabalho) e as economias de longo prazo (consumo de energia de um servidor de alta qualidade vs. consumo de energia de vários servidores). Agora, o aplicativo está em execução por alguns meses e, de acordo com as métricas, se houvesse um problema com a escalabilidade um dia, seria um problema em primeiro lugar o banco de dados,
Agora, um aplicativo pode ser mais ou menos escalável em vários pontos:
Banco de dados: de acordo com minha experiência pessoal, a maioria dos problemas relacionados à escalabilidade vem do banco de dados. Felizmente, existem várias maneiras de tornar o banco de dados escalável para todos os mecanismos de banco de dados de nível industrial e, mesmo antes disso, existem várias maneiras de melhorar a estrutura do banco de dados e otimizar as consultas . O cache também ajuda.
Rede: a largura de banda pode ser um problema real em algumas configurações e, às vezes, você não pode fazer nada sem fazer despesas que não pode pagar. Para evitar ser bloqueado nesse nível, você pode otimizar o design visual do site para ter menos imagens ou melhores imagens compactadas , otimizar o layout da página, reduzir as solicitações HTTP (por meio de sprites CSS ), reduzir a quantidade de HTML código enviado (por meio de AJAX ), etc. A compactação HTTP é essencial. Cache do navegador também, mas suas métricas podem mostrar que muitos clientes têm um cache vazio.
Uso de CPU e memória: transportar um aplicativo para ser hospedado por vários servidores também pode ser doloroso, tanto no nível de infraestrutura (hardware) quanto no nível de aplicativo (software). Para evitar isso, use armazenamento em cache extensivo e analise o perfil do aplicativo, removendo progressivamente os gargalos .
Muito obrigado. Atualmente não estou desenvolvendo para isso em mente. Coincidentemente, na verdade, vou apenas reunir informações para ver para onde as coisas vão. Fiquei curioso com o que os outros sabem, mas obrigado pelo conselho!
Andy Andy
Eu vejo. Modifiquei a resposta para resolver melhor sua preocupação.
Arseni Mourzenko
5
A escalabilidade é muito independente da linguagem, portanto, não há algo específico para o PHP. O fator principal é ter subsistemas dissociados, comunicando-se através de protocolos independentes de linguagem (por exemplo, se você precisar chamar o serviço da web a partir do seu código PHP, não use PHP serialize, mas JSON, mesmo que ambos os componentes estejam implementados no PHP). Isso permitirá que você substitua os componentes por outras alternativas, talvez desenvolvidas em outras tecnologias.
Entendo o que você está dizendo, então essencialmente divida o trabalho. Agradeço o conselho.
Andy Andy
Eu olhei para o doc php em serializar. Eu não estou muito familiarizado com isso. Qual é o propósito se você não se importa de eu perguntar?
Andy Andy
Não vou vincular postagens específicas, pois elas podem ser tendenciosas, mas basta fazer alguma pesquisa em SOA (Service Oriented Architecture) e Sistemas Distribuídos. Faltam bibliotecas e diretrizes sobre PHP na Internet. A maneira mais fácil de começar é com uma infraestrutura de mensagens e um design orientado a eventos.
andho
2
@ Andy: o objetivo de serializeé serializar o estado do objeto em uma string. Sinônimos para serialização usados em outros idiomas são empacotamento ou decapagem. O problema com esse tipo de serialização é que é específico da linguagem. É por isso que padrões bem definidos, como JSON, são melhores para transmitir dados para serviços da web.
Vartec 17/01/12
Ah, sim, eu estava realmente pensando em como armazenar certo lado do servidor de informações, e acho que isso me ajuda nesse sentido. Apenas para ter certeza, digamos que eu gostaria de armazenar informações sobre cookies do lado do servidor, da maneira que eu faria usando serialização? Muito obrigado!
Andy
1
Preocupar-se com a escalabilidade agora provavelmente não vale a pena: se o seu projeto decolar e atingir a marca de onde você não pode escalar adicionando mais hardware, você terá dinheiro suficiente para financiar medidas mais completas; caso contrário, qualquer esforço que você fizer agora será um desperdício de tempo e recursos.
Dito isso, há algumas coisas que você pode e deve fazer para manter seu aplicativo sustentável , e se você seguir essas diretrizes, considerar a escalabilidade será muito mais fácil posteriormente no jogo. Uma solução ideal permitirá que você troque todo o código de armazenamento de dados com apenas alterações mínimas na lógica do programa e nenhuma alteração no código de apresentação.
A escalabilidade é muito independente da linguagem, portanto, não há algo específico para o PHP. O fator principal é ter subsistemas dissociados, comunicando-se através de protocolos independentes de linguagem (por exemplo, se você precisar chamar o serviço da web a partir do seu código PHP, não use PHP
serialize
, mas JSON, mesmo que ambos os componentes estejam implementados no PHP). Isso permitirá que você substitua os componentes por outras alternativas, talvez desenvolvidas em outras tecnologias.Você pode encontrar muitos exemplos de arquiteturas escalonáveis implementadas usando PHP no blog highscalability.com
fonte
serialize
é serializar o estado do objeto em uma string. Sinônimos para serialização usados em outros idiomas são empacotamento ou decapagem. O problema com esse tipo de serialização é que é específico da linguagem. É por isso que padrões bem definidos, como JSON, são melhores para transmitir dados para serviços da web.Preocupar-se com a escalabilidade agora provavelmente não vale a pena: se o seu projeto decolar e atingir a marca de onde você não pode escalar adicionando mais hardware, você terá dinheiro suficiente para financiar medidas mais completas; caso contrário, qualquer esforço que você fizer agora será um desperdício de tempo e recursos.
Dito isso, há algumas coisas que você pode e deve fazer para manter seu aplicativo sustentável , e se você seguir essas diretrizes, considerar a escalabilidade será muito mais fácil posteriormente no jogo. Uma solução ideal permitirá que você troque todo o código de armazenamento de dados com apenas alterações mínimas na lógica do programa e nenhuma alteração no código de apresentação.
fonte