3. Problem
• A lot of computing
resource required
• Imagine 60fps
photorealistic ray
tracing for OculusVR
• ~ 10K nodes
• Efficient deploy,
operation for the
renderer(ray tracer)
Sunday, April 27, 14
4. Why docker
• Hoping...
• Fine resource control
• CPU limit, memory limit, etc
• Easy versioning management of the
renderer
• Application sandboxing
Sunday, April 27, 14
6. Why etcd?
• Hoping...
• scalable management of cluster
information
• node IP addr, redis addr, etc.
• up to 10K nodes possible(?)
Sunday, April 27, 14
11. Render A Render B Render C
etcd
etcd: 172.17.42.1:4001
webfrontend
redis
Sunday, April 27, 14
12. Get redis info
from etcd
http.get(etcdHost + '/v2/keys/redis-server', function(res) {
if (res.statusCode != 200) {
console.log('failed to get redis infor from etcd.');
process.exit(-1);
}
res.on('data', function(chunk) {
var j = JSON.parse(chunk);
var redisURL = url.parse(j['node']['value']);
var redisServerAddr = redisURL['hostname']
var redisPort = redisURL['port']
var redisClient = redis.createClient(redisPort,
redisServerAddr);
Sunday, April 27, 14
13. Task processing
function loop() {
redisClient.brpop('render-q', timeout, function(err,
reply) {
// kick the ray tracer
exec(...);
// resubmit event loop
setTimeout(loop, 100);
});
}
Sunday, April 27, 14