O Snapchat é bem conhecido entre pré-adolescentes e adolescentes. Você provavelmente tem mais de 25 anos se não consegue descobrir como funciona. O Snapchat, um dos aplicativos de mídia social mais populares, oferece a crianças e adolescentes exatamente o que eles desejam: um método fácil de compartilhar ocorrências comuns e ao mesmo tempo fazê-los parecer legais.
Ao contrário do Facebook e do Twitter, que registram e publicam tudo o que você faz, o Snapchat emprega mensagens que deveriam desaparecer (veja como elas não desaparecem).
Há muito sobre o Snapchat e, se você é um desenvolvedor, é ainda mais. Então, este post lhe dará uma visão de alto nível do Snapchat projeto de sistema e muito mais insights.
Introdução
O Snapchat é um aplicativo baseado nos EUA redes sociais aplicativo que permite que os usuários se conectem imediatamente, compartilhem imagens e muito mais.
- Mensagens e imagens (ou snaps) têm um limite de tempo de 24 horas. Incentiva as pessoas a compartilhar suas histórias em grupos.
- O Snap Map permite que os usuários vejam em um mapa onde estão seus amigos.
- As memórias lembram os usuários das fotos que eles salvaram ou compartilharam um ano depois.
- O Snapchat é extremamente popular entre as gerações mais jovens, especialmente os adolescentes. Existem 319 milhões de usuários ativos no aplicativo e 5.4 bilhões de snaps são enviados todos os dias.
Termos de design importantes
Arquitetura Monolítica – Um aplicativo de camada única que opera independentemente de outros aplicativos é conhecido como monolito (arquitetura monolítica). Um monólito é projetado para executar e lidar com todas as atividades necessárias para concluir uma tarefa. O aplicativo executa todas as funções do início ao fim.
Microservices – É o oposto dos monólitos. Microservices é uma abordagem arquitetural que organiza um aplicativo como uma coleção de serviços. Esses serviços são usados para controlar muitos aspectos de um aplicativo. Um cliente faz um pedido, um garçom leva e entrega, e um chef prepara. Neste exemplo, cada componente funciona de forma independente e separada dos outros; ninguém sabe exatamente o que os outros estão fazendo e ninguém tem acesso às mesmas informações.
JSON: é um formato baseado em texto que pode ser usado para exibir objetos JavaScript, literais, matrizes e dados. Este formato baseado em texto destina-se a ser simples de ler e escrever, bem como ser digerível por software. JSON é comumente usado para transferir dados e informações entre servidores e aplicativos online.
Orquestração: A técnica de automatizar muitas operações é conhecida como orquestração. Esses trabalhos incluem configuração, coordenação e administração de sistemas e softwares de computador.
procuração: Um proxy atua como um intermediário entre um cliente que procura um recurso e o servidor que o fornece.
Malha: uma malha de serviço é um padrão de arquitetura de software que adiciona uma camada a uma camada de infraestrutura para permitir comunicação regulamentada, observável e segura entre serviços por meio de proxy.
Design de alto nível
Problemas monolíticos
O Snapchat se originou como um monólito baseado em nuvem baseado no Google App Engine. No entanto, à medida que o programa cresceu em popularidade e ganhou mais usuários e dados, a escalabilidade se tornou um problema.
Além disso, com um enorme raio de explosão dentro do monólito, distúrbios em todo o sistema eram mais possíveis. Um dos problemas do Snapchat foi definido como uma “tragédia dos comuns”, na qual os recursos competiam pelo acesso aos recursos; os recursos estavam carregando no momento da inicialização do aplicativo, permitindo que certos recursos carregassem mais rápido, mas os outros carregassem mais lentamente.
Os engenheiros também buscaram visibilidade clara, separação e propriedade de seus componentes do ponto de vista do desenvolvimento, para que o serviço pudesse ser flexível e eficiente.
Transformação
À medida que o Snapchat se expandia, a empresa percebeu que precisava dividir sua infraestrutura monolítica em partes menores e mais eficientes. Para fornecer menor latência, a organização decidiu desenvolver um design baseado em microsserviços.
Para cumprir esses objetivos, o Snapchat optou por atualizar seu software usando o Amazon DynamoDB, um serviço de banco de dados NoSQL escalável. A empresa conseguiu reduzir a latência média em 20% como resultado de seus esforços.
O aplicativo foi reescrito em vários aplicativos menores pela corporação. O Snapchat começou com vários aplicativos, incluindo uma câmera, bate-papo, memórias, edição de imagens, consumo de conteúdo e um mapa. Embora a integração desses programas em um único monólito fosse conveniente para os consumidores, representava um grave problema técnico em termos de manutenção do bom desempenho.
Para uma reescrita, a corporação estabeleceu muitas regras básicas. Não pré-carregue; cada recurso deve ser seu próprio aplicativo e deve ser rápido. O Snapchat interrompeu as modificações em vários lugares para permitir a reescrita, tornando-a uma tarefa estritamente técnica.
Integração de recursos adicionais
O aplicativo de câmera do Snapchat possui lentes, filtros, bitmojis e a capacidade de adicionar animações de realidade aumentada, entre outras coisas. O aplicativo de bate-papo do Snapchat também permite que os usuários armazenem fotos, salvem conversas, adicionem emoticons e muito mais.
O mapa do Snapchat, entre outras coisas, permite monitorar amigos se eles quiserem. Memórias, edição de fotos e consumo de conteúdo são aplicativos separados do Snapchat com seus recursos exclusivos.
As memórias permitem que você armazene ou modifique fotografias ou vídeos para uso posterior, bem como faça upload ou envie-os. Os usuários também podem utilizar a edição de imagens para cortar filmes, adicionar texto, adicionar adesivos e muito mais.
O consumo de conteúdo externo do Snapchat refere-se ao que ele mostra aos usuários com base em uma série de parâmetros.
Microservices
O programa dependia amplamente do JSON para realizar consultas de rede na época. No entanto, analisar JSON era demorado e ineficiente. O Snapchat usou uma API de gerenciamento de rede centralizada para mascarar o uso de JSON como um detalhe de implementação para resolver esse problema.
Os microsserviços apresentam os desafios do gerenciamento de estado do aplicativo, comunicação de serviço e gerenciamento de falhas. O Snapchat usou tecnologias de código aberto como o Temporal para superar as dificuldades de orquestração a fim de construir um sistema forte e confiável.
Como resultado, a organização decidiu usar um padrão de design de malha de serviço. O Snapchat usou o Envoy, outra ferramenta de código aberto que atua como proxy, para atingir esse padrão. O Envoy gerenciou o fluxo de tráfego de serviço por meio da infraestrutura, dando aos desenvolvedores visibilidade de possíveis dificuldades.
O Snapchat criou um aplicativo interno chamado Switchboard dentro do service mesh. O Switchboard serviu como um painel de controle para os serviços da Snap, permitindo que os usuários mudassem o tráfego, gerenciem as dependências de serviço (um recurso que permite que um serviço seja gerenciado dependendo da condição dos outros) e drenem regiões.
Para simplificar a complexidade das configurações potenciais nos serviços, o Switchboard foi utilizado em vez de expor toda a API do Envoy. O Snap possui uma rede interna e regional comum para seus microsserviços graças à malha de serviço.
Os serviços dentro da mesma região podem se conectar uns aos outros sem usar a Internet pública, e nenhum tráfego de rede externo pode se comunicar com partes internas da rede.
Somente os Gateways estariam autorizados a se expor à internet por motivos de segurança. Os gateways de API, por exemplo, podem servir facilmente como portas de entrada, processando solicitações de clientes/usuários e roteando-os junto com a rede.
Gateway de rede e API
Todas as consultas do cliente Snapchat são enviadas pelo API Gateway. Ele usa a mesma imagem do Envoy e se conecta ao mesmo plano de controle que nossos microsserviços internos. Nosso Plano de Controle nos permite habilitar filtros personalizados do Envoy.
Os sistemas de autenticação do Snapchat, bem como nossas tecnologias de limitação de taxa e redução de carga, são tratados por esses filtros. O Envoy usa o Service Mesh para rotear solicitações para o microsserviço relevante após a conclusão da cadeia de filtros.
Conclusão
O gateway de API do Snapchat roteia o tráfego externo para as muitas funcionalidades do aplicativo. As solicitações dos usuários para modificar os estados de configuração são gerenciadas por servidores, que então fornecer dados e informações de volta aos inúmeros serviços do aplicativo.
No geral, o design atual do Snapchat pode ser comparado a vários programas executados em um único sistema operacional, que neste caso é o aplicativo Snapchat. Eu tentei muito fornecer a você uma visão geral de alto nível do design do sistema Snapchat. Eu espero que você tenha achado isso útil.
Deixe um comentário