Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

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

NotificationsYou must be signed in to change notification settings

punkeel/pelikan

 
 

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.

License: Apache-2.0Build StatusFuzz StatusZulip Chat

Website |Chat

Content

Overview

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.

Products

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 performance
  • momento_proxy: a proxy which allows existingapplications to use Momento instead of a Memcache-compatible cache backend.

Legacy

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.

Features

  • 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

Building Pelikan

Requirement

  • Ruststable toolchain
  • (to buildmomento_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.

Build

git clone https://github.com/pelikan-io/pelikancd pelikancargo build --release# to skip momento_proxy, run:# cargo build --workspace --exclude momento_proxy --release

Tests

cargotest

Usage

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...

Configuration

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.

Community

Stay in touch

Contributing

Please take a look at ourcommunity manifestoandcoding style guide.

If you want to submit a patch, please follow these steps:

  1. create a new issue
  2. fork on github & clone your fork
  3. create a feature branch on your fork
  4. push your feature branch
  5. create a pull request linked to the issue

Documentation

We have made progress and are actively working on documentation, and will put iton our website. Meanwhile, check out the current material underdocs/

License

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

No releases published

Packages

No packages published

Languages

  • C53.2%
  • Rust43.6%
  • CMake1.5%
  • Python1.2%
  • Other0.5%

[8]ページ先頭

©2009-2025 Movatter.jp