Projetando Aplicações Intensivas em Dados: As Grandes Ideias por Trás de Sistemas Confiáveis, Escaláveis e Mantíveis

Projetando Aplicações Intensivas em Dados: As Grandes Ideias por Trás de Sistemas Confiáveis, Escaláveis e Mantíveis
Martin Kleppmann
Gêneros: Programação
Ano de publicação: 2018
Ano de leitura: 2020
Minha avaliação: Máxima
Número de leituras: 1
Total de páginas: 640
Resumo (páginas): 28
Idioma original da publicação: Inglês
Traduções para outros idiomas: Russo, Espanhol, Chinês

Descrição Geral

O livro consiste em 12 capítulos divididos em 3 seções. Praticamente não há imagens, e a leitura é bastante desafiadora e demorada porque tudo é texto contínuo, além de a fonte não ser muito grande. Após cada capítulo há um breve resumo de algumas páginas, assim como uma extensa bibliografia.

Resumo Breve

O primeiro capítulo explica termos como manutenibilidade, escalabilidade e confiabilidade. O autor discute o que são e por que são importantes. Aliás, lembro desde a faculdade que estas não são as únicas características que um software deve ter.

O segundo capítulo descreve modelos de dados, especificamente bancos de dados relacionais clássicos, orientados a documentos e de grafos. Nada muito concreto ainda - apenas características, vantagens e desvantagens. Inclusive, linguagens de consulta também são abordadas aqui (além de SQL, o autor até cita CSS como exemplo de linguagens declarativas).

Capítulo três. Aqui é onde as coisas ficam um pouco mais complexas e menos familiares para o trabalho diário do desenvolvedor médio: árvores-B, SS-Tables, árvores LSM, índices hash. Não é muito complicado, mas você não trabalha com isso diretamente todo dia, então a informação some rápido da mente. No melhor dos casos, de 50 páginas do livro sobram apenas alguns pensamentos. Mas o que é mencionado aqui e que eu encontro quase diariamente é o trabalho com índices e subsistemas de armazenamento de bancos de dados (usando InnoDB e MyISAM como exemplos).

O quarto capítulo foca em formatos de dados usados na transmissão. O autor merece crédito - não parou em JSON e XML, mas cobriu Thrift, Protocol Buffers e Avro. Ele também descreve abordagens de transmissão como REST e RPC. Isto, aliás, encerra a primeira parte - sobre fundamentos de sistemas de informação - e começa outra parte - sobre sistemas distribuídos.

Um dos próximos capítulos, que inicia uma nova seção, é sobre replicação. Na minha opinião, a informação aqui é bastante boa. Aborda as principais topologias para construção de sistemas de replicação, descreve nós líderes e seguidores (até replicação sem líder), consistência, problemas de latência, quórum - tudo isso está neste capítulo.

O próximo capítulo é sobre particionamento. Também bem descrito. A diferença entre particionamento e replicação. Particionamento por intervalos de valores-chave, particionamento por hash, roteamento de consultas e balanceamento de carga - estes são os principais tópicos. Aliás, o particionamento é descrito de forma genérica, sem vincular a nenhuma tecnologia ou banco de dados específico, então tudo se aplica a outros sistemas: em MongoDB, Elasticsearch e SolrCloud é chamado de "shard"; em HBase - "região"; em Bigtable - "tablet"; em Cassandra e Riak - "nó virtual" (vnode).

Depois vem um capítulo sobre transações. Também bem desenvolvido. A maior parte gira em torno de ACID, e há também informações sobre tratamento de erros e abortos de transações.

Os dois últimos capítulos da seção tratam de falhas, problemas e desafios em sistemas distribuídos (por exemplo, redes não confiáveis ou dessincronização de tempo entre dispositivos - "relógios não confiáveis"), assim como consistência e consenso (linearizabilidade) e trabalho com transações distribuídas.

Dos três capítulos seguintes (se excluirmos o último, super teórico, sobre o futuro dos sistemas de informação), vale destacar os que falam sobre processamento em lotes e em fluxo (literalmente seus nomes). Aqui são abordados Hadoop, MapReduce e brokers de mensagens. Porém, toda esta informação é apresentada de forma um tanto superficial.

Minha Opinião

Um livro teórico sobre programação que explora profundamente termos como tipos de bancos de dados, conceito de transações, replicação, particionamento, problemas de alta carga e disponibilidade em sistemas distribuídos, processamento em fluxo e em lotes - e o mais importante - quais ferramentas e tecnologias existem para resolver problemas relacionados a estas abordagens. Devido à sua extensão, a leitura parece longa e maçante. Mas no geral, se aprender programação é como montar um quebra-cabeça na mente, onde cada peça é uma tecnologia, abordagem ou simples conselho, este livro certamente revela muitas dessas peças. Então, mesmo sendo um livro grande e árido, e o resumo - enorme, ainda assim dei a ele uma avaliação bastante alta.

Вверх