Gostaria de saber com as restrições do GAE listadas abaixo. É possível criar um ótimo aplicativo social (como o Facebook) hospedando esse aplicativo no GAE?
Em outras palavras, o GAE é uma infraestrutura capaz de hospedar um aplicativo usado por 600 milhões de usuários ativos?
Restrições que eu descobri em alguns fóruns / blogs (por favor, sinta-se à vontade para adicionar à lista se encontrar algo faltando):
Solicitação / resposta HTTP
- Tamanho máximo da solicitação: 32 MB
- Tamanho máximo de resposta: 32 MB
- Todas as solicitações devem responder dentro de 30 segundos, caso contrário, o GAE lançará DeadlineExceededException
- Cada tarefa cron deve ser executada em 10 minutos
- Trabalhos Cron não podem utilizar a redução de mapa
- Todo GET ou POST para outro site é abortado após 5 segundos. Você pode configurá-lo para esperar até 10 segundos no máximo. (servidores intermediários seriam necessários para trabalhar com o Twitter e o Facebook várias vezes)
- O cliente não pode se conectar ao GAE por FTP (apenas HTTP e HTTPS).
- Não há https para domínios personalizados. Apenas para domínios your-app-id.appspot.com.
- Se você receber um fluxo de usuários, receberá um erro "acima da cota"
Base de dados
- O comportamento do banco de dados não é o mesmo no desenvolvimento local que nos servidores reais.
- GQL. Nada mais.
- Nenhuma consulta pode recuperar mais de 1000 registros (é muito ruim se você deseja permitir que seu cliente tenha um botão "clique para ficar offline agora")
- Se você precisar de acesso linear a uma quantidade enorme de registros para executar uma operação, estará sem sorte (os sistemas do Google estão agrupados em massa)
- O tamanho máximo dos valores de Memcache é 1 MB.
- Não é possível fazer uma pesquisa de texto simples
- Você não pode participar de duas mesas.
- Lento (você precisa ler sobre como separar tabelas usando herança para poder pesquisar em uma tabela, obter a chave e obter seu pai para evitar o desempenho da desserialização)
- Exceção de tempo de execução "Muitos índices"
- Uma entidade pode ter no máximo 5000 valores de propriedades em um índice
- Os nomes-chave do formulário * (início e término com dois sublinhados) são reservados e não devem ser usados pelo aplicativo.
- Os nomes das chaves são limitados a 500 bytes (acho que codificado em UTF-8)
Língua
- python ou java ou Go (ou idiomas que usam a JVM como Groovy, Scala e outros)
Problemas do servidor
- Nenhum IP estático (pode haver problemas de limitação e cota ao chamar APIs de terceiros)
- Cada aplicativo é limitado a 3000 arquivos
- Nenhum controle do SO ou hardware executando o aplicativo Web
Respostas:
Acho que o que me incomoda nessa questão é que você a formulou e carregou com "fatos" na tentativa de obter um não definitivo.
A verdade é que você pode desenvolver um aplicativo do Google App Engine que replique os recursos do Facebook, Twitter ou Tumblr. E, supondo que o aplicativo fosse bem escrito, ele seria dimensionado para suportar centenas de milhões de usuários. O principal motivo pelo qual você não gostaria (o que não parece ser uma consideração para você) é o custo da execução de um serviço desse tamanho no App Engine.
Além disso, não consigo ver como alguma das restrições listadas o impediria de desenvolver um aplicativo desse tipo.
Solicitação / resposta HTTP
- se você estiver desenvolvendo um aplicativo social que frequentemente precisa entregar páginas maiores que 10 MB, provavelmente está fazendo algo errado. Além disso, se você precisar fornecer conteúdo maior que 32 MB, poderá usar o blobstore para arquivos de até 2 GB.
- Não há como o Facebook, Twitter ou Tumblr apenas receber uploads do usuário e copiá-los para uma pasta. Não é um problema.
- Se você precisar de mais de 30 segundos para entregar resultados à solicitação de um usuário, provavelmente está fazendo algo errado.
- Se você não pode dividir uma tarefa longa em partes de 10 minutos, A: provavelmente está fazendo errado e B: agora você pode mover essa tarefa para uma instância de Back-end, que não tem limite de tempo para solicitações.
Trabalhos Cron não podem utilizar a redução de mapa - nunca a redução de mapa usada, mas acho que isso requer uma citação.
Todo GET ou POST para outro site é abortado após 5 segundos. Você pode configurá-lo para esperar até 10 segundos no máximo. (servidores intermediários seriam necessários para trabalhar com o Twitter e o Facebook várias vezes) - Verdade.
- Se uma solicitação voltada ao usuário para uma API externa estiver demorando mais de 10 segundos, provavelmente é uma boa ideia pedir ao usuário para tentar novamente de qualquer maneira. Se não for uma solicitação voltada ao usuário, você poderá tentar novamente a tarefa automaticamente até que a API responda.
-- Por que isso é um problema? Você acha que alguma empresa de grande escala implementa alterações via FTP?
- Mas está no roteiro.
- Se você planejar corretamente seu aplicativo, nunca verá um erro de excesso de cota. O site Royal Wedding foi hospedado no App Engine e recebeu 32.000 solicitações por segundo. Sem erros de excesso de cota. Além disso, já viu a baleia falhar no Twitter ou o erro de excesso de capacidade no Tumblr? Esse é essencialmente o erro de excesso de cota.
Base de dados
- Se você quer dizer que executar o armazenamento de dados no laptop é mais lento do que executá-lo no cluster do App Engine, é verdade, caso contrário, não é verdade.
- A maioria dos desenvolvedores usa filtros db para consultar o armazenamento de dados. Além disso, você também poderia dizer que o MySQL permite "SQL. Nada mais".
- O limite de 1000 registros foi levantado há muito tempo. Além disso, mostre-me qualquer página voltada para o usuário no Facebook, Twitter ou Tumblr que exija mais de 1000 registros para renderizar.
- Eu nem tenho certeza do que você está recebendo aqui. A maioria das pessoas considera a velocidade do enorme cluster do Google como uma enorme vantagem do sistema.
O tamanho máximo dos valores de Memcache é 10 MB. - Na verdade, é 1 MB por entrada do memcache, o mesmo que qualquer outra implementação do memcache.
Não é possível fazer a pesquisa de texto simples - Verdadeiro.
- É um recurso que está no convés. A maioria dos sites grandes não faz sua própria indexação de pesquisa de texto.
- Os desenvolvedores do App Engine precisam ajustar seus pensamentos de uma única consulta SQL de várias junções em massa para várias consultas individuais menores ou desnormalizar os dados para que as junções não sejam necessárias.
- tradução / citação necessária.
- Há um limite para o número de índices em um único aplicativo. Só vi aplicações de pesquisa acadêmica chegarem lá.
- Portanto, se alguém tiver mais de 5000 amigos, precisará de duas entidades no grupo de amigos.
__*__
(início e fim com dois sublinhados) são reservados e não devem ser usados pelo aplicativo. - Verdade-- Mas e daí?
- Novamente, e daí? Os nomes-chave não são para armazenar novelas, são para identificar exclusivamente uma entidade.
Língua
- Na verdade, você também pode executar qualquer linguagem que seja executada na JVM, incluindo PHP e JRuby. No entanto, não sei por que isso é um problema, Python e Java são duas linguagens poderosas, com muitas ferramentas disponíveis, tutoriais e programadores experientes.
Problemas do servidor
- A maioria das APIs de terceiros conhece o App Engine e / ou tem um relacionamento com o Google. Algumas vezes o Twitter bloqueou acidentalmente o App Engine e ele é corrigido em algumas horas.
- Se você realmente precisar de mais de 3000 arquivos de código para o seu aplicativo da Web, poderá usar as importações de zip (além disso, você pode estar fazendo errado).
- O App Engine é uma plataforma como serviço . Não é preciso se preocupar com a manutenção do sistema operacional ou do hardware. Essa é a principal vantagem do App Engine, não uma limitação.
fonte
Não, o Google App Engine não é apropriado para um aplicativo com 600 milhões de usuários ativos.
Realisticamente, os aplicativos desse tamanho são executados em infraestrutura altamente personalizada a partir de seus próprios datacenters. Provavelmente, é possível hospedar esse aplicativo com o Google, mas você trabalharia diretamente com a equipe de vendas para projetar uma solução; há muito tempo as restrições da caixa de areia listadas acima seriam irrelevantes.
Se você está apenas começando, é bobagem projetar em torno da suposição de que você se tornará tão popular quanto o Facebook. Qualquer aplicativo que obtém esse tamanho grande o faz de maneira incremental e com recoforização constante. Primeiro, preocupe-se em projetar recursos que atrairão 600 milhões de usuários. Redesenhar a implementação para suportar uma base crescente de usuários é um problema trivial em comparação.
fonte
Penso que os pontos dessa FAQ se enquadram em algumas áreas principais.
Primeiro de tudo, há os pontos que são realmente para o benefício da escalabilidade, e não para o prejuízo. Em um aplicativo altamente escalável, uma das coisas pelas quais você se esforça é garantir que todas as solicitações sejam amplamente independentes das demais e também que elas tenham o mesmo "tamanho" (em termos de uso da CPU, memória, rede, etc.).
Dessa forma, as solicitações podem ser facilmente distribuídas entre os nós do cluster sem se preocupar com um grupo de solicitações "grandes" passando fome por solicitações menores no mesmo nó. Isso mantém sua infraestrutura simples em termos de manutenção, desempenho e confiabilidade.
Então, isso abrange coisas como:
A segunda categoria são coisas simplesmente desatualizadas:
Agora, seria bom se o Google abrisse sua infraestrutura para permitir que tarefas cron utilizassem o Redução de mapa e permitisse executar consultas em todo o conjunto de dados. Porém, quando você chegar a uma fração significativa de 600 milhões de usuários, você já será um grande cliente do Google e terá mais opções do que as disponíveis no App Engine.
fonte
Se você tiver uma idéia que atrairá até 100, quanto mais 600 milhões de usuários, terá qualquer capital de risco e qualquer equipe de tecnologia para desenvolver e executá-lo em qualquer infraestrutura. Além disso, você também desejará proteger sua propriedade intelectual, o que o GAE não fornecerá porque o Google deseja ter acesso ao código-fonte de todos os aplicativos do GAE (você não pode realmente proteger o código Python e Java).
O GAE é adequado para empresas que desejam se livrar de seus custos de infraestrutura de TI e não precisam proteger o código IP, mas apenas seus dados.
fonte