{"id":13524092,"url":"https://github.com/twitter/pelikan","last_synced_at":"2025-05-15T11:06:42.433Z","repository":{"id":6878278,"uuid":"42829191","full_name":"twitter/pelikan","owner":"twitter","description":"Pelikan is Twitter's unified cache backend","archived":false,"fork":false,"pushed_at":"2023-10-11T12:10:54.000Z","size":11532,"stargazers_count":1946,"open_issues_count":58,"forks_count":174,"subscribers_count":49,"default_branch":"master","last_synced_at":"2025-04-14T19:57:08.398Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/twitter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2015-09-20T20:51:55.000Z","updated_at":"2025-04-10T18:45:28.000Z","dependencies_parsed_at":"2024-04-07T06:41:41.167Z","dependency_job_id":null,"html_url":"https://github.com/twitter/pelikan","commit_stats":{"total_commits":667,"total_committers":34,"mean_commits":19.61764705882353,"dds":0.6341829085457271,"last_synced_commit":"e7a76c92d8a6b401475ce53d3cefe964f1e7fbb6"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twitter%2Fpelikan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twitter%2Fpelikan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twitter%2Fpelikan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twitter%2Fpelikan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/twitter","download_url":"https://codeload.github.com/twitter/pelikan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254328385,"owners_count":22052632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T06:01:06.918Z","updated_at":"2025-05-15T11:06:42.380Z","avatar_url":"https://github.com/twitter.png","language":"C","readme":"# Pelikan\n\nPelikan is Twitter's framework for developing cache services. It is:\n\n* **Fast**: Pelikan provides high-throughput and low-latency caching solutions.\n\n* **Reliable**: Pelikan is designed for large-scale deployment and the\n  implementation is informed by our operational experiences.\n\n* **Modular**: Pelikan is a framework for rapidly developing new caching\n  solutions by focusing on the inherent architectural similarity between caching\n  services and providing reusable low-level components.\n\n[![License: Apache-2.0][license-badge]][license-url]\n[![Build Status][cargo-build-badge]][cargo-build-url]\n[![Fuzz Status][cargo-fuzz-badge]][cargo-fuzz-url]\n[![Zulip Chat][zulip-badge]][zulip-url]\n\n[Website](http://pelikan.io) |\n[Chat][zulip-url]\n\n# Content\n* [Overview](#overview)\n  * [Products](#products)\n  * [Features](#features)\n* [Build](#building-pelikan)\n* [Usage](#usage)\n* [Community](#community)\n  * [Stay in touch](#stay-in-touch)\n  * [Contributing](#contributing)\n* [Documentation](#documentation)\n* [License](#license)\n\n# Overview\nAfter years of using and working on various cache services, we built a common\nframework that reveals the inherent architectural similarity among them.\n\nBy creating well-defined modules, most of the low-level functionalities are\nreused as we create different binaries. The implementation learns from our\noperational experiences to improve performance and reliability, and leads to\nsoftware designed for large-scale deployment.\n\nThe framework approach allows us to develop new features and protocols quickly.\n\n## Products\nPelikan contains the following products:\n- `pelikan_segcache_rs`: a Memcached-like server with extremely high memory\n  efficiency and excellent core scalability. See our [NSDI'21 paper] for design\n  and evaluation details.\n- `pelikan_pingserver_rs`: an over-engineered, production-ready ping server\n  useful as a tutorial and for measuring baseline RPC performance\n- [`momento_proxy`][momento_proxy-url]: a proxy which allows existing \n  applications to use Momento instead of a Memcache-compatible cache backend.\n\n## Legacy\nPelikan legacy codebase can be found within the `legacy` folder of this project.\nIt is composed of the original C codebase and backend implementations. It\nremains as a reference, but is not recommended for production deployments.\n\n## Features\n- runtime separation of control and data plane\n- predictably low latencies via lockless data structures, worker never blocks\n- per-module config options and metrics that can be composed easily\n- multiple storage and protocol implementations, easy to further extend\n- low-overhead command logger for hotkey and other important data analysis\n\n# Building Pelikan\n\n## Requirement\n- Rust [stable toolchain](https://www.rust-lang.org/learn/get-started)\n- C toolchain: `llvm/clang (\u003e= 7.0)`\n- Build tools: `cmake (\u003e= 3.2)`\n\n## Build\n```sh\ngit clone https://github.com/twitter/pelikan.git\ncd pelikan\ncargo build --release\n```\n\n## Tests\n```sh\ncargo test\n```\n\n# Usage\nUsing `pelikan_segcache_rs` as an example, other executables are highly similar.\n\nTo get info of the service, including usage format and options, run:\n```sh\ntarget/release/pelikan_segcache_rs --help\n```\n\nTo launch the service with default settings, simply run:\n```sh\ntarget/release/pelikan_segcache_rs\n```\n\nTo launch the service with the sample config file, run:\n```sh\ntarget/release/pelikan_segcache_rs config/segcache.toml\n```\n\nYou should be able to try out the server using an existing memcached client,\nor simply with `telnet`.\n```sh\n$ telnet localhost 12321\nTrying 127.0.0.1...\nConnected to localhost.\nEscape character is '^]'.\nset foo 0 0 3\nbar\nSTORED\n```\n\n**Attention**: use `admin` port for all non-data commands.\n```sh\n$ telnet localhost 9999\nTrying 127.0.0.1...\nConnected to localhost.\nEscape character is '^]'.\nversion\nVERSION 0.1.0\nstats\nSTAT pid 54937\nSTAT time 1459634909\nSTAT uptime 22\nSTAT version 100\nSTAT ru_stime 0.019172\n...\n```\n\n## Configuration\n\nPelikan is file-first when it comes to configurations, and currently is\nconfig-file only. You can create a new config file following the examples\nincluded under the `config` directory.\n\n\n# Community\n\n## Stay in touch\n- Join our project chat on [![Zulip][zulip-badge]][zulip-url]\n  for questions and discussions\n- Follow us on Twitter: [@pelikan_cache]\n- Visit \u003chttp://pelikan.io\u003e\n\n## Contributing\n\nPlease take a look at our [community manifesto](https://github.com/twitter/pelikan/blob/master/docs/manifesto.rst)\nand [coding style guide](https://github.com/twitter/pelikan/blob/master/docs/coding_style.rst).\n\nIf you want to submit a patch, please follow these steps:\n\n1. create a new issue\n2. fork on github \u0026 clone your fork\n3. create a feature branch on your fork\n4. push your feature branch\n5. create a pull request linked to the issue\n\n\n# Documentation\nWe have made progress and are actively working on documentation, and will put it\non our website. Meanwhile, check out the current material under `docs/`\n\n## License\nThis software is licensed under the Apache 2.0 license, see [LICENSE](LICENSE) for details.\n\n[@pelikan_cache]: https://twitter.com/pelikan_cache\n[cargo-build-badge]: https://img.shields.io/github/workflow/status/twitter/pelikan/cargo-build/master?label=build\n[cargo-build-url]: https://github.com/twitter/pelikan/actions/workflows/cargo.yml?query=branch%3Amaster+event%3Apush\n[cargo-fuzz-badge]: https://img.shields.io/github/workflow/status/twitter/pelikan/cargo-fuzz/master?label=fuzz\n[cargo-fuzz-url]: https://github.com/twitter/pelikan/actions/workflows/fuzz.yml?query=branch%3Amaster+event%3Apush\n[check]: (http://libcheck.github.io/check/)\n[check-linker-bug]: (https://sourceforge.net/p/check/mailman/message/32835594/)\n[license-badge]: https://img.shields.io/badge/license-Apache%202.0-blue.svg\n[license-url]: https://github.com/twitter/pelikan/blob/master/LICENSE\n[momento_proxy-url]: src/proxy/momento/README.md\n[NSDI'21 paper]: https://www.usenix.org/conference/nsdi21/presentation/yang-juncheng\n[zulip-badge]: https://img.shields.io/badge/zulip-join_chat-blue.svg\n[zulip-url]: https://pelikan.zulipchat.com/\n","funding_links":[],"categories":["C","软件"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwitter%2Fpelikan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwitter%2Fpelikan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwitter%2Fpelikan/lists"}