{"id":17258970,"url":"https://github.com/fkautz/casserole","last_synced_at":"2025-04-14T06:12:21.493Z","repository":{"id":24522652,"uuid":"101824992","full_name":"fkautz/casserole","owner":"fkautz","description":"Distributed cache for large HTTP objects","archived":false,"fork":false,"pushed_at":"2023-05-09T14:00:34.000Z","size":10317,"stargazers_count":5,"open_issues_count":12,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-14T06:12:14.794Z","etag":null,"topics":["cache","cache-storage"],"latest_commit_sha":null,"homepage":"","language":"Go","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/fkautz.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,"publiccode":null,"codemeta":null}},"created_at":"2017-08-30T01:46:32.000Z","updated_at":"2022-05-04T15:03:04.000Z","dependencies_parsed_at":"2024-06-21T15:33:03.730Z","dependency_job_id":"0fe0ca84-ecc9-47c0-956c-f1784a6742ec","html_url":"https://github.com/fkautz/casserole","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkautz%2Fcasserole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkautz%2Fcasserole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkautz%2Fcasserole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkautz%2Fcasserole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fkautz","download_url":"https://codeload.github.com/fkautz/casserole/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248830398,"owners_count":21168272,"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"],"created_at":"2024-10-15T07:22:43.934Z","updated_at":"2025-04-14T06:12:21.470Z","avatar_url":"https://github.com/fkautz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Casserole\n\nCasserole is a distributed http cache with a focus on:\n\n* Large Objects\n* Bandwidth minimization\n* Multi-tier distributed cache sharing\n  * Local Memory\n  * Cluster Memory\n  * Cluster Persistent Storage\n* No single point of failure\n\nCasserole is written in Go and integrates well-tested distributed libraries such as etcd and groupcache.\n\n# Upstream Server Consideratoins\n\n### HTTP headers must be set to allow caching.\n\n* HTTP headers are used to determine cacheability.\n* Cacheable objects expiring in less than 60 seconds are not cached.\n* The HTTP verb `HEAD` is used to determine whether an object is cacheable, not `GET`.\n* Responses are immediately streamed if the object is not cached.\n* Upstream server must allow `Range` requests on cacheable objects.\n* The cluster will download cacheable large objects in `2 megabyte` intervals and will deliver each interval as soon as\nit is received.\n\n### HTTP Range required\n\nUpstream objects are fetched in `2MB` segments. Objects must support fetching objects through `Range: bytes` requests.\n\nWhen retrieving objects larger than 2MB, each Range request to the same object must return the same object, or the request\nwill be corrupted. For large objects, this is typically not a concern.\n\n### Unauthenticated requests\n\nAt the moment, only unauthenticated requests are supported. Authenticated requests will be supported at\na later time.\n\n# Getting Started\n\nCasserole is still in an alpha development state. Production use at this time is\nnot recommended. Feedback, testing and help are greatly appreciated.\n\n## Single Node Testing Environment\n\nSingle node testing is supported with docker-compose. The `docker-compose.yml`\nfile is located at `utils/compose` and can be started with the following command:\n\n`docker-compose up`\n\nTo scale the cache, use\n\n`docker-compose scale cache=3`\n\nThere are multiple configuration options available for the test environment that can\nbe configured in the `docker-compose.yml` file.\n\nHere are the configurable environment variables with their default values:\n```sh\nUPSTREAM_SERVER http://www.example.com\nETCD http://etcd:2379\nMAX_MEMORY 100m\nMAX_DISK 100G\n````\n\n## Multi Node Setup\n\nPrerequisites:\n\n* Set up an etcd cluster\n* Determine how much memory you want to use.\n* Determine how much disk space you want to use.\n\nThe prefered technique for starting casserole is with docker:\n\n```sh\ndocker pull fkautz/casserole\ndocker run -d \\\n           -e UPSTREAM_SERVER=http://httpbin.org  \\\n           -e ETCD=http://etcd:2379 \\\n           fkautz/casserole\n```\n\nConfigurable options when running casserole:\n\n```sh\n      --address string              Address to listen on (default \"localhost:8080\")\n      --cleaned-disk-usage string   Address to listen on (default \"800M\")\n      --disk-cache-dir string       Address to listen on (default \"./data\")\n      --disk-cache-enabled          Address to listen on (default true)\n      --etcd value                  URL root to mirror (default [])\n      --max-disk-usage string       Address to listen on (default \"1G\")\n      --max-memory-usage string     Address to listen on (default \"100M\")\n      --mirror-url string           URL root to mirror (default \"http://localhost:9000\")\n      --peering-address string      URL root to mirror (default \"http://localhost:8000\")\n```\n\n# Reporting Feature Requests and Bugs\n\nPlease file all bugs and feature requests to `https://github.com/fkautz/casserole/issues`.\n\nPull requests are welcome. For new features or complex pull requests, please contact `fkautz`\nfirst. He can be reached at `#casserole` on `irc.freenode.net`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffkautz%2Fcasserole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffkautz%2Fcasserole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffkautz%2Fcasserole/lists"}