System Design Guide for Software Professionals Build Scalable Solutions - from Fundamental Concepts to Cracking Top Tech Company Interviews

Enhance your system design skills to build scalable and efficient systems by working through real-world case studies and expert strategies to excel in interviews Key Features Comprehensive coverage of distributed systems concepts and practical system design techniques. Insider tips and proven strate...

Descripción completa

Detalles Bibliográficos
Otros Autores: Sinha, Dhirendra, author (author), Chopra, Tejas, author
Formato: Libro electrónico
Idioma:Inglés
Publicado: Birmingham, England : Packt Publishing [2024]
Edición:First edition
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009843332606719
Tabla de Contenidos:
  • Cover
  • Title Page
  • Copyright and Credits
  • Contributors
  • Table of Contents
  • Preface
  • Part 1: Foundations of System Design
  • Chapter 1: Basics of System Design
  • What is system design?
  • Software system
  • Distributed software system
  • Understanding system design
  • What are the types of system design?
  • High-level system design
  • System architecture
  • Data flow
  • Scalability
  • Fault tolerance
  • Low-level system design
  • Algorithms
  • Data structures
  • APIs
  • Code optimization
  • Importance of system design in the industry
  • Practical examples of the importance of system design
  • Summary
  • Chapter 2: Distributed System Attributes
  • A hotel room booking example
  • Consistency
  • Strong consistency
  • Eventual consistency
  • Availability
  • Understanding partition tolerance
  • Network partition
  • Partition tolerance
  • Latency
  • Durability
  • Reliability
  • Fault tolerance
  • Scalability
  • Vertical scaling
  • Horizontal scaling
  • Summary
  • Chapter 3: Distributed Systems Theorems and Data Structures
  • CAP theorem
  • PACELC theorem
  • Paxos
  • Raft
  • BGP
  • The Byzantine fault
  • Byzantine fault tolerance
  • Modern BFT
  • FLP impossibility theorem
  • Consistent hashing
  • Bloom filters
  • Count-min sketch
  • HyperLogLog
  • Summary
  • Part 2: Core Components of Distributed Systems
  • Chapter 4: Distributed Systems Building Blocks: DNS, Load Balancers, and Application Gateways
  • Exploring DNS
  • DNS querying
  • Scalability, reliability, and consistency in DNS
  • Scalability
  • Reliability
  • Consistency
  • Load balancers
  • Placing load balancers
  • Advantages of load balancers
  • Global and local load balancing
  • DNS and GSLB
  • Load balancer algorithms
  • Load balancing at different layers of the Open Systems Interconnection (OSI) model
  • Deployment of load balancers
  • Implementing load balancers.
  • Application gateways
  • Features and capabilities
  • Microservices architectures
  • Cloud-native implementations
  • On-premises options
  • Summary
  • Chapter 5: Design and Implementation of System Components -Databases and Storage
  • Databases
  • Types of databases
  • Relational databases
  • NoSQL databases
  • The advantages and disadvantages of relational and NoSQL databases
  • NoSQL databases
  • Key-value stores
  • What is a key-value store?
  • Use in distributed systems
  • Designing a key-value store
  • Enhancing scalability and data replication
  • Boosting scalability
  • Consistent hashing
  • Virtual nodes
  • Data duplication strategies
  • Implementing get and put functions
  • Implementing get and put operations
  • Using r and w
  • Ensuring fault tolerance and identifying failures in a key-value store
  • Managing temporary failures
  • Addressing permanent failures
  • Ring membership promotion for failure detection
  • A system design interview - key value store design questions and strategies
  • DynamoDB
  • No fixed schema
  • API functions
  • Partitioning data in DynamoDB
  • Throughput optimizations in DynamoDB
  • High availability in DynamoDB
  • Column-family databases
  • HBase
  • HBase details
  • Graph-based databases
  • The Neo4j graph database
  • Neo4j details
  • Relational modeling versus graph modeling
  • Graph modeling
  • Adding a new node to an existing graph
  • Summary
  • References
  • Chapter 6: Distributed Cache
  • What is caching?
  • What is distributed caching?
  • How is it different from regular caching?
  • Use cases
  • Benefits of using a distributed cache
  • Challenges of using distributed caching
  • Designing a distributed cache
  • Requirements
  • Design journey
  • Popular distributed cache solutions
  • Redis
  • Memcached
  • How to choose between Redis and Memcached
  • Summary
  • Chapter 7: Pub/Sub and Distributed Queues.
  • The evolution of distributed systems
  • Designing a distributed queue
  • Designing a pub/sub system
  • Key characteristics of pub/sub systems
  • Pub/sub system design considerations
  • Kafka
  • The importance of Kafka in distributed systems
  • Kafka Streams
  • Kinesis
  • Summary
  • Part 3: System Design in Practice
  • Chapter 8: Design and Implementation of System Components: API, Security, and Metrics
  • REST APIs
  • Design principles of REST APIs
  • Use cases for REST APIs
  • Strengths and weaknesses
  • gRPC APIs
  • Design principles of gRPC APIs
  • Use cases for gRPC APIs
  • Strengths and weaknesses
  • Comparing REST and gRPC
  • API security
  • Authentication
  • Authorization
  • Secure communication of APIs
  • Rate limiting
  • Distributed systems logging
  • Centralized logging
  • Best practices for implementing distributed logging
  • Metrics in a distributed system
  • Types of metrics
  • Open source tools for metrics
  • Best practices for implementing metrics
  • Alerting in a distributed system
  • Designing effective alerts
  • Open-source tools for alerting
  • Best practices for implementing alerting
  • Tracing in a distributed system
  • Distributed tracing
  • Open-source tools for distributed tracing
  • Best practices for implementing tracing
  • Best practices
  • Summary
  • Chapter 9: System Design - URL Shortener
  • Real-world use cases
  • Functional requirements
  • Non-functional requirements
  • Client APIs needed
  • Estimates and calculations
  • System design
  • Core challenge
  • Choice of database
  • High-level solution architecture
  • Requirements verification
  • Summary
  • Chapter 10: System Design - Proximity Service
  • Real-world use cases
  • Functional requirements
  • Non-functional requirements
  • Client APIs needed
  • Estimates and calculations
  • System design
  • High-level system design
  • Core challenge.
  • Final high-level solution architecture
  • Requirements verification
  • Summary
  • Chapter 11: Designing a Service Like Twitter
  • Functional requirements
  • Non-functional requirements
  • Data model
  • Scale calculations
  • Exploring high-level design
  • Microservices architecture
  • Designing Tweet Service
  • Data storage
  • Tweet creation flow
  • Tweet retrieval flow
  • Caching
  • Designing User Service
  • Data storage
  • User registration flow
  • User authentication flow
  • Follow/unfollow flow
  • Retrieving followers/followees
  • Low-level design - Timeline Service
  • Data flow
  • Timeline retrieval flow
  • Push-based updates
  • Designing Search Service
  • Data flow and indexing
  • Search query processing
  • Relevance scoring and ranking
  • Additional considerations
  • Summary
  • Chapter 12: Designing a Service Like Instagram
  • Functional requirements
  • Non-functional requirements
  • Designing the data model
  • Scale calculations
  • High-level design
  • Components and modules in the high-level architecture
  • Low-level design
  • Designing the Photo Upload Service
  • News Feed Service
  • User Service
  • Additional considerations
  • Summary
  • Chapter 13: Designing a Service Like Google Docs
  • Functional requirements
  • Non-functional requirements
  • Data model
  • Relationships
  • Scale calculations
  • Assumptions
  • Storage requirements
  • Bandwidth considerations
  • Processing requirements
  • High-level design
  • Software components and modules of high-level design
  • Low-level design
  • Designing the document service
  • Designing the Collaboration Service
  • Designing the Access Control Service
  • Additional considerations and best practices
  • Summary
  • Chapter 14: Designing a Service Like Netflix
  • Functional requirements
  • Non-functional requirements
  • Designing the data model
  • Relationships
  • Scale calculations
  • Assumptions.
  • Storage estimation
  • Bandwidth estimation
  • Processing estimation
  • High-level design
  • Low-level system design
  • Video Service
  • Video upload and storage
  • Video encoding and transcoding
  • Video streaming
  • Caching and content delivery
  • User Service
  • User authentication and authorization
  • User profile management
  • Database and caching
  • Recommendation Service
  • The CDN
  • CDN architecture and content distribution
  • Request routing and video streaming
  • Adaptive bitrate streaming
  • Content security and DRM
  • Summary
  • Chapter 15: Tips for Interviewees
  • Tips for preparation for system design interviews
  • Understanding the fundamentals
  • Studying common system design patterns
  • Practicing designing systems
  • Learning from online resources
  • Honing your communication skills
  • Reviewing and reflecting
  • Tips for the interview session
  • Understanding the problem statement
  • Breaking down the problem
  • Key steps to follow
  • Communicating your solution effectively
  • Summary
  • Chapter 16: System Design Cheat Sheet
  • Which data store should we use for a use case?
  • Which data structures should we use for a use case?
  • Which components should we use for which use case?
  • What protocol should we use for which use case?
  • Which solution should we use for which core challenge?
  • Summary
  • Index.