Searching...
Português
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Web Scalability for Startup Engineers

Web Scalability for Startup Engineers

por Artur Ejsmont 2015 416 páginas
4.51
327 avaliações
Ouvir
Try Full Access for 7 Days
Unlock listening & more!
Continue

Principais conclusões

1. A Escalabilidade Depende de Bons Princípios de Design de Software

Muitos dos problemas de escalabilidade encontrados em projetos reais podem ser atribuídos a violações dos princípios fundamentais de design.

Base da Escalabilidade. Escalabilidade não se resume apenas à infraestrutura; está profundamente enraizada em um design de software sólido. Princípios essenciais como simplicidade, baixo acoplamento e responsabilidade única formam a base para sistemas que podem se adaptar e crescer de forma eficiente. Ignorar esses princípios frequentemente resulta em sistemas complexos e frágeis, que têm dificuldade em lidar com demandas crescentes.

Projetar para a Mudança. Sistemas escaláveis precisam ser flexíveis e adaptáveis. Um bom design antecipa mudanças e permite modificações e extensões sem a necessidade de grandes reformulações. Isso exige uma consideração cuidadosa das dependências, abstrações e da arquitetura geral do software.

Compromissos São Inevitáveis. Aplicar princípios de design geralmente envolve trade-offs. Não existe uma solução única para todos os casos, e os engenheiros devem ponderar cuidadosamente os custos e benefícios de cada decisão. O excesso de engenharia pode ser tão prejudicial quanto a negligência dos princípios de design.

2. Simplicidade: A Estrela Guia para Sistemas Escaláveis

Faça as coisas tão simples quanto possível, mas não mais simples.

Valor Fundamental. A simplicidade deve ser um objetivo primordial no design de software. Sistemas simples são mais fáceis de entender, manter e escalar. A complexidade, por outro lado, gera atrito e aumenta a probabilidade de erros.

Como Alcançar a Simplicidade:

  • Abstração: Oculte a complexidade por trás de interfaces bem definidas.
  • Evitar Excesso de Engenharia: Resista à tentação de criar soluções desnecessariamente complexas.
  • Desenvolvimento Orientado a Testes (TDD): Escreva os testes antes para garantir que o código seja focado e necessário.
  • Aprender com Exemplos: Estude sistemas reconhecidos pela simplicidade, como Grails, Hadoop e a API do Google Maps.

Benefícios a Longo Prazo. Simplicidade não é apenas facilitar as coisas no presente; trata-se de garantir a manutenção e a extensibilidade no futuro. Um sistema simples tem mais chances de se adaptar a requisitos em mudança e escalar eficientemente ao longo do tempo.

3. Baixo Acoplamento: Minimizar Dependências para Maior Flexibilidade

Acoplamento é a medida do quanto dois componentes conhecem e dependem um do outro.

Reduzindo a Interdependência. O baixo acoplamento minimiza as dependências entre diferentes partes de um sistema. Isso permite que componentes sejam modificados, substituídos ou escalados de forma independente, sem afetar outras partes do sistema. O alto acoplamento, ao contrário, gera um efeito dominó onde mudanças em uma área exigem alterações em outras.

Vantagens do Baixo Acoplamento:

  • Maior Flexibilidade: Facilita a modificação e extensão de componentes individuais.
  • Melhor Escalabilidade: Componentes podem ser escalados independentemente conforme suas necessidades específicas.
  • Redução da Complexidade: Facilita o entendimento e a manutenção dos componentes.
  • Produtividade da Equipe: Permite que múltiplas equipes trabalhem em componentes diferentes simultaneamente.

Como Alcançar o Baixo Acoplamento:

  • Gerenciar Dependências: Controle rigorosamente as dependências entre classes, módulos e aplicações.
  • Programar para Contratos: Defina interfaces claras e siga-as estritamente.
  • Evitar Acoplamento Desnecessário: Cuidado com práticas que aumentam o acoplamento, como expor propriedades privadas.

4. Automação: Escalando a Produtividade por Meio da Eficiência

Acredito que uma das regras mais valiosas é evitar duplicação.

Chave para a Eficiência. A automação é fundamental para escalar a produtividade e reduzir o overhead operacional. Ao automatizar tarefas repetitivas, os engenheiros liberam tempo para se concentrar em iniciativas mais estratégicas.

Áreas para Automação:

  • Testes: Automatize testes unitários, de integração e end-to-end.
  • Build e Deploy: Implemente pipelines de integração contínua e entrega contínua (CI/CD).
  • Monitoramento e Alertas: Configure sistemas automáticos para monitorar e alertar sobre problemas rapidamente.
  • Agregação de Logs: Centralize e indexe logs para facilitar a resolução de problemas.

