Este artigo foi publicado pela primeira vez na conta oficial: Mais AI (power_ai), bem-vindo para prestar atenção, programação e produtos secos AI serão entregues a tempo!
O título original é "Estimativa do verso do envelope", a tradução literal é o significado da estimativa do verso do envelope, "Estimativa do verso do envelope" é uma frase usada para descrever cálculos aproximados ou rápidos , geralmente feito no verso de um envelope ou em qualquer papel disponível. É um método de fazer estimativas grosseiras ou aproximações sem análises detalhadas ou cálculos complexos.
O objetivo de uma estimativa no verso do envelope é fornecer um valor aproximado ou uma ideia do tamanho ou viabilidade de um conceito sem investir muito tempo ou recursos em cálculos precisos. Ele pode ser usado para avaliar a viabilidade de uma ideia, avaliar o impacto potencial de uma decisão ou comparar rapidamente diferentes opções.
Embora as estimativas no verso do envelope possam não ter a precisão de uma análise detalhada, elas são valiosas para tomar decisões rápidas, iniciar uma investigação mais aprofundada ou transmitir ideias de maneira concisa e compreensível.
Durante as entrevistas de projeto do sistema, às vezes você será solicitado a usar estimativas de fundo para estimar a capacidade do sistema ou as necessidades de desempenho. De acordo com Jeff Dean, pesquisador sênior do Google, "cálculos de fundo do envelope são estimativas que você cria usando experimentos mentais e combinações de números de desempenho comuns para obter uma boa compreensão de quais projetos atenderão às suas necessidades" [1].
Você precisa ter um bom entendimento dos fundamentos da escalabilidade para fazer estimativas de fundo de envelope de forma eficaz. Os seguintes conceitos devem ser totalmente compreendidos: o poder de dois [2], números de latência que todo programador deve conhecer e números de disponibilidade.
poder de dois
Embora os volumes de dados possam se tornar muito grandes ao lidar com sistemas distribuídos, toda a computação se resume à computação básica. Para obter resultados de cálculo corretos, é importante conhecer as unidades de volume de dados expressas em potências de dois. Um byte é uma sequência de 8 bits. Um caractere ASCII usa um byte de memória (8 bits). Abaixo está uma tabela (Tabela 2-1) explicando as unidades de volume de dados.
Números de latência que todo programador deve saber
O Dr. Dean, do Google, revelou a duração de uma operação típica de computador em 2010 [1]. À medida que os computadores ficam mais rápidos e poderosos, alguns números se tornam obsoletos. No entanto, esses números ainda devem nos dar uma ideia geral de quão rápido ou lento operam diferentes computadores.
observação
ns = nanossegundo, μs = microssegundo, ms = milissegundo
1 ns = 10^-9 segundos
1 μs = 10^-6 segundos = 1.000 ns
1 ms = 10^-3 segundos = 1.000 μs = 1.000.000 ns
Um engenheiro de software do Google construiu uma ferramenta para visualizar os números do Dr. Dean. Esta ferramenta também leva em consideração o tempo. A Figura 2-1 mostra os números de latência visualizados a partir de 2020 (Fonte: Referência [3]).
Ao analisar os números na Figura 2-1, chegamos às seguintes conclusões:
- A memória é rápida, mas o disco é lento.
- Evite buscas em disco sempre que possível.
- Algoritmo de compressão simples é rápido.
- Se possível, comprima os dados antes de enviá-los pela Internet.
- Os datacenters geralmente estão localizados em regiões diferentes e leva tempo entre o envio de dados.
números de disponibilidade
Alta disponibilidade é a capacidade de um sistema de executar continuamente por um longo período de tempo esperado. A alta disponibilidade é medida como uma porcentagem, onde 100% significa nenhum tempo de inatividade para o serviço. A disponibilidade da maioria dos serviços está entre 99% e 100%.
Acordo de nível de serviço (SLA) é um termo comumente usado por provedores de serviços. Este é um acordo entre você (como provedor de serviços) e seu cliente que define formalmente o nível de tempo de atividade que seu serviço fornecerá. Os provedores de serviços em nuvem Amazon [4], Google [5] e Microsoft [6] definem seus SLAs em 99,9% ou mais. O tempo de execução é tradicionalmente medido em unidades de noves. Quanto maior o número de noves, melhor o desempenho. Conforme mostrado na Tabela 2-3, o número de noves se correlaciona com o tempo de inatividade esperado do sistema.
Exemplo: estimativa de QPS e requisitos de armazenamento para o Twitter
Observe que os números abaixo são apenas para este exercício, pois não são números reais do Twitter.
Premissas:
- Existem 300 milhões de usuários ativos mensais.
- 50% dos usuários usam o Twitter todos os dias.
- Os usuários postam uma média de 2 tweets por dia.
- 10% dos tweets contêm conteúdo de mídia.
- Os dados são armazenados por 5 anos.
Estimativa:
Estimativas de consultas por segundo (QPS):
- Usuários ativos diários (DAU) = 300 milhões * 50% = 150 milhões
- Tweet QPS = 150 milhões * 2 tweets / 24 horas / 3600 segundos = ~3500
- Pico QPS = 2 * QPS = ~7000
Estimamos apenas o armazenamento de mídia aqui.
- Tamanho médio do tweet:
- tweet_id 64 bytes
- Texto 140 bytes
- Mídia 1 MB
- Armazenamento de mídia: 150 milhões * 2 * 10% * 1 MB = 30 TB por dia
- 5 anos de armazenamento de mídia: 30 TB * 365 * 5 = ~ 55 PB
dica
A estimativa do verso do envelope tem tudo a ver com o processo. Resolver problemas é mais importante do que obter resultados. O entrevistador pode testar suas habilidades de resolução de problemas. Aqui estão algumas dicas a seguir:
- Arredondamento e aproximação. Fazer matemática complexa durante uma entrevista é difícil. Por exemplo, qual é o resultado de "99987 / 9.1"? Não há necessidade de gastar seu precioso tempo resolvendo problemas matemáticos complexos. Não há necessidade de ser preciso. Use arredondamento e aproximação. Este problema de divisão pode ser simplificado para: "100.000 / 10".
- Escreva suas suposições. É uma boa ideia anotar suas suposições para referência posterior.
- Marque sua unidade. Quando você escreve "5", você quer dizer 5 KB ou 5 MB? Você pode se confundir com isso. Anote as unidades, pois "5 MB" ajuda a remover a ambigüidade.
- Estimativas de fundo de envelope comumente solicitadas: QPS, pico de QPS, armazenamento, cache, número de servidores, etc. Você pode praticar esses cálculos enquanto se prepara para a entrevista. A prática leva à perfeição.
Parabéns você chegou até aqui! Dê a si mesmo um elogio agora. aqui você vai!
Referências
[1] J. Dean. Google Pro Dica: Use o cálculo do verso do envelope para escolher o melhor design:
http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html
_
[2] Introdução ao design do sistema: https://github.com/donnemartin/system-design-primer
[3] Números de latência que todo programador deve saber:
https://colin-scott.github.io/personal_website/research/interactive_latency.html
[4] Contrato de nível de serviço de computação da Amazon:
https://aws.amazon.com/compute/sla/
[5] Contrato de nível de serviço (SLA) do Compute Engine:
https://cloud.google.com/compute/sla
[ 6] Resumo do SLA para serviços do Azure: https://azure.microsoft.com/en-us/support/legal/sla/summary/
Olá, sou Shisan, um piloto veterano que desenvolve há 7 anos e uma empresa estrangeira há 5 anos na Internet há 2 anos. Posso derrotar Ah San e Lao Mei e também fui arruinado por comentários de relações públicas. Ao longo dos anos, trabalhei meio período, abri um negócio, assumi o trabalho privado e misturei o trabalho. Ganhou dinheiro e perdeu dinheiro. Ao longo do caminho, meu sentimento mais profundo é que não importa o que você aprenda, você deve continuar aprendendo. Contanto que você possa perseverar, é fácil conseguir ultrapassagens nas curvas! Portanto, não me pergunte se é tarde demais para fazer o que faço agora. Se você ainda não tem uma direção, pode me seguir [conta pública: Mais AI (power_ai)], onde frequentemente compartilharei algumas informações de ponta e conhecimento de programação para ajudá-lo a acumular capital para curvas e ultrapassagens.