- Notifications
You must be signed in to change notification settings - Fork0
Pelikan is a framework for building local or distributed caches. It comes with a highly extensible architecture, best-in-class performance, and superb operational ergonomics. You can use it to replace most of Memcached or a subset of Redis features.
License
punkeel/pelikan
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Pelikan is a 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 theimplementation is informed by our operational experiences.
Modular: Pelikan is a framework for rapidly developing new cachingsolutions by focusing on the inherent architectural similarity between cachingservices and providing reusable low-level components.
After years of using and working on various cache services, we built a commonframework that reveals the inherent architectural similarity among them.
By creating well-defined modules, most of the low-level functionalities arereused as we create different binaries. The implementation learns from ouroperational experiences to improve performance and reliability, and leads tosoftware 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 Segcache as the backingstorage, a TTL-centric design offering extremely high memory efficiency andexcellent core scalability. See ourNSDI'21 paper for designand evaluation details.pelikan_pingserver_rs
: an over-engineered, production-ready ping serveruseful as a tutorial and for measuring baseline RPC performancemomento_proxy
: a proxy which allows existingapplications to use Momento instead of a Memcache-compatible cache backend.
Pelikan legacy codebase in C can be found within thelegacy
folder of thisproject. It offers the same design blueprint as the current mainline, andimplements multiple storage backend, data structures, and protocols. However, it onlybuilds single-threaded, plain-text backends. It remains as a reference, butis not actively worked on. We do not recommend it for production deployments.
- runtime separation of control and data plane
- predictably low latencies via lockless data structures, worker never blocks
- per-module config options and metrics that can be composed easily
- multiple storage and protocol implementations, easy to further extend
- low-overhead command logger for hotkey and other important data analysis
- Ruststable toolchain
- (to build
momento_proxy
) Followthe gRPC instructions hereto install Protocol Buffer Compiler. Alternatively, you can skip themomento_proxy
package. - C toolchain:
llvm/clang (>= 7.0)
- Build tools:
cmake (>= 3.2)
The C/C++ tools are used by Pelikan dependencies such as BoringSSL, and alsonecessary if you are building legacy Pelikan which is written in C.
git clone https://github.com/pelikan-io/pelikancd pelikancargo build --release# to skip momento_proxy, run:# cargo build --workspace --exclude momento_proxy --release
cargotest
Usingpelikan_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 withtelnet
.
$ telnet localhost 12321Trying 127.0.0.1...Connected to localhost.Escape character is'^]'.set foo 0 0 3barSTORED
Attention: useadmin
port for all non-data commands.
$ telnet localhost 9999Trying 127.0.0.1...Connected to localhost.Escape character is'^]'.versionVERSION 0.1.0statsSTAT pid 54937STATtime 1459634909STAT uptime 22STAT version 100STAT ru_stime 0.019172...
Pelikan is file-first when it comes to configurations, and currently isconfig-file only. You can create a new config file following the examplesincluded under theconfig
directory.
- Join our project chat on
for questions and discussions
- Follow us on Twitter:@pelikan_cache
- Visithttp://pelikan.io
Please take a look at ourcommunity manifestoandcoding style guide.
If you want to submit a patch, please follow these steps:
- create a new issue
- fork on github & clone your fork
- create a feature branch on your fork
- push your feature branch
- create a pull request linked to the issue
We have made progress and are actively working on documentation, and will put iton our website. Meanwhile, check out the current material underdocs/
This software is licensed under the Apache 2.0 license, seeLICENSE for details.
About
Pelikan is a framework for building local or distributed caches. It comes with a highly extensible architecture, best-in-class performance, and superb operational ergonomics. You can use it to replace most of Memcached or a subset of Redis features.
Resources
License
Stars
Watchers
Forks
Releases
Packages0
Languages
- C53.2%
- Rust43.6%
- CMake1.5%
- Python1.2%
- Other0.5%