文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Istio实现非侵入压缩,微服务之间如何实现压缩

2024-12-02 11:44

关注

1.2mesh内部

微服务相互通信时,特别是用了rest协议,即用http协议通信,配置压缩和解压,可以有效加快数据传输速度,减少网路延迟

这个很有用,比如如果我们的rpc协议是http,启用压缩就可以提高传输效率。

2实操

2.1网关配置压缩

2.1.1示例1

  1. cat << EOF > ef-ingressgateway-http-filter-compression.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   namespace: istio-system 
  6.   name: apply-to 
  7. spec: 
  8.   workloadSelector: 
  9.     labels: 
  10.       istio: ingressgateway 
  11.   configPatches: 
  12.     - applyTo: HTTP_FILTER 
  13.       match: 
  14.         context: GATEWAY 
  15.         listener: 
  16.           filterChain: 
  17.             filter: 
  18.               name: envoy.filters.network.http_connection_manager 
  19.               subFilter: 
  20.                 name: envoy.filters.http.router 
  21.       patch: 
  22.         operation: INSERT_BEFORE 
  23.         value: 
  24.           name: envoy.filters.http.compressor 
  25.           typed_config: 
  26.             "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor 
  27.             response_direction_config: 
  28.               common_config: 
  29.                 min_content_length: 100 
  30.                 content_type: 
  31.                 - 'text/html' 
  32.             compressor_library: 
  33.               name: text_optimized 
  34.               typed_config: 
  35.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip 
  36.                 memory_level: 3 
  37.                 window_bits: 10 
  38.                 compression_level: BEST_COMPRESSION 
  39.                 compression_strategy: DEFAULT_STRATEGY 
  40. EOF 
  41.  
  42. kubectl apply -f ef-ingressgateway-http-filter-compression.yaml  -n istio-system 

配置参数说明:

作用在http_filter上,type_url是固定的。response_direction_config对响应做配置,min_content_length最小启用压缩大小,content_type对哪些类型启用压缩。compressor_library压缩库配置,

window_bits:

窗口位大小,值从9到15,大的值会有更好的压缩,但内存消耗更大,默认是12,将产生4096字节窗口

compression_level

压缩级别,将影响压缩速度和压缩大小。BEST,高压缩,高延迟;SPEED低压缩,低延迟;DEFAULT优化的压缩,将介于BEST和SPEED之间。默认没设置是DEFAULT.

memory_level

内存级别,从1到9,控制压缩库内存的使用量,值越高内存用的多,但是更快,压缩结果更好。默认值是5.

compression_strategy:

DEFAULT , FILTERED , HUFFMAN , RLE

content_type:

默认值 “application/javascript”, “application/json”, “application/xhtml+xml”, “image/svg+xml”, “text/css”, “text/html”, “text/plain”, “text/xml”

没启用压缩前:

传输大小是4.6k

启用压缩后:

content-encoding为gzip,说明启用了gzip压缩

大小由4.6k降到了1.9k

2.1.2提高压缩参数

  1. cat << EOF > ef-ingressgateway-http-filter-compression-2.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   namespace: istio-system 
  6.   name: apply-to 
  7. spec: 
  8.   workloadSelector: 
  9.     labels: 
  10.       istio: ingressgateway 
  11.   configPatches: 
  12.     - applyTo: HTTP_FILTER 
  13.       match: 
  14.         context: GATEWAY 
  15.         listener: 
  16.           filterChain: 
  17.             filter: 
  18.               name: envoy.filters.network.http_connection_manager 
  19.               subFilter: 
  20.                 name: envoy.filters.http.router 
  21.       patch: 
  22.         operation: INSERT_BEFORE 
  23.         value: 
  24.           name: envoy.filters.http.compressor 
  25.           typed_config: 
  26.             "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor 
  27.             response_direction_config: 
  28.               common_config: 
  29.                 min_content_length: 100 
  30.                 content_type: 
  31.                 - 'text/html' 
  32.             compressor_library: 
  33.               name: text_optimized 
  34.               typed_config: 
  35.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip 
  36.                 memory_level: 9 
  37.                 window_bits: 15 
  38.                 compression_level: BEST_COMPRESSION 
  39.                 compression_strategy: DEFAULT_STRATEGY 
  40. EOF 
  41.  
  42. kubectl apply -f ef-ingressgateway-http-filter-compression-2.yaml  -n istio-system 

