This is the book for Gophers who want to learn how to build distributed systems. You know the basics of Go and are eager to put your knowledge to work. Build distributed services that are highly available, resilient, and scalable. This book is just what you need to apply Go to real-world situations. Level up your engineering skills today.
Take your Go skills to the next level by learning how to design, develop, and deploy a distributed service. Start from the bare essentials of storage handling, then work your way through networking a client and server, and finally to distributing server instances, deployment, and testing. All this will make coding in your day job or side projects easier, faster, and more fun.
Create your own distributed services and contribute to open source projects. Build networked, secure clients and servers with gRPC. Gain insights into your systems and debug issues with observable services instrumented with metrics, logs, and traces. Operate your own Certificate Authority to authenticate internal web services with TLS. Automatically handle when nodes are added or removed to your cluster with service discovery. Coordinate distributed systems with replicated state machines powered by the Raft consensus algorithm. Lay out your applications and libraries to be modular and easy to maintain. Write CLIs to configure and run your applications. Run your distributed system locally and deploy to the cloud with Kubernetes. Test and benchmark your applications to ensure they're correct and fast.
Dive into writing Go and join the hundreds of thousands who are using it to build software for the real world.
Author(s): Travis Jeffery
Edition: 1
Publisher: Pragmatic Bookshelf
Year: 2021
Language: English
Commentary: Vector PDF
Pages: 260
City: Raleigh, NC
Tags: Security; Distributed Systems; Monitoring; Logging; Deployment; Go; Kubernetes; Continuous Integration; Web Servers; Load Balancing; TLS; gRPC; Raft
Cover
Table of Contents
Acknowledgments
Introduction
Who This Book Is For
What’s in This Book
Online Resources
Part I—Get Started
1. Let's Go
How JSON over HTTP Services Fits into Distributed Systems
Set Up the Project
Build a Commit Log Prototype
Build a JSON over HTTP Server
Run Your Server
Test Your API
What You Learned
2. Structure Data with Protocol Buffers
Why Use Protocol Buffers?
Install the Protocol Buffer Compiler
Define Your Domain Types as Protocol Buffers
Compile Protocol Buffers
Work with the Generated Code
What You Learned
3. Write a Log Package
The Log Is a Powerful Tool
How Logs Work
Build a Log
What You Learned
Part II—Network
4. Serve Requests with gRPC
What Is gRPC?
Goals When Building a Service
Define a gRPC Service
Compile with the gRPC Plugin
Implement a gRPC Server
Register Your Server
Test a gRPC Server and Client
What You Learned
5. Secure Your Services
Secure Services in Three Steps
Authenticate the Server with TLS
Authenticate the Client with Mutual TLS Authentication
Authorize with Access Control Lists
What You Learned
6. Observe Your Systems
Three Types of Telemetry Data
Make Your Service Observable
What You Learned
Part III—Distribute
7. Server-to-Server Service Discovery
Why Use Service Discovery?
Embed Service Discovery
Discover Services with Serf
Request Discovered Services and Replicate Logs
Test Discovery and the Service End-to-End
What You Learned
8. Coordinate Your Services with Consensus
What Is Raft and How Does It Work?
Implement Raft in Our Service
Multiplex to Run Multiple Services on One Port
What You Learned
9. Discover Servers and Load Balance from the Client
Three Load-Balancing Strategies
Load Balance on the Client in gRPC
Make Servers Discoverable
Resolve the Servers
Route and Balance Requests with Pickers
Test Discovery and Balancing End-to-End
What You Learned
Part IV—Deploy
10. Deploy Applications with Kubernetes Locally
What Is Kubernetes?
Install kubectl
Use Kind for Local Development and Continuous Integration
Write an Agent Command-Line Interface
Build Your Docker Image
Configure and Deploy Your Service with Helm
Advertise Raft on the Fully Qualified Domain Name
What You Learned
11. Deploy Applications with Kubernetes to the Cloud
Create a Google Kubernetes Engine Cluster
Create Custom Controllers with Metacontroller
Deploy to the Internet
What You Learned
Index
– SYMBOLS –
– DIGITS –
– A –
– B –
– C –
– D –
– E –
– F –
– G –
– H –
– I –
– J –
– K –
– L –
– M –
– N –
– O –
– P –
– R –
– S –
– T –
– U –
– V –
– W –
– Z –