1 option
System Design Guide for Software Professionals : Build Scalable Solutions - from Fundamental Concepts to Cracking Top Tech Company Interviews / Dhirendra Sinha and Tejas Chopra.
- Format:
- Book
- Author/Creator:
- Sinha, Dhirendra, author.
- Chopra, Tejas, author.
- Language:
- English
- Subjects (All):
- Computer software--Development.
- Computer software.
- Software architecture.
- Physical Description:
- 1 online resource (384 pages)
- Edition:
- First edition.
- Place of Publication:
- Birmingham, England : Packt Publishing, [2024]
- Biography/History:
- Sinha Dhirendra: 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.
- Summary:
- 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 strategies from engineering leaders at top tech companies. Detailed case studies of widely used applications and their system architectures. Purchase of the print or Kindle book includes a free PDF eBook Book Description Building scalable software systems is more critical than ever. Yet, many software professionals struggle to navigate the complexities of system design, especially when aiming for positions at top tech companies. Written by Dhirendra Sinha, a seasoned Engineering Leader at Google with a blend of experience working at large companies such as Cisco, Oracle, and Yahoo, and Tejas Chopra, a Senior Software Engineer at Netflix, a TEDx speaker, and a Co-Founder of GoEB1, this comprehensive and authoritative resource on system design offers invaluable insights and strategies to help you excel in interviews with all major tech companies. This guide covers the basics of system design, including the principles and techniques of distributed systems, and delves into core building blocks such as distributed system theorems, attributes, and the design and implementation of system components. Following examples of popular applications such as Uber, Twitter, Instagram, Google Docs, and Netflix, you'll learn how to apply concepts to real-world scenarios. The book offers expert advice and strategies for preparing and acing system design interviews, along with a mind map/cheat sheet summarizing the key takeaways. By the end of this book, you'll be equipped with unique techniques and the confidence to solve any coding interview question. What you will learn Design for scalability and efficiency with expert insights Apply distributed system theorems and attributes Implement DNS, databases, caches, queues, and APIs Analyze case studies of real-world systems Discover tips to excel in system design interviews with confidence Apply industry-standard methodologies for system design and evaluation Explore the architecture and operation of cloud-based systems Who this book is for This book is a must-have resource for experienced software professionals, particularly those with 5-15 years of experience in building scalable distributed systems, web applications, and backend microservices. Whether you're a seasoned developer or an architect looking to deepen your expertise in system design, this book provides the insights and practical knowledge you need to excel in tech interviews and advance your career. A solid foundation in distributed systems, data structures/algorithms, and web development will help you get the most out of this comprehensive guide.
- Contents:
- 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
- Vertical scaling
- Horizontal scaling
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Chapter 10: System Design - Proximity Service
- Core challenge.
- Final high-level solution architecture
- Chapter 11: Designing a Service Like Twitter
- 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
- User registration flow
- User authentication flow
- Follow/unfollow flow
- Retrieving followers/followees
- Low-level design - Timeline Service
- Timeline retrieval flow
- Push-based updates
- Designing Search Service
- Data flow and indexing
- Search query processing
- Relevance scoring and ranking
- Additional considerations
- Chapter 12: Designing a Service Like Instagram
- Designing the data model
- High-level design
- Components and modules in the high-level architecture
- Low-level design
- Designing the Photo Upload Service
- News Feed Service
- User Service
- Chapter 13: Designing a Service Like Google Docs
- Relationships
- Assumptions
- Storage requirements
- Bandwidth considerations
- Processing requirements
- Software components and modules of high-level design
- Designing the document service
- Designing the Collaboration Service
- Designing the Access Control Service
- Additional considerations and best practices
- Chapter 14: Designing a Service Like Netflix
- Assumptions.
- Storage estimation
- Bandwidth estimation
- Processing estimation
- Video Service
- Video upload and storage
- Video encoding and transcoding
- Video streaming
- Caching and content delivery
- 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
- 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
- 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?
- Index.
- Notes:
- Description based upon print version of record.
- API functions
- Includes bibliographical references and index.
- Description based on publisher supplied metadata and other sources.
- Description based on print version record.
- ISBN:
- 9781805122319
- 1805122312
- OCLC:
- 1451796826
The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.