{"id":20065911,"url":"https://github.com/reshiadavan/zen","last_synced_at":"2025-03-02T10:44:27.690Z","repository":{"id":199091021,"uuid":"701517727","full_name":"ReshiAdavan/Zen","owner":"ReshiAdavan","description":"A Lightweight and Event-Driven Load Balancer.","archived":false,"fork":false,"pushed_at":"2023-11-08T01:55:54.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-12T23:09:49.117Z","etag":null,"topics":["concurrency","cprogramming-language","daemons","load-balancer","multithreading","tls"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ReshiAdavan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-10-06T20:12:08.000Z","updated_at":"2024-04-05T20:37:00.000Z","dependencies_parsed_at":"2023-11-08T06:49:41.809Z","dependency_job_id":"2cec1674-f025-4567-a12c-b40e54a6d6e0","html_url":"https://github.com/ReshiAdavan/Zen","commit_stats":null,"previous_names":["reshiadavan/zen"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReshiAdavan%2FZen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReshiAdavan%2FZen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReshiAdavan%2FZen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReshiAdavan%2FZen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ReshiAdavan","download_url":"https://codeload.github.com/ReshiAdavan/Zen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241494141,"owners_count":19971870,"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":["concurrency","cprogramming-language","daemons","load-balancer","multithreading","tls"],"created_at":"2024-11-13T13:53:17.479Z","updated_at":"2025-03-02T10:44:27.666Z","avatar_url":"https://github.com/ReshiAdavan.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zen\n\nMy Load Balancer written in C.\n\n### Inspiration\n\n- I am looking to expand my knowledge in distributed systems, one project at a time. So far I covered Sentinel, a distributed KV storage which covered consensus algorithms, distributed networking, etc.\n- I am looking to create a load balancer and database from scratch and maybe create a large-scale distributed system leveraging these components.\n\n### Topics\n\n- Languages: C\n- Concepts:\n  - Techniques: Multi-threading, HTTP and TCP load-balancing\n  - Algorithms: (Weighted) Round-Robin, Hash/Random-Balancing, Least Connections/Traffic,\n  - Networks: TLS encryption\n  - Other: Logging, Daemon mode\n\n### Build\n\n**Dependencies**\n\n- gcc, make, cmake, OpenSSL (libssl-dev)\n\n```sh\n$ cmake . \u0026\u0026 make\n```\n\n### Quickstart\n\nCovers a bit of architecture...not that it is that verbose.\n\nBackend servers at http://localhost:8080 and http://localhost:8081, balancing strategy (weighted)-Round-Robin\n\n```sh\n$ ./zen -v -b http://localhost:8080:2,http://localhost:8081:4 -l weighted-round-robin\n```\n\nSimple config can be passed with `-c`:\n\n```sh\n$ ./zen -c path/to/zen.conf\n```\n\nConfig is very small and self-explanatory, default path located to `lib.conf`:\n\n```sh\n# zen configuration file, uncomment and edit desired configuration\n\n# accepts http | tcp\nmode http\n\n# Load-balancing settings\n\n# Frontends are the endpoint exposed as entry point for connecting clients\nfrontends 127.0.0.1:8789,127.0.0.1:8790,127.0.0.1:8791\n\n# Backends is a pool of server to load-balance requests from clients\nbackends 127.0.0.1:6090,127.0.0.1:6090,127.0.0.1:6090\n\n# Set round robin as balancing algorithm\n# Other options available can be\n# random-balancing | hash-balancing | leastconn | leasttraffic | weighted-round-robin\nload_balancing round-robin\n\n# Logging configuration\n\n# Could be either DEBUG, INFO/INFORMATION, WARNING, ERROR\nlog_level DEBUG\n\nlog_path /tmp/zen.log\n\n# TCP backlog, size of the complete connection queue\ntcp_backlog 128\n\n# TLS certs\n\n#cafile certs/ca.crt\n#certfile certs/alaptop.crt\n#keyfile certs/alaptop.key\n\n# TLS supported versions\n#tls_protocols tlsv1,tlsv1_1,tlsv1_2,tlsv1_3\n```\n\nExecutable accepts simple args, in case of config overwriting it.\n\n- `-h`: print an usage help\n- `-v`: enable verbose debug messages\n- `-d`: run in daemon mode\n- `-c \u003cpath/to/conf\u003e`: specify a configuration path, defaults to `/etc/zen/zen.conf`\n- `-l \u003cload-balancing-algorithm\u003e`: specify a load-balancing algorithm to be\n  used. Choices are `round-robin`, `hash`, `random`, `leastconn`, `leasttraffic`\n  and `weighted-round-robin`\n- `-m \u003cmode\u003e`: choose the run mode between `tcp` and `http`. Defaults to `http`\n- `-b \u003chost:port:weight\u003e,\u003chost:port:weight\u003e..`: add backend machines with a\n  weight associated, it will be ignored for load-balancing algorithms other\n  than `weighted-round-robin`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freshiadavan%2Fzen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freshiadavan%2Fzen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freshiadavan%2Fzen/lists"}