
System Design Guide for Software Professionals
Beschreibung
Alle Preise
Weitere Details
Weitere Ausgaben
Personen
Dhirendra Sinha is a Software Engineering Manager at Google. He is an angel investor and has served as a Strategic and Technology advisor at a few startups. Dhirendra has around two decades of experience in the Software Engineering field building highly scalable complex distributed systems and managing multiple Engineering teams. While he has experience in working at large companies such as Cisco, Oracle, Yahoo, and Google, he has also been involved with early and late-stage startups in leadership positions. In addition to his strong Software Engineering experience, he has been teaching the Distributed System Design course for the last seven years. He has also been coaching and mentoring Software Engineers and Software Engineering Managers for over a decade. He completed his Bachelor of Technology degree from IIT Guwahati and Master of Science from Texas A and M University, College Station, Texas. Chopra Tejas :
Tejas Chopra is a Senior Engineer at Netflix working on building the Machine Learning Platform powering Netflix recommendations and personalization. He is also a Co-founder at GoEB1, which is the world's first thought leadership platform for immigrants. Tejas is a recipient of the prestigious EB1A (Einstein) visa in the US. He is a Tech 40 under 40 Award winner, a 2xTEDx speaker, a British Computer Society (BCS) Fellow, and has spoken at conferences and panels on Cloud Computing, Blockchain, Machine Learning, Software Development, and Engineering Leadership. Tejas has been awarded the "International Achievers Award, 2023" by the Indian Achievers' Forum. He is an Adjunct Professor of Software Development at the University of Advancing Technology, Arizona, an Angel Investor, and has previously been an Advisor to startups such as Nillion, Inc. He is also a member of the Advisory Board for Future of Memory and Storage Summit. Tejas' experience has been in companies such as Box, Apple, Samsung, Cadence, and Datrium. Tejas holds a Masters Degree in Electrical and Computer Engineering from Carnegie Mellon University, Pittsburgh.
Inhalt
- 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
Systemvoraussetzungen
Dateiformat: ePUB
Kopierschutz: Adobe-DRM (Digital Rights Management)
Systemvoraussetzungen:
- Computer (Windows; MacOS X; Linux): Installieren Sie bereits vor dem Download die kostenlose Software Adobe Digital Editions (siehe E-Book Hilfe).
- Tablet/Smartphone (Android; iOS): Installieren Sie bereits vor dem Download die kostenlose App Adobe Digital Editions oder die App PocketBook (siehe E-Book Hilfe).
- E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m. (nicht Kindle)
Das Dateiformat ePUB ist sehr gut für Romane und Sachbücher geeignet – also für „fließenden” Text ohne komplexes Layout. Bei E-Readern oder Smartphones passt sich der Zeilen- und Seitenumbruch automatisch den kleinen Displays an.
Mit Adobe-DRM wird hier ein „harter” Kopierschutz verwendet. Wenn die notwendigen Voraussetzungen nicht vorliegen, können Sie das E-Book leider nicht öffnen. Daher müssen Sie bereits vor dem Download Ihre Lese-Hardware vorbereiten.
Bitte beachten Sie: Wir empfehlen Ihnen unbedingt nach Installation der Lese-Software diese mit Ihrer persönlichen Adobe-ID zu autorisieren!
Weitere Informationen finden Sie in unserer E-Book Hilfe.
Dateiformat: ePUB
Kopierschutz: ohne DRM (Digital Rights Management)
Systemvoraussetzungen:
- Computer (Windows; MacOS X; Linux): Verwenden Sie eine Lese-Software, die das Dateiformat ePUB verarbeiten kann: z.B. Adobe Digital Editions oder FBReader – beide kostenlos (siehe E-Book Hilfe).
- Tablet/Smartphone (Android; iOS): Installieren Sie bereits vor dem Download die kostenlose App Adobe Digital Editions oder die App PocketBook (siehe E-Book Hilfe).
- E-Book-Reader: Bookeen, Kobo, Pocketbook, Sony, Tolino u.v.a.m.
Das Dateiformat ePUB ist sehr gut für Romane und Sachbücher geeignet – also für „glatten” Text ohne komplexes Layout. Bei E-Readern oder Smartphones passt sich der Zeilen- und Seitenumbruch automatisch den kleinen Displays an.
Ein Kopierschutz bzw. Digital Rights Management wird bei diesem E-Book nicht eingesetzt.
Weitere Informationen finden Sie in unserer E-Book Hilfe.