Everything at Google runs in containers
We launch over 2 billion containers per week.
• Gmail, Web Search, Maps, ...
• MapReduce, batch, ...
• GFS, Colossus, ...
Slide 9
Slide 9 text
@sandeepdinesh
Kubernetes
Borg
Stubby
Slide 10
Slide 10 text
@sandeepdinesh
Kubernetes
Slide 11
Slide 11 text
@sandeepdinesh
App A
Slide 12
Slide 12 text
@sandeepdinesh
App A
Slide 13
Slide 13 text
@sandeepdinesh
Replication
Controller
App A
Slide 14
Slide 14 text
@sandeepdinesh
Replication
Controller
App A
App A
App A
App A
Slide 15
Slide 15 text
@sandeepdinesh
Replication
Controller
Service A
App A
App A
App A
App A
Slide 16
Slide 16 text
@sandeepdinesh
Microservice A
Slide 17
Slide 17 text
@sandeepdinesh
That’s it!
Slide 18
Slide 18 text
@sandeepdinesh
Microservice A
Microservice C Microservice D
Microservice B
Slide 19
Slide 19 text
@sandeepdinesh
Microservice A
Microservice C
Microservice D
Microservice B
Slide 20
Slide 20 text
@sandeepdinesh
Microservice A
Microservice C
Microservice D
Microservice B
Slide 21
Slide 21 text
@sandeepdinesh
Microservice A
Microservice C
Microservice D (2.0)
Microservice B
Slide 22
Slide 22 text
@sandeepdinesh
Let’s build
Slide 23
Slide 23 text
@sandeepdinesh
JavaScript
var http = require('http');
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello World\n");
});
server.listen(3000);
App
@sandeepdinesh
Bash
$ kubectl create -f frontend-service.yaml
Launch the Service
Slide 29
Slide 29 text
@sandeepdinesh
Slide 30
Slide 30 text
@sandeepdinesh
What about Communication?
Slide 31
Slide 31 text
@sandeepdinesh
Microservice A
Microservice C
Microservice D
Microservice B
Slide 32
Slide 32 text
@sandeepdinesh
“The biggest issue in changing a
monolith into microservices lies in
changing the communication
pattern.”
- Martin Fowler
Slide 33
Slide 33 text
O(1010) RPCs per second at Google
Slide 34
Slide 34 text
@sandeepdinesh
Slide 35
Slide 35 text
@sandeepdinesh
Protocol Buffers
Slide 36
Slide 36 text
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}
service HelloService {
rpc SayHello(HelloRequest) returns
(HelloResponse);
}
IDL (Interface definition language)
Describe once and generate interfaces
for any language.
Data Model
Structure of the request and response.
Binary format for network transmission.
Wire Format
Protocol Buffers
@sandeepdinesh
JavaScript
var grpc = require('grpc'),
proto = grpc.load('interface.proto'),
client = new proto.geo.GeoService('backend:50051');
Frontend Code