提高参数后传输数据从1.9k下降到1.8k

2.1.3最快压缩速度

  1. cat << EOF > ef-ingressgateway-http-filter-compression-3.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   namespace: istio-system 
  6.   name: apply-to 
  7. spec: 
  8.   workloadSelector: 
  9.     labels: 
  10.       istio: ingressgateway 
  11.   configPatches: 
  12.     - applyTo: HTTP_FILTER 
  13.       match: 
  14.         context: GATEWAY 
  15.         listener: 
  16.           filterChain: 
  17.             filter: 
  18.               name: envoy.filters.network.http_connection_manager 
  19.               subFilter: 
  20.                 name: envoy.filters.http.router 
  21.       patch: 
  22.         operation: INSERT_BEFORE 
  23.         value: 
  24.           name: envoy.filters.http.compressor 
  25.           typed_config: 
  26.             "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor 
  27.             response_direction_config: 
  28.               common_config: 
  29.                 min_content_length: 100 
  30.                 content_type: 
  31.                 - 'text/html' 
  32.             compressor_library: 
  33.               name: text_optimized 
  34.               typed_config: 
  35.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip 
  36.                 memory_level: 9 
  37.                 window_bits: 15 
  38.                 compression_level: BEST_SPEED 
  39.                 compression_strategy: DEFAULT_STRATEGY 
  40. EOF 
  41.  
  42. kubectl apply -f ef-ingressgateway-http-filter-compression-3.yaml  -n istio-system 

BEST_SPEED传输大小从1.8k提升到1.9k

2.1.4请求启用压缩

  1. cat << EOF > ef-ingressgateway-http-filter-compression-4.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   namespace: istio-system 
  6.   name: apply-to 
  7. spec: 
  8.   workloadSelector: 
  9.     labels: 
  10.       istio: ingressgateway 
  11.   configPatches: 
  12.     - applyTo: HTTP_FILTER 
  13.       match: 
  14.         context: GATEWAY 
  15.         listener: 
  16.           filterChain: 
  17.             filter: 
  18.               name: envoy.filters.network.http_connection_manager 
  19.               subFilter: 
  20.                 name: envoy.filters.http.router 
  21.       patch: 
  22.         operation: INSERT_BEFORE 
  23.         value: 
  24.           name: envoy.filters.http.compressor 
  25.           typed_config: 
  26.             "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor 
  27.             response_direction_config: 
  28.               common_config: 
  29.                 min_content_length: 100 
  30.                 content_type: 
  31.                 - 'text/html' 
  32.             request_direction_config: 
  33.               common_config: 
  34.                 enabled: 
  35.                   default_value: true 
  36.                   runtime_key: request_compressor_enabled 
  37.             compressor_library: 
  38.               name: text_optimized 
  39.               typed_config: 
  40.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip 
  41.                 memory_level: 9 
  42.                 window_bits: 15 
  43.                 compression_level: BEST_SPEED 
  44.                 compression_strategy: DEFAULT_STRATEGY 
  45. EOF 
  46.  
  47. kubectl apply -f ef-ingressgateway-http-filter-compression-4.yaml  -n istio-system 

request_direction_config配置请求压缩

2.1.5禁用响应压缩,只用请求压缩

  1. cat << EOF > ef-ingressgateway-http-filter-compression-5.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   namespace: istio-system 
  6.   name: apply-to 
  7. spec: 
  8.   workloadSelector: 
  9.     labels: 
  10.       istio: ingressgateway 
  11.   configPatches: 
  12.     - applyTo: HTTP_FILTER 
  13.       match: 
  14.         context: GATEWAY 
  15.         listener: 
  16.           filterChain: 
  17.             filter: 
  18.               name: envoy.filters.network.http_connection_manager 
  19.               subFilter: 
  20.                 name: envoy.filters.http.router 
  21.       patch: 
  22.         operation: INSERT_BEFORE 
  23.         value: 
  24.           name: envoy.filters.http.compressor 
  25.           typed_config: 
  26.             "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor 
  27.             response_direction_config: 
  28.               common_config: 
  29.                 enabled: 
  30.                   default_value: false 
  31.                   runtime_key: response_compressor_enabled 
  32.                 min_content_length: 100 
  33.                 content_type: 
  34.                 - 'text/html' 
  35.             request_direction_config: 
  36.               common_config: 
  37.                 enabled: 
  38.                   default_value: true 
  39.                   runtime_key: request_compressor_enabled 
  40.             compressor_library: 
  41.               name: text_optimized 
  42.               typed_config: 
  43.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip 
  44.                 memory_level: 9 
  45.                 window_bits: 15 
  46.                 compression_level: BEST_SPEED 
  47.                 compression_strategy: DEFAULT_STRATEGY 
  48. EOF 
  49.  
  50. kubectl apply -f ef-ingressgateway-http-filter-compression-5.yaml  -n istio-system 

