We tackle the problem of designing and implementing a render cluster, in order to expedite rendering of an animation created using the open source application Blender. For our implementation, we use the programming language Rust. We design and implement the cluster coordinator, whose job is organizing the cluster, and the cluster workers, whose jobs are to receive individual frames and render them. For communication between nodes in the cluster, we take advantage of the WebSocket protocol, which we use as a transport mechanism, on top of which we implement our own version of the RPC pattern. We establish an API that allows the cluster coordinator to replicate the workers' states and permits reconnecting in case of a connection loss. We then introduce three distinct frame distribution strategies, which we thoroughly evaluate. The results show that none of the frame distribution strategies improve overall speed or efficiency of the cluster in a significant way. As the speedup we've achieved with our implementation of the rendering cluster is close to linear, it turns out the number of cluster workers is much more important.
|