Serviço de nuvem e conselhos de protocolo de IM, para um back-end para um aplicativo móvel de bate-papo em grupo

8

Visão geral
Vou desenvolver um aplicativo no Android e iOS. Isso permitirá que os usuários configurem 'salas de bate-papo' em grupo e conversem em salas de bate-papo configuradas por outros usuários. O serviço precisa ser altamente escalável, de modo que possa acomodar um aumento maciço de usuários da noite para o dia (só podemos sonhar).


Informações de plano de fundo
Anteriormente, eu usei principalmente Java e Python, mas as linguagens mais apropriadas para esta tarefa devem ser usadas. Não me importo de aprender muitas novas habilidades.

Requisitos de
bate-papo O protocolo de bate-papo deve ser flexível: deve determinar quem pode visualizar / postar em 'salas de bate-papo' com base em fatores determinados pelo primeiro pôster / criador da 'sala de bate-papo' específica. Também deve permitir que os usuários instalem o aplicativo e comecem a usar o serviço, depois de fornecer apenas um apelido simples (que pode ser alterado posteriormente).


Planos de protocolo de bate-papo
Tendo olhado em volta, acho que o protocolo XMPP é o melhor candidato. Em particular, a extensão de bate-papo para vários usuários se parece com o que vou precisar. Isso seria mais adequado aos meus requisitos ou você conhece outra solução em potencial?

Atualização: Desde então, pesquisei o Protocolo para Conferência Síncrona e ele parece se encaixar perfeitamente com minhas necessidades. No entanto, não tenho certeza de como está bem documentado ou como realmente o implementaria.


Serviço em nuvem
Decidi entre o Amazon Web Services, o Google App Engine e o Windows Azure. Estou chegando à conclusão de que o Azure será o melhor, pois é mais fácil de gerenciar do que a AWS (a facilidade de escalabilidade será um fator-chave no design), acho que pode ser menos restrito que o GAE, e o Azure em breve terá kits de ferramentas para permitir uma fácil interface com os telefones Android e iOS.

Atualização: olhando para além, parece que a AWS seria mais barata e que eles têm disposições, como o Elastic Load Balancing e o Auto Scaling , que tornam o trabalho extra necessário para manter a escalabilidade bastante insignificante.

Essa é a decisão que você tomaria ou recomendaria / analisaria outros serviços em nuvem?


Requisitos gerais
Quaisquer componentes devem ser bem documentados, comprovadamente confiáveis ​​e, de preferência, de alto nível sempre que possível. Por exemplo, eu preferiria usar um plug-in para implementar o protocolo de bate-papo em vez de escrevê-lo, deixando-o para pessoas mais experientes.


Obrigado
Obrigado pela leitura, e qualquer conselho que você tiver sobre qualquer aspecto seria muito apreciado :-)

Jon Cox
fonte
Examinando mais outros aspectos, cheguei à conclusão de que ainda não tenho idéia de qual provedor de nuvem usar. A AWS parece que pode ser mais barato que o Azure e, após uma inspeção mais detalhada, possui algumas boas ferramentas para gerenciar a escalabilidade automaticamente.
Jon Cox
Não sei ao certo o que você está procurando. Você poderia fazer perguntas mais específicas? "Essa é a decisão que você teria tomado?" é bastante subjetivo. Você pede conselhos sobre o protocolo (bom), mas a coisa toda parece mais uma RFC do que uma boa pergunta SE.
Greg Jackson
Minha impressão foi que programmers.stackexchange é o lugar para perguntas subjetivas sobre desenvolvimento de software. Como tal, existem muitas soluções possíveis para as coisas que eu pedi, e eu estaria muito interessado em diferentes opiniões povos em qualquer um deles :)
Jon Cox
É verdade, mas de acordo com a FAQ , "Você só deve fazer perguntas práticas e respondíveis com base nos problemas reais que enfrenta. As perguntas abertas e tagarelas diminuem a utilidade do nosso site e expulsam outras perguntas da primeira página". Em outras palavras, quanto mais específico, melhor. Você pode ser subjetivo e específico; portanto, as perguntas diretas ainda são melhores que as RFCs. A diferença está aqui, eu sugiro que você esclareça sua pergunta, enquanto no SO, ela seria fechada (embora, sim, já seja subjetiva demais para o SO, não importa quão específica).
Greg Jackson
Não me interpretem mal, é uma pergunta muito boa, mas ainda pode ser melhor.
Greg Jackson

