Project: Easegress (Orchestration & Management / API Gateway)
File: 3.11.Performance.md

- - - - Easegress supports compression and caching in Pipeline and HTTPServer for performance improvement as a reverse proxy. ```yaml name: pipeline-reverse-proxy kind: Pipeline flow: filter: proxy filters: name: proxy kind: Proxy pools: servers: url: http://127.0.0.1:9095 url: http://127.0.0.1:9096 url: http://127.0.0.1:9097 loadBalance: policy: roundRobin ``` Easegress proxy filter supports `gzip` type compression. It can save the bandwidth between the client and Easegress and reduce the time cost. ```yaml name: pipeline-reverse-proxy kind: Pipeline flow: filter: proxy filters: name: proxy kind: Proxy compression: minLength: 1024 ``` As the example above, we only need to value the `minLength` field to tell Easegress' proxy filter compressing response body whose size is bigger than `minLength`. Also, it will add the `gzip` header automatically if it's truly compressed. For the full yaml, see Easegress proxy filter has a `pool` section for describing the traffic forwarding backends. And it also supports caching the response according to the HTTP Methods and the HTTP response code. Recommend enabling this feature only in the routing static resources scenario*. ``` yaml name: pipeline-reverse-proxy kind: Pipeline flow: filter: proxy filters: name: proxy kind: Proxy pools: memoryCache: expiration: 10s maxEntryBytes: 4096 codes: 200 201 methods: GET HEAD ``` The example above will cache the response which size is smaller than 4096, and the response code is 200 or 201, with the HTTP methods Get and Head. For the full YAML, see As a traffic gate of Easegress, HTTPServer also supports caching routing rules. It reduces the HTTPServer route searching cost. HTTPServer will use the request's Host, Method, and Path to form a key for the build-in LRU rule cache. ```yaml kind: HTTPServer name: http-server-example port: 10080 https: false cacheSize: 10240 ``` As the example above, all we need is to set the `cacheSize` to indicated the LRU cache's size. It will disuse the least used cache rules firstly. For the full YAML, see ```yaml name: pipeline-reverse-proxy kind: Pipeline flow: filter: proxy filters: name: proxy kind: Proxy pools: servers: url: http://127.0.0.1:9095 url: http://127.0.0.1:9096 url: http://127.0.0.1:9097 loadBalance: policy: roundRobin compression: minLength: 1024 ``` ```yaml name: pipeline-reverse-proxy kind: Pipeline flow: filter: proxy filters: name: proxy kind: Proxy pools: servers: url: http://127.0.0.1:9095 url: http://127.0.0.1:9096 url: http://127.0.0.1:9097 loadBalance: policy: roundRobin memoryCache: expiration: 10s maxEntryBytes: 4096 codes: 200 201 methods: GET HEAD ``` ``` yaml kind: HTTPServer name: http-server-example port: 10080 https: false http3: false keyBase64: certBase64: keepAlive: true keepAliveTimeout: 75s maxConnection: 10240 cacheSize: 10240 rules: paths: pathPrefix: /pipeline backend: http-pipeline-example pathPrefix: /remote backend: remote-pipeline headers: key: X-Activity-No values: [ "123456", "124456" ] backend: remote-pipeline1 key: X-Activity-No values: [ "224456" ] regexp: ^224.*$ backend: remote-pipeline2 key: X-Activity-No regexp: ^324.*$ backend: remote-pipeline2 path: /func backend: func-mirror ```