2.2mesh内部配置压缩

reviews,ratings之间启用压缩

  1. cat << EOF > ef-ratings-http-filter-compression.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   name: ratings 
  6. spec: 
  7.   workloadSelector: 
  8.     labels: 
  9.       app: ratings 
  10.   configPatches: 
  11.     - applyTo: HTTP_FILTER 
  12.       match: 
  13.         context: SIDECAR_INBOUND 
  14.         listener: 
  15.           filterChain: 
  16.             filter: 
  17.               name: envoy.filters.network.http_connection_manager 
  18.               subFilter: 
  19.                 name: envoy.filters.http.router 
  20.       patch: 
  21.         operation: INSERT_BEFORE 
  22.         value: 
  23.           name: envoy.filters.http.compressor 
  24.           typed_config: 
  25.             "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor 
  26.             response_direction_config: 
  27.               common_config: 
  28.                 enabled: 
  29.                   default_value: true 
  30.                   runtime_key: response_compressor_enabled 
  31.                 min_content_length: 10 
  32.                 content_type: 
  33.                 - 'application/json' 
  34.             request_direction_config: 
  35.               common_config: 
  36.                 enabled: 
  37.                   default_value: true 
  38.                   runtime_key: request_compressor_enabled 
  39.             compressor_library: 
  40.               name: text_optimized 
  41.               typed_config: 
  42.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip 
  43.                 memory_level: 9 
  44.                 window_bits: 12 
  45.                 compression_level: BEST_SPEED 
  46.                 compression_strategy: DEFAULT_STRATEGY 
  47. EOF 
  48.  
  49. kubectl apply -f ef-ratings-http-filter-compression.yaml  -n istio 

raings启用了压缩

reviews启用解压缩

  1. cat << EOF > ef-reviews-http-filter-compression.yaml  
  2. apiVersion: networking.istio.io/v1alpha3 
  3. kind: EnvoyFilter 
  4. metadata: 
  5.   name: reviews 
  6. spec: 
  7.   workloadSelector: 
  8.     labels: 
  9.       app: reviews 
  10.   configPatches: 
  11.     - applyTo: HTTP_FILTER 
  12.       match: 
  13.         context: SIDECAR_OUTBOUND 
  14.         listener: 
  15.           filterChain: 
  16.             filter: 
  17.               name: envoy.filters.network.http_connection_manager 
  18.               subFilter: 
  19.                 name: envoy.filters.http.router 
  20.       patch: 
  21.         operation: INSERT_BEFORE 
  22.         value: 
  23.           name: envoy.filters.http.decompressor 
  24.           typed_config: 
  25.             "@type": type.googleapis.com/envoy.extensions.filters.http.decompressor.v3.Decompressor 
  26.             response_direction_config: 
  27.               common_config: 
  28.                 enabled: 
  29.                   default_value: true 
  30.                   runtime_key: response_decompressor_enabled 
  31.             request_direction_config: 
  32.               common_config: 
  33.                 enabled: 
  34.                   default_value: false 
  35.                   runtime_key: request_decompressor_enabled 
  36.             decompressor_library: 
  37.               name: text_optimized 
  38.               typed_config: 
  39.                 "@type": type.googleapis.com/envoy.extensions.compression.gzip.decompressor.v3.Gzip 
  40.                 chunk_size: 4096 
  41.                 window_bits: 15 
  42. EOF 
  43.  
  44. kubectl apply -f ef-reviews-http-filter-compression.yaml  -n istio 

窗口位大小,值从9到15,解压的窗口位大小需要大于等于压缩的窗口位大小。默认值是15

块大小,用于输出缓存,默认值是4096

value must be inside range [4096, 65536]

本文转载自微信公众号「k8s实战」,可以通过以下二维码关注。转载本文请联系k8s实战公众号。

 

来源:k8s实战内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