Benefícios da Automação:

  • Redução de Erros: Minimiza o risco de falhas humanas.
  • Lançamentos Mais Rápidos: Permite releases mais frequentes.
  • Maior Confiabilidade: Monitoramento e alertas automáticos aceleram a detecção e resolução de problemas.
  • Aumento da Eficiência: Engenheiros podem focar em tarefas de maior valor.

5. Camada Front-End: Gerenciando Estado e Otimizando a Entrega

A chave para utilizar recursos de forma eficiente são nós de computação autônomos e sem estado.

Primeira Linha de Defesa. O front-end é o primeiro ponto de contato com os usuários e lida com o maior volume de tráfego. Gerenciar o estado de forma eficiente e otimizar a entrega de conteúdo são cruciais para a escalabilidade.

Componentes-Chave:

  • DNS: Utilize um provedor confiável para resolução rápida de nomes de domínio.
  • Balanceadores de Carga: Distribuem o tráfego entre múltiplos servidores web.
  • Servidores Web: Servem conteúdo estático e dinâmico.
  • Cache: Implemente cache HTTP e cache de objetos para reduzir a carga nos servidores.
  • Redes de Distribuição de Conteúdo (CDNs): Distribuem conteúdo estático globalmente para acelerar a entrega.

A Importância do Stateless. Servidores front-end devem ser sem estado para permitir escalabilidade horizontal fácil. Dados de sessão, arquivos e outros tipos de estado devem ser armazenados externamente.

6. Serviços Web: Projetando para Reuso e Escalabilidade Independente

SOAs são como flocos de neve — nenhum é igual ao outro.

Encapsulando a Lógica de Negócio. Serviços web fornecem uma camada de abstração que encapsula a lógica de negócio e a desacopla da camada de apresentação. Isso permite maior reutilização, escalabilidade independente e manutenção facilitada.

Abordagens de Design:

  • Serviços Web como Camada de Apresentação Alternativa: Adicione serviços web a uma aplicação existente como uma interface adicional.
  • Abordagem API-First: Projete o contrato da API primeiro e depois construa a implementação e os clientes.
  • Abordagem Pragmática: Combine os melhores aspectos de ambas as abordagens conforme as necessidades específicas do projeto.

Escalando Serviços Web:

  • Mantenha os Serviços Sem Estado: Armazene dados de sessão e outras informações de estado externamente.
  • Cache de Respostas: Use cache HTTP para reduzir a carga nas máquinas de serviço web.
  • Particionamento Funcional: Divida a camada de serviços web em serviços menores e independentes.

7. Camada de Dados: Escolhendo o Banco Certo e Estratégias de Escalabilidade

Você sabe o que é arquitetura de verdade? É a arte de traçar linhas. Com uma regra interessante: uma vez que você traçou uma linha, todas as dependências que cruzam essa linha apontam na mesma direção.

Fundamento da Escalabilidade. A camada de dados é frequentemente a parte mais desafiadora de um sistema para escalar. Escolher o banco de dados adequado e implementar estratégias eficazes de escalabilidade são cruciais para lidar com grandes volumes de dados e altas cargas de tráfego.

Escalando com MySQL:

  • Replicação: Crie múltiplas réplicas de leitura para distribuir o tráfego de leitura.
  • Particionamento de Dados (Sharding): Divida o conjunto de dados em partes menores e distribua-as entre vários servidores.

Escalando com NoSQL:

  • Aceitar Consistência Eventual: Troque consistência forte por maior disponibilidade e escalabilidade.
  • Recuperação Rápida: Foque em minimizar o tempo médio para recuperação (MTTR).
  • Escolha do Modelo de Dados: Selecione um modelo que se alinhe aos padrões de acesso da aplicação.

8. Cache: Uma Estratégia Fundamental para Performance e Escalabilidade

A suprema arte da guerra é subjugar o inimigo sem lutar.

Reduzindo a Carga. O cache é uma técnica fundamental para melhorar a performance e a escalabilidade. Ao armazenar dados acessados com frequência na memória, o cache reduz a necessidade de recuperá-los de fontes mais lentas.

Tipos de Cache:

  • Cache HTTP: Cache do navegador, proxies de cache, proxies reversos e CDNs.
  • Cache de Objetos da Aplicação: Cache local no servidor e cache distribuído de objetos.

Regras Práticas para Cache:

  • Cache o Mais Alto Possível na Pilha: Quanto mais alto na pilha você fizer cache, mais recursos economiza.
  • Reutilize Cache Entre Usuários: Maximize a taxa de acerto do cache armazenando dados compartilháveis.
  • Invalidação de Cache é Difícil: Minimize a necessidade de invalidação usando TTLs curtos ou estratégias alternativas.

