Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Title Page
Copyright and Credits
Distributed Computing with Go
Packt Upsell
Why subscribe?
PacktPub.com
Contributors
About the author
About the reviewers
Packt is searching for authors like you
Preface
Who this book is for
What this book covers
To get the most out of this book
Download the example code files
Download the color images
Conventions used
Get in touch
Reviews
Developer Environment for Go
GOROOT
GOPATH
src/
pkg/
bin/
Package management
go get
glide
go dep
Structuring a project
Working with book's code
Containers
Docker
Docker versus Virtual Machine (VM)
Understanding Docker
Testing Docker setup
Dockerfile
main.go
Testing in Go
variadic.go
variadic_test.go
Running tests in variadic_test.go
addInt.go
addInt_test.go
Running tests in addInt_test.go
nil_test.go
Running tests in nil_test.go
Summary
Understanding Goroutines
Concurrency and parallelism
Concurrency
Code overview
Serial task execution
Serial task execution with goroutines
Concurrent task execution
Parallelism
Go's runtime scheduler
Goroutine
OS thread or machine
Context or processor
Scheduling with G, M, and P
Gotchas when using goroutines
Single goroutine halting the complete program
Goroutines aren't predictable
Summary
Channels and Messages
Controlling parallelism
Distributed work without channels
Distributed work with channels
What is a channel?
Solving the cashier problem with goroutines
Channels and data communication
Messages and events
Types of channels
The unbuffered channel
The buffered channel
The unidirectional buffer
Closing channels
Multiplexing channels
Summary
The RESTful Web
HTTP and sessions
A brief history of HTTP
HTTP sessions
The REST protocol
The server and client architecture
The standard data format
Resources
Reusing the HTTP protocol
GET
POST
PUT and PATCH
DELETE
Upgradable components
Fundamentals of a REST server
A simple web server
Designing a REST API
The data format
The book resource
GET /api/books
GET /api/books/<id>
POST /api/books
PUT /api/books/<id>
DELETE /api/books/<id>
Unsuccessful requests
Design decisions
The REST server for books API
main.go
books-handler/common.go
books-handler/actions.go
books-handler/handler.go
How to make REST calls
cURL
GET
DELETE
PUT
POST
Postman
net/http
Summary
Introducing Goophr
What is Goophr?
Design overview
OpenAPI specification
Goophr Concierge API definition
Goophr Librarian API definition
Project structure
Summary
Goophr Concierge
Revisiting the API definition
Document feeder – the REST API endpoint
Query handler – the REST API endpoint
Conventions
Code conventions
Diagram conventions
Logical flow diagrams
The doc processor
The doc store
The index processor
The line store
The consolidated flow diagram
Queue workers
Single stores
Buffered channels
The Concierge source code
Running tests
The Concierge server
Summary
Goophr Librarian
The standard indexing model
An example – books with an index of words
The inverted indexing model
An example – the inverted index for words in books
Ranking
Revisiting the API definition
The document indexer – the REST API endpoint
The query resolver – the REST API endpoint
Code conventions
Librarian source code
main.go
common/helpers.go
api/index.go
api/query.go
Testing Librarian
Testing feeder.go using /api/index
Testing /api/query
Summary
Deploying Goophr
Updating Goophr Concierge
Handle multiple Librarians
Aggregated search results
Orchestrating with docker-compose
Environment variables and API ports
The file server
The Goophr source code
librarian/main.go
concierge/main.go
concierge/api/query.go
simple-server/Dockerfile
simple-server/main.go
docker-compose.yaml
.env
Running Goophr with docker-compose
Adding documents to Goophr
Searching for keywords with Goophr
Search – "apple"
Search – "cake"
Search – "apple", "cake"
Individual logs with docker-compose
Authorization on a web server
secure/secure.go
secure/secure_test.go
Test results
Summary
Foundations of Web Scale Architecture
Scaling a web application
The single server instance
Separate layers for the web and database
Multiple server instances
The load balancer
Multi-availability zones
The database
SQL versus NoSQL
Which type of database should we use?
Database replication
Master-replica replication
Master-master replication
Failover cluster replication
Monolith versus microservices
Mediator design pattern
Deployment options
Maintainability of multiple instances
Summary
Other Books You May Enjoy
Leave a review - let other readers know what you think
← Prev
Back
Next →
← Prev
Back
Next →