Pelikan is Twitter's framework for developing cache services. It is:
Fast: Pelikan provides high-throughput and low-latency caching solutions.
Reliable: Pelikan is designed for large-scale deployment and the implementation is informed by our operational experiences.
Modular: Pelikan is a framework for rapidly developing new caching solutions by focusing on the inherent architectural similarity between caching services and providing reusable low-level components.
After years of using and working on various cache services, we built a common framework that reveals the inherent architectural similarity among them.
By creating well-defined modules, most of the low-level functionalities are reused as we create different binaries. The implementation learns from our operational experiences to improve performance and reliability, and leads to software designed for large-scale deployment.
The framework approach allows us to develop new features and protocols quickly.
Pelikan contains the following products:
pelikan_segcache_rs
: a Memcached-like server with extremely high memory
efficiency and excellent core scalability. See our NSDI'21 paper for design
and evaluation details.pelikan_pingserver_rs
: an over-engineered, production-ready ping server
useful as a tutorial and for measuring baseline RPC performancemomento_proxy
: a proxy which allows existing
applications to use Momento instead of a Memcache-compatible cache backend.Pelikan legacy codebase can be found within the legacy
folder of this project.
It is composed of the original C codebase and backend implementations. It
remains as a reference, but is not recommended for production deployments.
llvm/clang (>= 7.0)
cmake (>= 3.2)
git clone https://github.com/twitter/pelikan.git
cd pelikan
cargo build --release
cargo test
Using pelikan_segcache_rs
as an example, other executables are highly similar.
To get info of the service, including usage format and options, run:
target/release/pelikan_segcache_rs --help
To launch the service with default settings, simply run:
target/release/pelikan_segcache_rs
To launch the service with the sample config file, run:
target/release/pelikan_segcache_rs config/segcache.toml
You should be able to try out the server using an existing memcached client,
or simply with telnet
.
$ telnet localhost 12321
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set foo 0 0 3
bar
STORED
Attention: use admin
port for all non-data commands.
$ telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
version
VERSION 0.1.0
stats
STAT pid 54937
STAT time 1459634909
STAT uptime 22
STAT version 100
STAT ru_stime 0.019172
...
Pelikan is file-first when it comes to configurations, and currently is
config-file only. You can create a new config file following the examples
included under the config
directory.
Please take a look at our community manifesto and coding style guide.
If you want to submit a patch, please follow these steps:
We have made progress and are actively working on documentation, and will put it
on our website. Meanwhile, check out the current material under docs/
This software is licensed under the Apache 2.0 license, see LICENSE for details.