9. Processamento Assíncrono: Aproveitando Filas de Mensagens e Arquitetura Orientada a Eventos

A chave para utilizar recursos de forma eficiente são nós de computação autônomos e sem estado.

Desacoplamento e Paralelismo. O processamento assíncrono e as filas de mensagens permitem desacoplamento e paralelismo, possibilitando que sistemas lidem com altos volumes de requisições e melhorem a tolerância a falhas.

Conceitos Fundamentais:

  • Filas de Mensagens: Bufferizam e distribuem requisições assíncronas.
  • Produtores de Mensagens: Criam e publicam mensagens na fila.
  • Consumidores de Mensagens: Recebem e processam mensagens da fila.
  • Arquitetura Orientada a Eventos (EDA): Padrão de design onde componentes reagem a eventos em vez de fazer requisições diretas.

Benefícios das Filas de Mensagens:

  • Permitem Processamento Assíncrono: Adiam o processamento de tarefas demoradas.
  • Facilitam a Escalabilidade: Escalam produtores e consumidores de forma independente.
  • Suavizam Picos de Tráfego: Bufferizam requisições durante cargas elevadas.
  • Isolam Falhas e Auto-recuperação: Evitam que falhas em um componente afetem outros.
  • Desacoplamento: Reduzem dependências entre componentes.

10. Busca de Dados: Indexação e Modelagem para Recuperação Eficiente

Você sabe o que é arquitetura de verdade? É a arte de traçar linhas. Com uma regra interessante: uma vez que você traçou uma linha, todas as dependências que cruzam essa linha apontam na mesma direção.

Otimização do Acesso a Dados. Buscar dados de forma eficiente é crucial para a escalabilidade. Compreender técnicas de indexação e princípios de modelagem de dados é essencial para construir sistemas capazes de lidar com grandes volumes de informação.

Técnicas de Indexação:

  • Índices: Criam listas ordenadas de dados para acelerar buscas.
  • Índices Compostos: Combinam múltiplos campos em um índice para refinar resultados.
  • Índices Invertidos: Permitem buscas por texto completo.

Princípios de Modelagem de Dados:

  • Modelar para Consultas: Projete o modelo de dados com base nos padrões de acesso da aplicação.
  • Desnormalizar Dados: Reduza a necessidade de joins incorporando dados relacionados em um único documento.
  • Usar Motores de Busca Dedicados: Aproveite motores especializados para consultas complexas.

Última atualização:

Want to read the full book?

Avaliações

4.51 de 5
Média de 327 avaliações do Goodreads e da Amazon.

Escalabilidade Web para Engenheiros de Startups é amplamente elogiado pela sua abordagem completa aos conceitos de escalabilidade. Os leitores valorizam a sua acessibilidade, o enfoque pragmático e a variedade de temas abordados. O livro é considerado uma excelente introdução a sistemas distribuídos e ao design de sistemas, especialmente para engenheiros em níveis júnior a intermediário. Embora algumas informações possam estar desatualizadas, continua a ser um recurso valioso para compreender arquiteturas web escaláveis. Os críticos destacam as explicações claras, os conselhos práticos e a visão abrangente sobre sistemas de grande escala. Muitos recomendam-no como ponto de partida para quem deseja aprender sobre escalabilidade no desenvolvimento web.

Your rating:
4.7
26 avaliações

Sobre o autor

Artur Ejsmont é um engenheiro de software experiente e autor especializado em escalabilidade web e design de sistemas. A sua perícia na construção de sistemas altamente escaláveis transparece na sua escrita, que alia conhecimento teórico a insights práticos. A abordagem de Ejsmont é elogiada pela clareza e acessibilidade, tornando conceitos complexos compreensíveis para leitores de diferentes níveis de experiência. O seu trabalho revela uma compreensão profunda dos desafios enfrentados por engenheiros em startups e oferece orientações valiosas para resolver questões de escalabilidade. A capacidade do autor de abordar uma vasta gama de temas, mantendo sempre a profundidade e relevância, tornou o seu livro uma referência respeitada no campo do desenvolvimento web e da arquitetura de sistemas.

Listen
Now playing
Web Scalability for Startup Engineers
0:00
-0:00
Now playing
Web Scalability for Startup Engineers
0:00
-0:00
1x
Voice
Speed
Dan
Andrew
Michelle
Lauren
1.0×
+
200 words per minute
Queue
Home
Swipe
Library
Get App
Create a free account to unlock:
Recommendations: Personalized for you
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
200,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Aug 9,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
200,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Start a 7-Day Free Trial
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Loading...