Respostas:

2

Protocolo

Sim, isso vai parecer uma imitação, mas depende de você. Honestamente, o que você descreveu soa muito parecido com o IRC, mas o XMPP é bastante extensível e amplamente usado, por isso é provavelmente o mais não-IRC mais fácil de trabalhar e de obter suporte. Você poderá encontrar muitos exemplos para as duas plataformas e, provavelmente, até as bibliotecas já preparadas, se quiser ir nessa direção. Não vou recomendar nenhum, mas uma pesquisa rápida deve ser uma ferramenta muito útil aqui. Não existe uma resposta certa, mas o XMPP certamente não é uma má escolha.

Serviço na nuvem

O Azure e a AWS são serviços muito bons. Muitos aplicativos importantes ou de alto perfil são executados em cada um deles. Um dos motivos pelos quais eu costumo favorecer o Azure em vez da AWS, no entanto, é que a Microsoft realmente tenta facilitar a sua obtenção. Se você ainda não o fez, eu examinaria o Bizspark , que, se você for aprovado, oferecerá, entre outras coisas, uma pequena instância gratuita do Azure. Para ser justo, a Amazon faz o mesmo tipo de coisa , mas elas parecem oferecer um pouco menos e apenas por um ano (o Bizspark é de 3 anos). Por outro lado, o Bizspark exige que você seja aprovado, enquanto a Amazon realmente o entrega com facilidade.

Em suma, qualquer um deles é realmente um bom serviço, e a Microsoft e a Amazon tendem a estar muito comprometidas em ajudar os desenvolvedores a fazer as coisas, para que você não possa dar errado de qualquer maneira. A melhor maneira de decidir é examinar os recursos que eles oferecem, comparados ao que você precisa, e os preços para os níveis mínimo e ideal. Por exemplo, se você deseja dar suporte ao Windows Phone, o Azure pode ser uma opção melhor, porque eles funcionam bem juntos, mas se você deseja aproveitar os serviços de atendimento e enviar camisetas ou canecas de café ou qualquer outra coisa relacionada, a Amazon pode ser a melhor escolha (Nota: não leia nenhum deles; propositadamente, escolhi dois cenários que você não mencionou apenas para dar um exemplo de alguns dos recursos exclusivos dos serviços.)

Quanto ao Elastic Load Balancing e Auto Scaling, é apenas a marca da AWS que os servidores em nuvem geralmente fazem. Todos os serviços de nuvem decentes tornarão o dimensionamento do sistema tecnologicamente insignificante, pelo menos do lado deles (se você tiver um código incorreto que não dimensiona bem, não poderá culpá-lo ...). Então, sim, essas são coisas boas, mas todo mundo as possui, portanto não devem tomar decisões.

Greg Jackson
fonte
Obrigado pela sua resposta. Definitivamente, me ajudou a pensar mais sobre o que realmente será necessário e esclareceu meus pensamentos em outras áreas. Felicidades.
Jon Cox
O IRC foi a primeira coisa que me veio à cabeça também. É um protocolo extremamente bem documentado e simples, e bem projetado para aumentar o número de usuários.
Cercerilla
0

Não sei nada sobre protocolos de bate-papo, então vou pular para a nuvem.

Não gosto da ideia de hospedar uma presença inteira na nuvem.

Por que não começar com a configuração de 2 pequenos servidores virtuais no modo de failover? Existem fornecedores que oferecem instalações suficientes para equilibrar geograficamente duas pequenas instâncias virtuais por US $ 40 por mês.

À medida que você cresce, aumente / diminua o tamanho / quantidade da instância virtual, conforme necessário, enquanto usa a nuvem para explosão. O VPS é mais barato que as instâncias horárias usadas em período integral.

Parece-me que seu sistema pode ser particionado facilmente com base em salas de bate-papo. Recursos diferentes hospedam salas de bate-papo diferentes - e eles se movimentam com base no número de usuários simultâneos para se aproximarem da distribuição ideal.

Isso deixa dois desafios técnicos: 1: Como você migra uma sala para um novo servidor no meio do fluxo? 2: Como você lida com uma sala que precisa de mais recursos do que uma única unidade de computação / unidade vps?

Jonno
fonte