O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Designing Distributed Systems

Book Description

In the race to compete in today’s fast-moving markets, large enterprises are busy adopting new technologies for creating new products, processes, and business models. But one obstacle on the road to digital transformation is placing too much emphasis on technology, and not enough on the types of processes technology enables. What if different lines of business could build their own services and applications—and decision-making was distributed rather than centralized?

This report explores the concept of a digital business platform as a way of empowering individual business sectors to act on data in real time. Much innovation in a digital enterprise will increasingly happen at the edge, whether it involves business users (from marketers to data scientists) or IoT devices. To facilitate the process, your core IT team can provide these sectors with the digital tools they need to innovate quickly.

This report explores:

  • Key cultural and organizational changes for developing business capabilities through cross-functional product teams
  • A platform for integrating applications, data sources, business partners, clients, mobile apps, social networks, and IoT devices
  • Creating internal API programs for building innovative edge services in low-code or no-code environments
  • Tools including Integration Platform as a Service, Application Platform as a Service, and Integration Software as a Service
  • The challenge of integrating microservices and serverless architectures
  • Event-driven architectures for processing and reacting to events in real time

You’ll also learn about a complete pervasive integration solution as a core component of a digital business platform to serve every audience in your organization.

Table of Contents

  1. Preface
    1. Who Should Read This Book
    2. Why I Wrote This Book
    3. The World of Distributed Systems Today
    4. Navigating This Book
    5. Conventions Used in This Book
    6. Online Resources
    7. Using Code Examples
    8. O’Reilly Safari
    9. How to Contact Us
    10. Acknowledgments
  2. 1. Introduction
    1. A Brief History of Systems Development
    2. A Brief History of Patterns in Software Development
      1. Formalization of Algorithmic Programming
      2. Patterns for Object-Oriented Programming
      3. The Rise of Open Source Software
    3. The Value of Patterns, Practices, and Components
      1. Standing on the Shoulders of Giants
      2. A Shared Language for Discussing Our Practice
      3. Shared Components for Easy Reuse
    4. Summary
  3. I. Single-Node Patterns
    1. Motivations
    2. Summary
  4. 2. The Sidecar Pattern
    1. An Example Sidecar: Adding HTTPS to a Legacy Service
    2. Dynamic Configuration with Sidecars
    3. Modular Application Containers
      1. Hands On: Deploying the topz Container
    4. Building a Simple PaaS with Sidecars
    5. Designing Sidecars for Modularity and Reusability
      1. Parameterized Containers
      2. Define Each Container’s API
      3. Documenting Your Containers
    6. Summary
  5. 3. Ambassadors
    1. Using an Ambassador to Shard a Service
      1. Hands On: Implementing a Sharded Redis
    2. Using an Ambassador for Service Brokering
    3. Using an Ambassador to Do Experimentation or Request Splitting
      1. Hands On: Implementing 10% Experiments
  6. 4. Adapters
    1. Monitoring
      1. Hands On: Using Prometheus for Monitoring
    2. Logging
      1. Hands On: Normalizing Different Logging Formats with Fluentd
    3. Adding a Health Monitor
      1. Hands On: Adding Rich Health Monitoring for MySQL
  7. II. Serving Patterns
    1. Introduction to Microservices
  8. 5. Replicated Load-Balanced Services
    1. Stateless Services
      1. Readiness Probes for Load Balancing
      2. Hands On: Creating a Replicated Service in Kubernetes
    2. Session Tracked Services
    3. Application-Layer Replicated Services
    4. Introducing a Caching Layer
      1. Deploying Your Cache
      2. Hands On: Deploying the Caching Layer
    5. Expanding the Caching Layer
      1. Rate Limiting and Denial-of-Service Defense
      2. SSL Termination
      3. Hands On: Deploying nginx and SSL Termination
    6. Summary
  9. 6. Sharded Services
    1. Sharded Caching
      1. Why You Might Need a Sharded Cache
      2. The Role of the Cache in System Performance
      3. Replicated, Sharded Caches
      4. Hands On: Deploying an Ambassador and Memcache for a Sharded Cache
    2. An Examination of Sharding Functions
      1. Selecting a Key
      2. Consistent Hashing Functions
      3. Hands On: Building a Consistent HTTP Sharding Proxy
    3. Sharded, Replicated Serving
    4. Hot Sharding Systems
  10. 7. Scatter/Gather
    1. Scatter/Gather with Root Distribution
      1. Hands On: Distributed Document Search
    2. Scatter/Gather with Leaf Sharding
      1. Hands On: Sharded Document Search
      2. Choosing the Right Number of Leaves
    3. Scaling Scatter/Gather for Reliability and Scale
  11. 8. Functions and Event-Driven Processing
    1. Determining When FaaS Makes Sense
      1. The Benefits of FaaS
      2. The Challenges of FaaS
      3. The Need for Background Processing
      4. The Need to Hold Data in Memory
      5. The Costs of Sustained Request-Based Processing
    2. Patterns for FaaS
      1. The Decorator Pattern: Request or Response Transformation
      2. Hands On: Adding Request Defaulting Prior to Request Processing
      3. Handling Events
      4. Hands On: Implementing Two-Factor Authentication
      5. Event-Based Pipelines
      6. Hands On: Implementing a Pipeline for New-User Signup
  12. 9. Ownership Election
    1. Determining If You Even Need Master Election
    2. The Basics of Master Election
      1. Hands On: Deploying etcd
      2. Implementing Locks
      3. Hands On: Implementing Locks in etcd
      4. Implementing Ownership
      5. Hands On: Implementing Leases in etcd
    3. Handling Concurrent Data Manipulation
  13. III. Batch Computational Patterns
  14. 10. Work Queue Systems
    1. A Generic Work Queue System
      1. The Source Container Interface
      2. The Worker Container Interface
      3. The Shared Work Queue Infrastructure
    2. Hands On: Implementing a Video Thumbnailer
    3. Dynamic Scaling of the Workers
    4. The Multi-Worker Pattern
  15. 11. Event-Driven Batch Processing
    1. Patterns of Event-Driven Processing
      1. Copier
      2. Filter
      3. Splitter
      4. Sharder
      5. Merger
    2. Hands On: Building an Event-Driven Flow for New User Sign-Up
    3. Publisher/Subscriber Infrastructure
    4. Hands On: Deploying Kafka
  16. 12. Coordinated Batch Processing
    1. Join (or Barrier Synchronization)
    2. Reduce
      1. Hands On: Count
      2. Sum
      3. Histogram
    3. Hands On: An Image Tagging and Processing Pipeline
  17. 13. Conclusion: A New Beginning?
  18. Index