Netflix Uses Golang For Rend Proxy

Reemi Shirsath
3 min readSep 17, 2020

Before we start with the understanding of how Netflix is using Golang, let us understand what is Netflix and Rend Proxy in Netflix.

What is Netflix?

An American production company that provides technology and media services. Founded in 1997 by Reed Hastings and Marc Randolph. The primary business of Netflix is to provide streaming services that are subscription-based.

What is Rend Proxy?

Rend and Mnemonic are two new processes to the EVCache server introduced by the Moneta project. Currently, Rend is in production at Netflix and is helping by serving live members’ traffic. Rend is a Memcached-Compatible Server and Proxy. Rend Proxy is developed by Netflix. The primary use case of Rend proxy is to be on a server where both the Memcached process and SSD-backed L2 cache is present. The project is open-source and available on Github

As per the Netflix Tech Blog Rend is:-

It is a high-performance server that speaks the binary and text Memcached protocols. It is written in Go and relies heavily on goroutines and other language primitives to handle concurrency.

Rend Proxy is written in Golang and is actively developed at Netflix. Rend Proxy is developed for:-

1 To handle tens of thousands of concurrent connections

2 It has client packages such as load testing and correctness testing.

3 The design is modular, which provides flexibility for replacing different pieces

Components of Rend Proxy:-

Rend is servers as well as it is has a set of libraries using which you can build your own Memcached-compatible server.

Components in Rend Proxy:-

  • Servier Loop Package
  • Protocol Parsing Package
  • Request Orchestration Package
  • Backend Handlers Package
  • Metrics library

In Rend as a server, Memproxy.go file act as the main function and showcases the usage of all the above-mentioned component.

To build Rend, a working Golang distribution is required. Rend is developed using the latest Golang version.

Rend has a separate client library under the client directory which is used to do load testing and functional testing of Rend during development.

Rend Libraries:-

  • blast.go — Sends random requests of all types to the target
  • setget.go — Run sets followed by gets, with verification of contents.
  • sizes.go — Runs sets of a steadily increasing size to catch errors with specific size data.
  • fill.go — Sends sets into the cache to test set rate and eviction policy.
  • setops.go — Sends all different kinds of set operations at the target

Netflix Teams said:

The decision to use Go was deliberate, because we needed something that had lower latency than Java (where garbage collection pauses are an issue) and is more productive for developers than C, while also handling tens of thousands of client connections. Go fits this space well.

Read more about the article from the original source here

You can also read more articles about Golang here-

Author: Reemi Shirsath COO @ Scalent.ioA Golang Specialized Development Company.

--

--

Reemi Shirsath

𝘾𝙊𝙊 @ 𝙂𝙤𝙡𝙖𝙣𝙜 𝙎𝙥𝙚𝙘𝙞𝙖𝙡𝙞𝙨𝙚𝙙 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙢𝙚𝙣𝙩 𝘾𝙤𝙢𝙥𝙖𝙣𝙮- Scalent.io