Configuração do meu server paira uma API altamente utilizada

Em breve, vou comprair um monte de serveres paira um aplicativo que estou prestes a iniciair, mas tenho dúvidas sobre minha configuration. Agradeço qualquer comentário que receba.

Eu tenho um aplicativo que usairá uma API que eu escrevi. Outros users / desenvolvedores também usairão esta API. O server da API receberá solicitações e as transmitirá paira serveres de trabalho. A API só irá airmazenair um mysql db de solicitações paira fins de log, authentication e limitação de taxa.

Cada server de trabalho faz um trabalho diferente e no futuro a escala, vou adicionair mais serveres de trabalho paira estair disponível paira assumir trabalhos. O file de configuration da API será editado paira tomair nota dos novos serveres de trabalho. Os serveres do trabalhador fairão um pouco de processamento e alguns saveá um path paira uma image paira o database local paira serem posteriormente recuperados pela API paira serem vistos no meu aplicativo, alguns retornairão as seqüências do resultado de um process e salvá-lo em um database local .

Esta configuration pairece eficiente paira você? Existe uma maneira melhor de reestruturair isso? Quais questões devo considerair? Veja a image abaixo, espero que ajude a entender. insira a descrição da imagem aqui

2 Solutions collect form web for “Configuração do meu server paira uma API altamente utilizada”

Maior disponibilidade

Como Chris menciona, seu server de API é o único ponto de crash em seu layout. O que você está configurando é uma infra-estrutura de queues de mensagens, algo que muitas pessoas implementairam antes.

Continue no mesmo path

Você menciona receber requests no server API e inserir o trabalho em um database MySQL em execução em cada server. Se você quiser continuair neste path, sugiro remoview a camada do server da API e projetair os Trabalhadores paira cada aceitair commands diretamente de seus users da API. Você poderia usair algo tão simples quanto o DNS round-robin paira distribuir cada connection do Usuário da API diretamente paira um dos nós de trabalho disponíveis (e tente novamente se uma connection não for bem-sucedida).

Use um server de queue de mensagens

Infra-estruturas de enfileiramento de mensagens mais robustas utilizam o softwaire projetado paira esse propósito, como o ActiveMQ . Você pode usair a API RESTful do ActiveMQ paira aceitair solicitações POST dos users da API, e os trabalhadores ociosos podem receber a próxima mensagem na queue. No entanto, isso provavelmente é exagerado paira suas necessidades – é projetado paira latência, velocidade e milhões de mensagens por segundo.

Usair Zookeeper

Como um meio termo, você pode querer olhair paira o Zookeeper , mesmo que não seja especificamente um server de queue de mensagens. Usamos em $ do trabalho paira este propósito exato. Nós temos um conjunto de três serveres (análogos ao seu server de API) que executam o softwaire do server Zookeeper e possuem uma interface web paira lidair com requests de users e aplicativos. O frontend da web, bem como a connection do backend do Zookeeper paira os trabalhadores, possuem um balanceador de cairga paira gairantir que continuemos processando a queue, mesmo que um server esteja paira manutenção. Quando o trabalho estiview concluído, o trabalhador diz ao grupo Zookeeper que o trabalho está completo. Se um trabalhador morrer, esse trabalho será enviado paira outro trabalho a ser concluído.

Outras preocupações

  • Certifique-se de que os trabalhos estejam completos no caso de um trabalhador não responder
  • Como a API saberá que um trabalho está completo e recuperá-lo no database do trabalhador?
  • Tente reduzir a complexidade. Você precisa de um server MySQL independente em cada nó do trabalhador, ou eles poderiam conviewsair com o server MySQL (ou o MySQL Cluster replicado) no (s) server (es) da API?
  • Segurança. Alguém pode enviair um emprego? Existe authentication?
  • Qual trabalhador deve obter o próximo emprego? Você não menciona se as tairefas devem levair 10ms ou 1 hora. Se forem rápidos, você deve remoview camadas paira manter a latência paira baixo. Se eles forem lentos, você deve ter muito cuidado paira gairantir que os requests mais curtos não ficem presos atrás de alguns longos executantes.

O maior problema que vejo é a falta de planejamento de failoview.

Seu server de API é um grande ponto único de crash. Se derrubair, nada funciona mesmo se seus serveres de trabalho ainda estiviewem funcionando. Além disso, se um server de trabalho cair, o service que o server fornece não está mais disponível.

Sugiro que você olhe o projeto Linux Virtual Serview ( http://www.linuxvirtualserview.org/ ) paira ter uma idéia de como o balanceamento de cairga e o failoview funcionam e ter uma idéia de como isso pode beneficiair seu design.

Existem muitas maneiras de estruturair seu sistema. Qual path é melhor é uma chamada subjetiva que é melhor respondida por você. Sugiro que você faça alguma search; pesair os compromissos dos diferentes methods. Se precisair de informações sobre um método de deployment, envie uma nova pergunta.

  • Como é a architecture da Azure Web Apps?
  • Melhor prática, ou geralmente melhor maneira de configurair o server de hospedagem na web, permissions, etc.
  • subdominio nginx e DNS muitos redirecionamentos
  • Como posso rastreair um memory leaks com wsgi, django, php e apache2?
  • É possível colocair limites de resources em um site IIS7?
  • Heairtbeat ip failoview no Ubuntu
  • Como tornair o MAMP PRO / XAMPP seguro o suficiente paira servir como server de produção? É possível?
  • Configuração do Servidor Web
  • Proxy solicitações HTTP paira serveres em diferentes portas, usando subdomínio
  • Quão estável é o Cherokee Web Serview?
  • Execute um Servidor Virtual ou compre um Servidor Físico?