Cloud Native. Using Containers, Functions, and Data to Build Next-Generation Applications - Helion
ISBN: 978-14-920-5377-4
stron: 232, Format: ebook
Data wydania: 2019-08-21
Księgarnia: Helion
Cena książki: 194,65 zł (poprzednio: 218,71 zł)
Oszczędzasz: 11% (-24,06 zł)
Developers often struggle when first encountering the cloud. Learning about distributed systems, becoming familiar with technologies such as containers and functions, and knowing how to put everything together can be daunting. With this practical guide, you’ll get up to speed on patterns for building cloud native applications and best practices for common tasks such as messaging, eventing, and DevOps.
Authors Boris Scholl, Trent Swanson, and Peter Jausovec describe the architectural building blocks for a modern cloud native application. You’ll learn how to use microservices, containers, serverless computing, storage types, portability, and functions. You’ll also explore the fundamentals of cloud native applications, including how to design, develop, and operate them.
- Explore the technologies you need to design a cloud native application
- Distinguish between containers and functions, and learn when to use them
- Architect applications for data-related requirements
- Learn DevOps fundamentals and practices for developing, testing, and operating your applications
- Use tips, techniques, and best practices for building and managing cloud native applications
- Understand the costs and trade-offs necessary to make an application portable
Osoby które kupowały "Cloud Native. Using Containers, Functions, and Data to Build Next-Generation Applications", wybierały także:
- Data Science w Pythonie. Kurs video. Przetwarzanie i analiza danych 149,00 zł, (67,05 zł -55%)
- Excel 2013. Kurs video. Poziom drugi. Przetwarzanie i analiza danych 79,00 zł, (35,55 zł -55%)
- Zarz 99,00 zł, (49,50 zł -50%)
- Eksploracja danych za pomoc 67,00 zł, (33,50 zł -50%)
- Google Analytics od podstaw. Analiza wp 69,00 zł, (34,50 zł -50%)
Spis treści
Cloud Native. Using Containers, Functions, and Data to Build Next-Generation Applications eBook -- spis treści
- Preface
- Conventions Used in This Book
- OReilly Online Learning
- How to Contact Us
- Acknowledgments
- 1. Introduction to Cloud Native
- Distributed Systems
- Fallacies of Distributed Systems
- CAP Theorem
- The Twelve-Factor App
- Availability and Service-Level Agreements
- Summary
- Distributed Systems
- 2. Fundamentals
- Containers
- Container Isolation Levels
- Container Orchestration
- Kubernetes Overview
- Kubernetes and Containers
- Serverless Computing
- Functions
- From VMs to Cloud Native
- Lift-and-Shift
- Application Modernization
- Application Optimization
- Microservices
- Benefits of a Microservices Architecture
- Agility
- Continuous innovation
- Evolutionary design
- Small, focused teams
- Fault isolation
- Improved scale and resource usage
- Improved observability
- Challenges with a Microservices Architecture
- Complexity
- Data integrity and consistency
- Performance
- Development and testing
- Versioning and integration
- Monitoring and logging
- Service dependency management
- Availability
- Benefits of a Microservices Architecture
- Summary
- Containers
- 3. Designing Cloud Native Applications
- Fundamentals of Cloud Native Applications
- Operational Excellence
- Security
- Reliability and Availability
- Scalability and Cost
- Cloud Native versus Traditional Architectures
- Functions versus Services
- Function Scenarios
- Considerations for Using Functions
- Composite of Functions and Services
- API Design and Versioning
- API Backward and Forward Compatibility
- Semantic Versioning
- Service Communication
- Protocols
- WebSockets
- HTTP/2
- gRPC
- Messaging Protocols
- Message Queue Telemetry Transport
- Advanced Message Queuing Protocol
- Serialization Considerations
- Idempotency
- Request/Response
- Publisher/Subscriber
- Choosing Between Pub/Sub and Request Response
- Synchronous versus Asynchronous
- Protocols
- Gateways
- Routing
- Aggregation
- Offloading
- Implementing Gateways
- Egress
- Service Mesh
- Traffic management
- Failure handling
- Security
- Authentication, mutual TLS, and JWT tokens
- Authorization
- Tracing and monitoring
- Example Architecture
- Summary
- Fundamentals of Cloud Native Applications
- 4. Working with Data
- Data Storage Systems
- Objects, Files, and Disks
- Databases
- Key/value
- Document
- Relational
- Graph
- Column family
- Time-series
- Search
- Streams and Queues
- Blockchain
- Selecting a Datastore
- Functional requirements
- Nonfunctional requirements
- Management and cost
- Data in Multiple Datastores
- Change Data Capture
- Write Changes as an Event to a Change Log
- Transaction Supervisor
- Compensating Transactions
- Extract, Transform, and Load
- Microservices and Data Lakes
- Client Access to Data
- Restricted Client Tokens (Valet-Key)
- Database Services with Fine-Grained Access Control
- GraphQL Data Service
- Fast Scalable Data
- Sharding Data
- Caching Data
- Content Delivery Networks
- Analyzing Data
- Streams
- Batch
- Data Lakes on Object Storage
- Data Lakes and Data Warehouses
- Distributed Query Engines
- Databases on Kubernetes
- Storage Volumes
- StatefulSets
- DaemonSets
- Summary
- Data Storage Systems
- 5. DevOps
- What Is DevOps?
- Collaboration
- Automation
- Lean Principles and Processes
- Measurement
- Sharing
- Testing
- Test Doubles
- Test Automation Pyramid
- Unit tests
- Service tests
- UI tests
- Jepsen tests
- Performance tests
- Load tests
- Security/penetration tests
- A/B tests
- Acceptance tests
- Usability tests
- Configuration tests
- Smoke tests
- Integration tests
- Chaos tests
- Fuzz tests
- When to Run Which Types of Tests
- Testing Cadence
- Testing in Production
- Predeployment
- Deployment
- Release
- Post-release
- Development Environments and Tools
- Development Tools
- Development Environments
- Local Development Environments
- Local Development with a Remote Cluster
- Skaffold Development Workflow
- Remote Cluster Routed to Local Development
- Cloud Development Environments
- CI/CD
- Source Code Control
- Build Stage (CI)
- Test Stage (CI)
- Deploy Stage (CD)
- Release Stage (CD)
- Post-Release Stage
- Monitoring
- Collecting Metrics
- Alerting
- Observable Services
- Logging
- Distributed tracing
- Service health, liveness, and readiness
- Collecting Metrics
- Configuration Management
- Single-Environment Variable
- Multiple-Environment Variables
- Adding ConfigMap Data to a Volume
- Storing Secrets
- Deployment Configuration
- Sample CI/CD Flows
- Summary
- What Is DevOps?
- 6. Best Practices
- Moving to Cloud Native
- Breaking Up the Monolith for the Right Reasons
- Decouple Simple Services First
- Learn to Operate on a Small Scale
- Use an Anticorruption Layer Pattern
- Use a Strangler Pattern
- Come Up with a Data Migration Strategy
- Rewrite Any Boilerplate Code
- Reconsider Frameworks, Languages, Data Structures, and Datastores
- Retire Code
- Ensuring Resiliency
- Handle Transient Failures with Retries
- Use a Finite Number of Retries
- Use Circuit Breakers for Nontransient Failures
- Graceful Degradation
- Use a Bulkhead Pattern
- Implement Health Checks and Readiness Checks
- Define CPU and Memory Limits for Your Containers
- Implement Rate Limiting and Throttling
- Ensuring Security
- Treat Security Requirements the Same as Any Other Requirements
- Incorporate Security in Your Designs
- Grant Least-Privileged Access
- Use Separate Accounts/Subscriptions/Tenants
- Securely Store All Secrets
- Obfuscate Data
- Encrypt Data in Transit
- Use Federated Identity Management
- Use Role-Based Access Control
- Isolate Kubernetes Pods
- Working with Data
- Use Managed Databases and Analytics Services
- Use a Datastore That Best Fits Data Requirements
- Keep Data in Multiple Regions or Zones
- Use Data Partitioning and Replication for Scale
- Avoid Overfetching and Chatty I/O
- Dont Put Business Logic in the Database
- Test with Production-like Data
- Handle Transient Failures
- Performance and Scalability
- Design Stateless Services That Scale Out
- Use Platform Autoscaling Features
- Use Caching
- Use Partitioning to Scale Beyond Service Limits
- Functions
- Write Single-Purpose Functions
- Dont Chain Functions
- Keep Functions Light and Simple
- Make Functions Stateless
- Separate Function Entry Point from the Function Logic
- Avoid Long-Running Functions
- Use Queues for Cross-Function Communication
- Operations
- Deployments and Releases Are Separate Activities
- Keep Deployments Small
- CI/CD Definition Lives with the Component
- Consistent Application Deployment
- Use Zero-Downtime Releases
- Dont Modify Deployed Infrastructure
- Use Containerized Build
- Describe Infrastructure Using Code
- Use Namespaces to Organize Services in Kubernetes
- Isolate the Environments
- Separate Function Source Code
- Correlate Deployments with Commits
- Logging, Monitoring, and Alerting
- Use a Unified Logging System
- Use Correlation IDs
- Include Context with Log Entries
- Common and Structured Logging Format
- Tag Your Metrics Appropriately
- Avoid Alert Fatigue
- Define and Alert on Key Performance Indicators
- Continuous Testing in Production
- Start with Basic Metrics
- Service Communication
- Design for Backward and Forward Compatibility
- Define Service Contracts That Do Not Leak Internal Details
- Prefer Asynchronous Communication
- Use Efficient Serialization Techniques
- Use Queues or Streams to Handle Heavy Loads and Traffic Spikes
- Batch Requests for Efficiency
- Split Up Large Messages
- Containers
- Store Images in a Trusted Registry
- Utilize the Docker Build Cache
- Dont Run Containers in Privileged Mode
- Use Explicit Container Image Tags
- Keep Container Images Small
- Run One Application per Container
- Use Verified Images from Trusted Repositories
- Use Vulnerability Scanning Tools on Images
- Dont Store Data in Containers
- Never Store Secrets or Configuration Inside an Image
- Summary
- Moving to Cloud Native
- 7. Portability
- Why Make Applications Portable?
- The Costs of Portability
- Data Gravity and Portability
- When and How to Implement Portability
- Standardized Interfaces
- Containers
- Common Services and Features
- Abstractions and Layers
- Component substitution
- Service facade
- Transforms
- Managed Services from Other Vendors
- Portability Tooling
- Serverless framework
- Infrastructure
- Storage abstractions
- Kubernetes as a Portability Layer
- Cloud Controller Manager
- Service catalog
- Virtual Kubelet
- Standardized Interfaces
- Summary
- Index