Exibindo várias instâncias de serviço da web [closed]

2

Estamos criando uma solução da Web baseada em API no Python que será entregue a clientes individuais. Cada cliente terá um conjunto de dados separado.

Atualmente, não é um problema implantar uma instância do aplicativo + banco de dados para cada cliente, mas isso vai se tornar um pesadelo com mais clientes: imagine centenas de casos e despesas administrativas com isso. Obviamente, a solução deve se tornar mais "centralizada".

No entanto, os dados são bastante sensíveis, por isso não podemos manter tudo em um único banco de dados: um servidor comprometido e uma senha do banco de dados levarão ao vazamento de todos os dados. Tais riscos são inaceitáveis.

Quais são as tecnologias certas a serem consideradas ao desenvolver uma plataforma de servidor de API distribuída? Quais práticas inteligentes tornarão a solução mais "centralizada", de modo que nos livramos de muitas instâncias, mas ainda mantemos os dados isolados?

    
por kolypto 13.03.2014 / 00:51

1 resposta

3

Em suma, AWS + Cloudformation + Ansible (ou algum outro software CM).

Com o cloudformation, você pode definir sua infraestrutura de "porcas e parafusos" - redes, servidores, instâncias do RDS, etc., e implantar essa infraestrutura de maneira confiável e repetível. Esse mesmo manifesto de cloudformation seria implantado uma vez para cada cliente.

Uma vez que a infra-estrutura é implantada, use um sistema de gerenciamento de configuração para configurar seus servidores, implantar código, etc. Ansible é o que estamos usando, e descobri que está acima da concorrência (Puppet, Chef , Saltstach, etc.), tanto quanto facilidade de uso e flexibilidade. Ansible é um projeto python, e sendo uma loja python, seria fácil para você se atualizar.

Além disso, considere ver se você pode implantar seu aplicativo usando o Elastic Beanstalk da AWS. Se isso for possível, você terá que lidar com a implantação, as atualizações do servidor e o dimensionamento.

Se você estiver preocupado em manter uma proporção de 1: 1 de clientes para instâncias de servidor, considere a implantação de várias instâncias do seu aplicativo em um único servidor usando o Docker. Isso permitiria uma quantidade razoável de segregação entre as instâncias do aplicativo e, ao mesmo tempo, tornaria mais fácil implantá-lo de maneira controlada.

    
por 13.03.2014 / 00:59