Sistema com muitos acessos simultâneos

561 views
Skip to first unread message

Anderson Machado

unread,
May 17, 2017, 2:34:10 PM5/17/17
to
Olá pessoal,

estou precisando de um help do grupo. Estou desenvolvendo um sistema que não vou usar framework(na primeira versão)... apenas php jquery e bootstrap...

Nesse sistema, até realizar a mudança para utilizar um framework( que devo usar o Laravel + Angular) o sistema deverá atingir um acesso de cerca de umas mil pessoas conectadas ao sistema ao mesmo tempo.
Sei que o php aguenta essa quantidade de pessoas penduradas no site e sei que devo desenvolver alguma lógica para gerenciar as conexões ao banco.
Estou utilizando PDO para fazer criar a conexão com o banco Postgres 9.5.

Se não me engano vi algo que o próprio PDO gerencia isso, confirmam? Alguém pode me dar um caminho do que pesquisar ou de como implementar caso o pdo não dê conta..

Caso não tenha sido claro, digam que explico de outra maneira...

Desde já, agradeço a atenção de vocês...

--
Att,

Anderson A. Machado

Diego Nascimento

unread,
May 17, 2017, 5:12:04 PM5/17/17
to php-b...@googlegroups.com
Ola 'Anderson,

Existem frameworks bem rápidos dê uma olhada nesses:
https://phalconphp.com/pt/

Que tipo de aplicativo pretende fazer? normalmente sites com grande acesso são cacheados ao máximo, acabam fazendo pouco acesso ao banco de dados e processamento do PHP.

O que se pode fazer é balancear carga entre mais de um servidor, contendo o mesmo aplicativo, o load balancer divide as conexões entre os dois servidores, o nginx faz isso, pode ler uma matéria aqui,


tem o haproxy tbm, 


Fale mais do aplicativo, com alguns detalhes fica mais fácil de ajudar nesses detalhes de arquitetura.


Att,



--
Você recebeu essa mensagem porque está inscrito no grupo "php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para php-b...@googlegroups.com.
Acesse esse grupo em https://groups.google.com/group/php-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.

Anderson Machado

unread,
May 18, 2017, 9:42:49 AM5/18/17
to php-b...@googlegroups.com
Diego,
a questão é que agora não tenho tempo hábil para implementar o sistema com framework, porque o sistema está quase concluído.
Já implementei o singleton para gerenciar as conexões ao banco... porém me veio esta dúvida se o PDO gerencia essas questão das conexões simultaneas para a quantidade de usuários pendurados no site... devo estar fazendo a hospedagem na locaweb.
Já li em algum lugar alguma vez, que não lembro onde que essa variável aqui alterada poderia resolver essa questão
Conexao::$con->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);

Esse nginx é como um apache? O próprio apache não gerencia isso não?

É um sistema voltado para contabilidades estarem compartilhando informações com seus clientes. Uma contabilidade somente não teria tantos clientes pendurados no site ao mesmo tempo, mas as várias que estamos fechando contrato pode chegar a esse número que me preocupa...

Eu imagino que seja uma questão que se resolve em código, mas vale as idéias que sejam rápidas e simples de serem implementadas.

Mais alguém sobre essa questão? Consigo resolver de alguma maneira com implementação de um pool de conexões ou coisa do tipo?

Diego Nascimento

unread,
May 18, 2017, 10:12:07 AM5/18/17
to php-b...@googlegroups.com
Bom dia Anderson,

Qual plano de hospedagem pretende usar?

Olha, por experiência, usar apache vai te criar um gargalo desnecessário, o nginx consegue fazer muito mais conexões simultâneas por um custo muito menor de memória e processador, veja esses gráficos.


Com relação ao PDO eu não sei qual função pode te ajudar, mas ainda acho que não é ele o problema para seu aplicativo, você deve conhecer bem formas de cache em memória, aonde pode fazer toda a operação primeiramente na memória para depois acessar o banco de dados, isso resolveria teu problema.. deve também se preocupar com a configuração do servidor, dos limits, do webserver, do banco de dados, otimizar tudo ao máximo para permitir melhor uso dos núcleos do processador, melhor uso das threads do SO.. apostar nisso para conseguir o maior número de conexões simultâneas, e quando chegar ao seu limite, usar uma abordagem como a que passei, sobre balanceamento de carga (load balancing), distribuindo teu aplicativo por mais de um servidor e distribuindo as conexões entre eles.


Att,

Diego Nascimento

unread,
May 18, 2017, 10:14:16 AM5/18/17
to php-b...@googlegroups.com

Em 18 de maio de 2017 10:42, Anderson Machado <ander...@gmail.com> escreveu:

Diego Nascimento

unread,
May 18, 2017, 10:16:33 AM5/18/17
to php-b...@googlegroups.com

Anderson Machado

unread,
May 18, 2017, 4:14:42 PM5/18/17
to php-b...@googlegroups.com
Diego,

acho que é essa questão do PDO que eu li há algum tempo atrás... bem a coluna que comentei mais cedo... só queria de alguém que entendesse bem de PDO para me esclarecer se somente essa ATTR_PERSISTENT vai resolver minha situação de gerenciar as threads do SO e gerenciar essas conexões do povo que ficar pendurado no site...
já tenho contratado o plano de hospedagem II da locaweb que dá direito a sites ilimitados, bancos etc... essas coisas...

Em relação a essa questão do cache, não conheço muito bem não, mas de qualquer forma vou precisar dos dados e consultas em tempo real, então essa questão do cache ficaria fora do contexto até onde imagino. Quais configurações de limits devo configurar no meu codigo para melhorar? que em teoria nao sei a configuração do webserver exata onde meu plano está pendurado. Do banco sei que normalmente essas hospedagens dão um limite de até 30 conexões simultaneas.

Li algumas coisas sobre essa questão de teste de stress e banlanceamento de carga para php, mas nao implementei nada ainda... se tiver algum material vai me passando ae...

Diego Nascimento

unread,
May 18, 2017, 5:12:35 PM5/18/17
to php-b...@googlegroups.com
Anderson,

Acho o sistema de hospedagem compartilhado muito limitado, para mil conexões simultâneas não me parece a melhor escolha.

Sempre usei nginx em meus sistemas, o apache costuma usar muita memória e estourar o limite do servidor muito rápido, mesmo usando VPS com maior performance. Costumo usar manuais do linode e do digitalocean para configurar meu servidor, veja alguns exemplos:

Instalação e configuração do Nginx

Manual e configuração do nginx, como limits.

Mais de limits

---------------------------------------------------------------

Aqui fala sobre conexões persistentes.


Para testes de stress, para saber como teu servidor se comporta com várias conexões, aqui tem um tutorial bem explicativo:

Você usa servidor compartilhado então deverá respeitar as limitações do mesmo, eu não consegui ter muito êxito com hospedagem compartilhada, então sempre contrato VPS, costumo usar linode, mas há outros mais simples de se usar como o DigitalOcean, pois oferece um painel de controle e faz tudo se tornar mais simples.



Abraço,



André Severino

unread,
May 18, 2017, 8:35:32 PM5/18/17
to php-b...@googlegroups.com
Será que seria uma boa usar conexão persistente ? 

Atenciosamente,

André da Silva Severino
Programador PHP e Desenvolvedor Web 
Criação de Sites, Sistemas/Softwares e Loja Virtual

celular:  19 98847-3747             |   id nextel:  35*74*14567
skype:    andredasilvaseverino   |   site:          www.andrewd.com.br


Diego Nascimento

unread,
May 19, 2017, 8:11:26 AM5/19/17
to php-b...@googlegroups.com
Nesse cenário não seria bom. O problema todo se resolve com um bom servidor, VPS ou dedicado, otimizados, e fazer o sistema de forma que se torne mais simples de escalar para acompanhar o crescimento do mesmo.

Jefferson Andrade

unread,
May 19, 2017, 9:25:22 AM5/19/17
to php-b...@googlegroups.com
Se por acaso resolver usar framework e outra linguagem:

http://dataforge.com.br/pydge/
https://github.com/jersobh/pydge

Eu mesmo desenvolvi, é muito bacana pra sistemas com muitos usuários simultâneos. Tá bem documentado e qualquer dúvida estou aqui :)

Jefferson Andrade

unread,
May 19, 2017, 9:27:31 AM5/19/17
to php-b...@googlegroups.com
Ah, e ele gera o model automagicamente à partir do seu bd postgresql.

Reply all
Reply to author
Forward
0 new messages