8. PHP
API
Load Balancer
PHP
API
PHP
API
PHP
API
Java
App
Load Balancer
PHP
API
PHP
API
MySQL
Redis MySQL Slave
eu-west-1
9. PHP
API
MySQL
PHP
API
PHP
Service
Java
Service
ELB
ELB ELB
PHP
API
PHP
API
per city multi-region
ELB
Cassandra
PHP
Service
MySQL MySQL
Java
App
Java
App
Java
App
10. PHP
API
MySQL
PHP
Service
Java
Service
ELB
ELB ELB
PHP
API
PHP
API
per city multi-region
ELB
Cassandra
PHP
Service
MySQL MySQL
Java
App
Java
App
Java
App
PHP
API
11. PHP
API
MySQL
PHP
Service
Java
Service
ELB
ELB ELB
PHP
API
PHP
API
per city multi-region
ELB
Cassandra
PHP
Service
MySQL MySQL
Java
App
Java
App
Java
App
PHP
API
12. Communication paths
with two programmers
Communication paths
with three programmers
Communication paths
with four programmers
Communication paths
with five programmers
Communication paths
with ten programmers
15. “construct a highly agile and
highly available service from
ephemeral and assumed broken
components” - Adrian Cockcroſt
16. Cassandra
Go
Service
Go
Service
Java
Service
ELB
Go “Thin” API
Go
Service
us-east-1 eu-west-1
Go
Service
Java
Service
ELB
Go “Thin” API
RabbitMQ Message Bus
(federated clusters per AZ)
RabbitMQ Message Bus
(federated clusters per AZ)
Cassandra
22. Handler
Library for building services that talk Protobuf via RMQ
Logic
Storage go-service-layer
Self-configuring external service adapters
Service
go-platform-layer
24. Handler go-platform-layer
Library for building services that talk Protobuf via RMQ
Logic
Storage go-service-layer
Self-configuring external service adapters
Services get for free:
• Provisioning
• Service discovery
• Configuration
• Monitoring
• Authentication/authorisation
• AB testing
• Self configuring connectivity
to third-party services
Service
25.
26.
27.
28. CI Pipeline (Janky/Jenkins)
Amazon S3
Provisioning Service Provisioning Service Provisioning Service
Provisioning Manager / Scheduler
29. CI Pipeline (Janky/Jenkins)
Amazon S3
Provisioning Service Provisioning Service Provisioning Service
Provisioning Manager / Scheduler
30. AUTOMATIC SERVICE DISCOVERY
Provisioning Service
Rabbit MQ
Provisioning Service
Discovery
Service
New
Service
31. AUTOMATIC SERVICE DISCOVERY
Provisioning Service
Rabbit MQ
Discovery
Service
Binding
Service
Provisioning Service
New
Service
47. Phosphor
Host Instances
Publish
Service A
Trace Library
chan
goroutine
UDP
Service B
Trace Library
chan
goroutine
UDP
Trace
Service
Dashboards
Monitoring
In-memory
Aggregates
Optional
persistant
storage
48. var traceChan chan []byte
func init() {
// Use a buffered channel
traceChan = make(chan []byte, 200)
// Fire off a background worker for this channel
defaultClient = NewClient(traceChan)
go defaultClient.publisher()
}
// Send, drops trace if the backend is at capacity
func Send(msg []byte) {
select {
case traceChan <- msg:
// Success
default:
// Default case fired if channel is full
// Ensures this is non blocking
}
}