{"id":27054093,"url":"https://github.com/megaease/easegress","last_synced_at":"2025-04-05T09:04:37.146Z","repository":{"id":36962033,"uuid":"371564104","full_name":"easegress-io/easegress","owner":"easegress-io","description":"A Cloud Native traffic orchestration system","archived":false,"fork":false,"pushed_at":"2024-04-02T14:20:55.000Z","size":20129,"stargazers_count":5687,"open_issues_count":10,"forks_count":489,"subscribers_count":109,"default_branch":"main","last_synced_at":"2024-04-16T17:22:10.009Z","etag":null,"topics":["api-gateway","cloud-native","distributed-systems","etcd","gateway","go","golang","http","kubernetes","load-balancer","mesh","microservice","microservices","proxy-server","raft","reverse-proxy","service-mesh","sidecar","traffic"],"latest_commit_sha":null,"homepage":"https://megaease.com/easegress/","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/easegress-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-05-28T03:02:42.000Z","updated_at":"2024-04-19T13:43:59.753Z","dependencies_parsed_at":"2023-10-10T13:55:52.456Z","dependency_job_id":"d829ddfd-4512-48a6-9e2c-7849cd40f305","html_url":"https://github.com/easegress-io/easegress","commit_stats":{"total_commits":1963,"total_committers":85,"mean_commits":"23.094117647058823","dds":0.7911360163015793,"last_synced_commit":"0813850f908e07327b4f9eca53650716149c1358"},"previous_names":["megaease/easegress"],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easegress-io%2Feasegress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easegress-io%2Feasegress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easegress-io%2Feasegress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easegress-io%2Feasegress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easegress-io","download_url":"https://codeload.github.com/easegress-io/easegress/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247312077,"owners_count":20918344,"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":["api-gateway","cloud-native","distributed-systems","etcd","gateway","go","golang","http","kubernetes","load-balancer","mesh","microservice","microservices","proxy-server","raft","reverse-proxy","service-mesh","sidecar","traffic"],"created_at":"2025-04-05T09:02:41.078Z","updated_at":"2025-04-05T09:04:37.121Z","avatar_url":"https://github.com/easegress-io.png","language":"Go","readme":"# Easegress  \u003c!-- omit from toc --\u003e\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/megaease/easegress)](https://goreportcard.com/report/github.com/megaease/easegress)\n[![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/megaease/easegress/test.yml?branch=main)](https://github.com/megaease/easegress/actions/workflows/test.yml)\n[![codecov](https://codecov.io/gh/megaease/easegress/branch/main/graph/badge.svg?token=5Q80B98LPI)](https://codecov.io/gh/megaease/easegress)\n[![Docker pulls](https://img.shields.io/docker/pulls/megaease/easegress.svg)](https://hub.docker.com/r/megaease/easegress)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/megaease/easegress)](https://github.com/megaease/easegress/blob/main/go.mod)\n[![Join Easegress Slack](https://img.shields.io/badge/slack-megaease-brightgreen?logo=slack)](https://cloud-native.slack.com/messages/easegress)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/8265/badge)](https://www.bestpractices.dev/projects/8265)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Feasegress-io%2Feasegress.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Feasegress-io%2Feasegress?ref=badge_shield)\n\n\u003ca href=\"https://megaease.com/easegress\"\u003e\n    \u003cimg src=\"./docs/imgs/easegress.svg\"\n        alt=\"Easegress logo\" title=\"Easegress\" height=\"175\" width=\"175\" align=\"right\"/\u003e\n\u003c/a\u003e\n\n- [What is Easegress](#what-is-easegress)\n- [Features](#features)\n- [Getting Started](#getting-started)\n  - [Launch Easegress](#launch-easegress)\n  - [Reverse Proxy](#reverse-proxy)\n- [Use Cases](#use-cases)\n- [Documentation](#documentation)\n- [Easegress Portal](#easegress-portal)\n  - [Screenshots](#screenshots)\n- [Community](#community)\n- [Contributing](#contributing)\n- [License](#license)\n\n## What is Easegress\n\n`Easegress` is a Cloud Native traffic orchestration system designed for:\n\n- **High Availability:** Built-in Raft consensus \u0026 leader election provides 99.99% availability.\n- **Traffic Orchestration:** Simple orchestration of various filters for each traffic pipeline.\n- **High Performance:** Lightweight and essential features speed up the performance.\n- **Observability:** There are many meaningful statistics periodically in a readable way.\n- **Extensibility:** It's easy to develop your own filter or controller with high-level programming language.\n- **Integration:** The simple interfaces make it easy to integrate with other systems, such as Kubernetes Ingress, [EaseMesh](https://github.com/megaease/easemesh) sidecar, Workflow, etc.\n\nThe architecture of Easegress:\n\n![architecture](./docs/imgs/architecture.png)\n\n## Features\n\n- **Service Management**\n  - **Multiple protocols:**\n    - HTTP/1.1\n    - HTTP/2\n    - HTTP/3(QUIC)\n    - MQTT\n  - **Rich Routing Rules:** exact path, path prefix, regular expression of the path, method, headers, clientIPs.\n  - **Resilience\u0026Fault Tolerance**\n    - **CircuitBreaker:** temporarily blocks possible failures.\n    - **RateLimiter:** limits the rate of incoming requests.\n    - **Retry:** repeats failed executions.\n    - **TimeLimiter:** limits the duration of execution.\n  - **Deployment Management**\n    - **Blue-green Strategy:** switches traffic at one time.\n    - **Canary Strategy:** schedules traffic slightly.\n  - **API Management**\n    - **API Aggregation:** aggregates results of multiple APIs.\n    - **API Orchestration:** orchestrates the flow of APIs.\n  - **Security**\n    - **IP Filter:** Limits access to IP addresses.\n    - **Static HTTPS:** static certificate files.\n    - **API Signature:** supports [HMAC](https://en.wikipedia.org/wiki/HMAC) verification.\n    - **JWT Verification:** verifies [JWT Token](https://jwt.io/).\n    - **OAuth2:** validates [OAuth/2](https://datatracker.ietf.org/doc/html/rfc6749) requests.\n    - **Let's Encrypt:** automatically manage certificate files.\n  - **Pipeline-Filter Mechanism**\n    - **Filter Management:** makes it easy to develop new filters.\n  - **Service Mesh**\n    - **Mesh Master:** is the control plane to manage the lifecycle of mesh services.\n    - **Mesh Sidecar:** is the data plane as the endpoint to do traffic interception and routing.\n    - **Mesh Ingress Controller:** is the mesh-specific ingress controller to route external traffic to mesh services.\n        \u003e Notes: This feature is leveraged by [EaseMesh](https://github.com/megaease/easemesh)\n  - **Third-Part Integration**\n    - **FaaS** integrates with the serverless platform Knative.\n    - **Service Discovery** integrates with Eureka, Consul, Etcd, and Zookeeper.\n    - **Ingress Controller** integrates with Kubernetes as an ingress controller.\n- **Extensibility**\n  - **WebAssembly** executes user developed [WebAssembly](https://webassembly.org/) code.\n- **High Performance and Availability**\n  - **Adaption**: adapts request, response in the handling chain.\n  - **Validation**: headers validation, OAuth2, JWT, and HMAC verification.\n  - **Load Balance:** round-robin, random, weighted random, IP hash, header hash and support sticky sessions.\n  - **Cache:** for the backend servers.\n  - **Compression:** compresses body for the response.\n  - **Hot-Update:** updates both config and binary of Easegress in place without losing connections.\n- **Operation**\n  - **Easy to Integrate:** command line([egctl](docs/02.Tutorials/2.1.egctl-Usage.md)), Easegress Portal, HTTP clients such as curl, postman, etc.\n  - **Distributed Tracing**\n    - Built-in [OpenTelemetry](https://opentelemetry.io/), which provides a vendor-neutral API.\n  - **Observability**\n    - **Node:** role(primary, secondary), raft leader status, healthy or not, last heartbeat time, and so on\n    - **Traffic:** in multi-dimension: server and backend.\n      - **Throughput:** total and error statistics of request count, TPS/m1, m5, m15, and error percent, etc.\n      - **Latency:** p25, p50, p75, p95, p98, p99, p999.\n      - **Data Size:** request and response size.\n      - **Status Codes:** HTTP status codes.\n      - **TopN:** sorted by aggregated APIs(only in server dimension).\n\n## Getting Started\nThe basic usage of Easegress is to quickly set up a proxy for the backend servers.\n\n### Launch Easegress\n\nEasegress can be installed from pre-built binaries or from source. For details, see [Install](docs/01.Getting-Started/1.2.Install.md).\n\n\nThen we can execute the server:\n\n```bash\n$ easegress-server\n2023-09-06T15:12:49.256+08:00   INFO    cluster/config.go:110   config: advertise-client-urls: ...\n...\n```\n\nBy default, Easegress opens ports 2379, 2380, and 2381; however, you can modify these settings along with other arguments either in the configuration file or via command-line arguments. For a complete list of arguments, please refer to the `easegress-server --help` command.\n\nAfter launching successfully, we could check the status of the one-node cluster.\n\n```bash\n$ egctl get member\n...\n\n$ egctl describe member\n...\n```\n\n### Reverse Proxy\n\nAssuming you have two backend HTTP services running at `127.0.0.1:9095` and `127.0.0.1:9096`, you can initiate an HTTP proxy from port 10080 to these backends using the following command:\n\n```bash\n$ egctl create httpproxy demo --port 10080 \\\n  --rule=\"/pipeline=http://127.0.0.1:9095,http://127.0.0.1:9096\"\n```\n\nThen try it:\n```bash\n$ curl -v 127.0.0.1:10080/pipeline\n```\n\nThe request will be forwarded to either `127.0.0.1:9095/pipeline` or `127.0.0.1:9096/pipeline`, utilizing a round-robin load-balancing policy.\n\nMore about getting started with Easegress:\n\n- [Quick Start](docs/01.Getting-Started/1.1.Quick-Start.md)\n- [Install Easegress](docs/01.Getting-Started/1.2.Install.md)\n- [Main Concepts](docs/01.Getting-Started/1.3.Concepts.md)\n\n## Use Cases\n\nThe following examples show how to use Easegress for different scenarios.\n\n- [API Aggregation](docs/02.Tutorials/2.3.Pipeline-Explained.md#api-aggregation) - Aggregating many APIs into a single API.\n- [Cluster Deployment](docs/05.Administration/5.1.Config-and-Cluster-Deployment.md) - How to deploy multiple Easegress cluster nodes.\n- [Canary Release](docs/03.Advanced-Cookbook/3.04.Canary-Release.md) - How to do canary release with Easegress.\n- [Distributed Tracing](docs/03.Advanced-Cookbook/3.05.Distributed-Tracing.md) - How to do APM tracing  - Zipkin.\n- [FaaS](docs/03.Advanced-Cookbook/3.09.FaaS.md) - Supporting Knative FaaS integration\n- [Flash Sale](docs/03.Advanced-Cookbook/3.09.FaaS.md) - How to do high concurrent promotion sales with Easegress\n- [Kubernetes Ingress Controller](docs/04.Cloud-Native/4.1.Kubernetes-Ingress-Controller.md) - How to integrate with Kubernetes as ingress controller\n- [LoadBalancer](docs/02.Tutorials/2.3.Pipeline-Explained.md#load-balancer) - A number of the strategies of load balancing\n- [MQTTProxy](docs/03.Advanced-Cookbook/3.01.MQTT-Proxy.md) - An Example to MQTT proxy with Kafka backend.\n- [Multiple API Orchestration](docs/03.Advanced-Cookbook/3.03.Multiple-API-Orchestration.md) - An Telegram translation bot.\n- [Performance](docs/03.Advanced-Cookbook/3.11.Performance.md) - Performance optimization - compression, caching etc.\n- [Pipeline](docs/02.Tutorials/2.3.Pipeline-Explained.md) - How to orchestrate HTTP filters for requests/responses handling\n- [Resilience and Fault Tolerance](docs/02.Tutorials/2.4.Resilience.md) - CircuitBreaker, RateLimiter, Retry, TimeLimiter, etc. (Porting from [Java resilience4j](https://github.com/resilience4j/resilience4j))\n- [Security](docs/02.Tutorials/2.5.Traffic-Verification.md) - How to do authentication by Header, JWT, HMAC, OAuth2, etc.\n- [Service Registry](docs/03.Advanced-Cookbook/3.06.Service-Registry.md) - Supporting the Microservice registries - Zookeeper, Eureka, Consul, Nacos, etc.\n- [WebAssembly](docs/03.Advanced-Cookbook/3.07.WasmHost.md) - Using AssemblyScript to extend the Easegress\n- [WebSocket](docs/02.Tutorials/2.6.Websocket.md) - WebSocket proxy for Easegress\n- [Workflow](docs/03.Advanced-Cookbook/3.10.Workflow.md) - An Example to make a workflow for a number of APIs.\n\nFor full list, see [Tutorials](docs/02.Tutorials/README.md) and [Cookbook](docs/03.Advanced-Cookbook/README.md).\n## Documentation\n\n- [Getting Started](docs/01.Getting-Started/README.md)\n- [Tutorials](docs/02.Tutorials/README.md)\n- [Advanced Cookbook](docs/03.Advanced-Cookbook/README.md)\n- [Cloud Native](docs/04.Cloud-Native/README.md)\n- [Administration](docs/05.Administration/README.md)\n- [Development](docs/06.Development-for-Easegress/README.md)\n- [Reference](docs/07.Reference/README.md)\n\n## Easegress Portal\n\n[Easegress Portal](https://github.com/megaease/easegress-portal) is an intuitive, open-source user interface for the Easegress traffic orchestration system. Developed with React.js, this portal provides config management, metrics, and visualizations, enhancing the overall Easegress experience.\n\n### Screenshots\n\n**1. Cluster Management**\n\n![cluster](./docs/imgs/portal/cluster.png)\n\n**2. Traffic Management**\n\n![traffic http server](./docs/imgs/portal/traffic-http-server.png)\n\n**3. Pipeline Management**\n\n![pipeline detail](./docs/imgs/portal/pipeline-detail.png)\n\n\n## Community\n\n- [Join Slack Workspace](https://cloud-native.slack.com/messages/easegress) for requirement, issue and development.\n- [MegaEase on Twitter](https://twitter.com/megaease)\n\n## Contributing\n\nSee [Contributing guide](./CONTRIBUTING.md#contributing). The project welcomes contributions and suggestions that abide by the [CNCF Code of Conduct](./CODE_OF_CONDUCT.md).\n\n## License\n\nEasegress is under the Apache 2.0 license. See the [LICENSE](./LICENSE) file for details.\n\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Feasegress-io%2Feasegress.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Feasegress-io%2Feasegress?ref=badge_large)","funding_links":[],"categories":["开源类库","Server Applications","Go","Ingress controllers","服务器应用程序","Open source library","Popular","语言资源库","NetWork","Relational Databases","Repositories","API Gateways \u0026 Proxies"],"sub_categories":["网关","HTTP Clients","HTTP客户端","Gateway","go"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmegaease%2Feasegress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmegaease%2Feasegress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmegaease%2Feasegress/lists"}