{"id":13628580,"url":"https://github.com/pelikan-io/pelikan","last_synced_at":"2025-04-07T03:19:43.645Z","repository":{"id":64679270,"uuid":"577410647","full_name":"pelikan-io/pelikan","owner":"pelikan-io","description":"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.","archived":false,"fork":false,"pushed_at":"2024-10-01T22:29:13.000Z","size":3756,"stargazers_count":245,"open_issues_count":16,"forks_count":19,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-31T02:04:32.894Z","etag":null,"topics":["cache","cache-storage","framework","key-value","memcached","redis"],"latest_commit_sha":null,"homepage":"https://pelikan.io","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/pelikan-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"publiccode":null,"codemeta":null},"funding":{"github":"pelikanfoundation"}},"created_at":"2022-12-12T17:14:40.000Z","updated_at":"2025-03-12T20:25:37.000Z","dependencies_parsed_at":"2025-02-28T04:41:53.579Z","dependency_job_id":"2a0a107a-6d9f-41ca-95fe-ab428f580a1c","html_url":"https://github.com/pelikan-io/pelikan","commit_stats":{"total_commits":734,"total_committers":36,"mean_commits":20.38888888888889,"dds":0.667574931880109,"last_synced_commit":"d2dae23ba182970c6845e68e2a8463ac3cec5a9b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pelikan-io%2Fpelikan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pelikan-io%2Fpelikan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pelikan-io%2Fpelikan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pelikan-io%2Fpelikan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pelikan-io","download_url":"https://codeload.github.com/pelikan-io/pelikan/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247584112,"owners_count":20962075,"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":["cache","cache-storage","framework","key-value","memcached","redis"],"created_at":"2024-08-01T22:00:54.196Z","updated_at":"2025-04-07T03:19:43.618Z","avatar_url":"https://github.com/pelikan-io.png","language":"C","funding_links":["https://github.com/sponsors/pelikanfoundation"],"categories":["C"],"sub_categories":[],"readme":"# Pelikan\n\nPelikan is a 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\n[Website](http://pelikan.io) |\n[Chat][discord-url]\n\n# Content\n\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\n\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\n\nPelikan contains the following products:\n\n- `pelikan_segcache_rs`: a Memcached-like server with Segcache as the backing\n  storage, a TTL-centric design offering extremely high memory efficiency and\n  excellent core scalability. See our [NSDI'21 paper] for design\n  and evaluation details.\n- `pelikan_pingserver`: an over-engineered, production-ready ping server which\n  is useful as a tutorial and for measuring baseline RPC performance. It\n  supports multiple protocols and application transports to allow comparing the\n  performance of different protocols, transports, and implementations.\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\n\nPelikan legacy codebase in C can be found within the `legacy` folder of this\nproject. It offers the same design blueprint as the current mainline, and\nimplements multiple storage backend, data structures, and protocols. However, it only\nbuilds single-threaded, plain-text backends. It remains as a reference, but\nis not actively worked on. We do not recommend it for production deployments.\n\n## Features\n\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\n- Rust [stable toolchain](https://www.rust-lang.org/learn/get-started)\n- (to build `momento_proxy`) Follow [the gRPC instructions here][grpc-url]\n  to install Protocol Buffer Compiler. Alternatively, you can skip the\n  `momento_proxy` package.\n- C toolchain: `llvm/clang (\u003e= 7.0)`\n- Build tools: `cmake (\u003e= 3.2)`\n\nThe C/C++ tools are used by Pelikan dependencies such as BoringSSL, and also\nnecessary if you are building legacy Pelikan which is written in C.\n\n## Build\n\n```sh\ngit clone https://github.com/pelikan-io/pelikan\ncd pelikan\ncargo build --release\n# to skip momento_proxy, run:\n# cargo build --workspace --exclude momento_proxy --release\n```\n\n## Tests\n\n```sh\ncargo test\n```\n\n# Usage\n\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\n```sh\ntarget/release/pelikan_segcache_rs --help\n```\n\nTo launch the service with default settings, simply run:\n\n```sh\ntarget/release/pelikan_segcache_rs\n```\n\nTo launch the service with the sample config file, run:\n\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\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\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# Community\n\n## Stay in touch\n\n- Join our [Discord server][discord-url] for questions and discussions\n- Visit \u003chttp://pelikan.io\u003e\n- Follow us on Twitter: [@pelikan_cache]\n\n## Contributing\n\nPlease take a look at our [community manifesto](https://github.com/pelikan-io/pelikan/blob/main/docs/manifesto.rst)\nand [coding style guide](https://github.com/pelikan-io/pelikan/blob/main/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# Documentation\n\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\n\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/actions/workflow/status/pelikan-io/pelikan/cargo.yml?branch=main\n[cargo-build-url]: https://github.com/pelikan-io/pelikan/actions/workflows/cargo.yml?query=branch%3Amain+event%3Apush\n[cargo-fuzz-badge]: https://img.shields.io/github/actions/workflow/status/pelikan-io/pelikan/fuzz.yml?branch=main\n[cargo-fuzz-url]: https://github.com/pelikan-io/pelikan/actions/workflows/fuzz.yml?query=branch%3Amain+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/pelikan-io/pelikan/blob/main/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[grpc-url]: https://grpc.io/docs/protoc-installation/\n[discord-url]: https://discord.gg/yUBWHqxGUR\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpelikan-io%2Fpelikan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpelikan-io%2Fpelikan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpelikan-io%2Fpelikan/lists"}