以Kubernetes sidecar方式部署Nginx: 提供更好的Web性能


Web server's gzip

Web服務開啟數據壓縮,有利於節省帶寬。服務器根據客戶端請求頭所帶的Accept-Encoding判斷是否需要對返回數據進行壓縮,通常支持的壓縮格式是gzip。

應用gzip or Nginx gzip

開發人員可以選擇在Web framework中開發一些middleware來實現Gzip,也可以選擇使用Nginx gzip,將所有gzip放在nginx中完成。

放在nginx中實現的優勢是nginx中gzip性能優秀,能很大程度地減少gzip帶來的消耗,像Golang中系統自帶庫中實現的gzip性能上相比nginx就差很多,並且需要使用對象池進行優化,避免每次創建gzip對象帶來的性能損耗,在CPU和內存上占用較大。

使用Nginx gzip替代應用gzip

如果使用Nginx實現的gzip,那么部署的時候可以有幾種方案。

  1. 集中式nginx集群
    nginx集中部署,通過配置反向代理服務各種應用,優勢是部署方便,集中管理。劣勢是更新路由也是牽一發動全身,並且需要及時拓容。

  2. 每個實例搭配nginx
    原本對外暴露的應用現在通過nginx代理,1:1的方式部署,不用擔心拓容的問題。需要解決的就是如何保證它們打包部署。

Sidecar in Kubernetes

這里討論Kubernetes中部署Web服務的情況,遇到剛才的方案二,可以在Kubernetes中找到非常匹配的部署方法。

Kubernetes中最小部署單位稱為Pod,Pod中可以部署1個以上的功能緊密聯系的容器,並且它們共享網絡、磁盤,也就是它們能通過localhost:port訪問到彼此,那以上的情況nginx作為gzip功能可以說和后端應用是緊密結合,所以可以以sidecar的形式部署。

Nginx配置

如果你的應用監聽在8080端口,nginx監聽在8090,可以如下配置

/etc/nginx/site.conf
user  nginx;
worker_processes  1;

events {
  worker_connections  1024;
}

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile        on;

  keepalive_timeout  65;

  gzip on;
  gzip_min_length    256;
  gzip_types application/javascript application/json text/css text/plain;

  include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/site.conf
server {
  listen 8090;

  location / {
      proxy_pass              http://127.0.0.1:8088/;
      proxy_set_header Host   $http_host;
  }
}

參考

  1. Use of pods
  2. Nginx gzip
  3. HTTP Accept-Encoding


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM