Servidor web de alto desempenho sem interatividade com banco de dados

Servidor web de alto desempenho sem interatividade com banco de dados

Estou me preparando para configurar um servidor que será responsável por rastrear dados estatísticos de uma fonte de tráfego de alto volume. Ele atenderá solicitações em média de 6 a 7 mil/hora, todas elas pequenas GETs. Tudo que preciso é de uma configuração simples de servidor que possa processar os parâmetros da solicitação get e gravá-los em um arquivo CSV.

Meu primeiro pensamento foi usar lighttpd+fastcgi+php, pois é uma configuração com a qual já estou familiarizado. Mas, como não tomo esse tipo de decisão de desempenho todos os dias, gostaria de explorar outras opções e ver se pode haver algo ainda melhor para esse propósito.

Responder1

Você deseja fazer de 6 a 7 milhões de operações de gravação em um arquivo CSV porhora?

Sério, um banco de dados é uma ideia melhor. Um banco de dados é projetado para lidar com gravações simultâneas e pode ser dimensionado verticalmente (máquina maior, discos mais rápidos) ou horizontalmente (carga distribuída por vários servidores). Gravando em um único arquivo CSV (ouqualquerfile) requer alguma forma de bloqueio para lidar com problemas de simultaneidade e é mal dimensionado à medida que a carga de E/S e a simultaneidade aumentam.

Para contornar isso, você provavelmente acabará implementando suas próprias camadas de cache e buffer e, em seguida, começará a dividir a carga entre vários arquivos, etc., etc. Use algum tipo de banco de dados desde o início e evite muitas dores de cabeça.

Responder2

Dado que você fará cerca de 2.000 solicitações/seg ou 500 µs/solicitação emMÉDIA(significando picos muito mais altos), os CSVs provavelmente são proibidos devido a entradas obstruídas em gravações simultâneas, já que nada garante gravações atômicas em seus arquivos.

Uma ideia seria arquivos por processo/por gravador que são coletados posteriormente, outra ideia seria usar um banco de dados fortemente ajustado para grandes quantidades de gravações. Você também pode dar uma olhada em filas de mensagens ou protocolos de comunicação de grupo (por exemplo,Espalhar), mas não sei se eles suportam esse volume.

Faça o que fizer, apresente algumas ideias rápidas e compare-as. O hardware atual pode fazer maravilhas em relação ao desempenho, otimizando apenas quando necessário. Quanto ao PHP - certifique-se de ter um Opcode Cache instalado (por exemploAPC), caso contrário você estará queimando muitos ciclos em recompilações desnecessárias dos scripts.

Lembre-se também de como está o crescimento do serviço, não faz sentido buscar uma solução que ficará sobrecarregada em alguns meses.

Responder3

Que tipo de parâmetros são passados ​​pela solicitação GET? Precisa estar em CSV/banco de dados em tempo real? ou você acha que poderia criar um arquivo HTML fictício (ou PHP) e apenas usar os logs da web para serem analisados ​​​​e despejados em um CSV posteriormente como um trabalho em lote? (ok .. isso parece complicado .. mas fácil de lidar) ..

Responder4

Eu daria uma olhada na edição web do servidor 2008 e usaria o ADO.net para gravar no arquivo CSV. Você não deve ter problemas de thruput, pois o ado.net armazenará em buffer as gravações.

informação relacionada