Saat layanan mikro berkomunikasi, muatan respons dapat mengonsumsi bandwidth signifikan, terutama untuk konten berbasis teks seperti JSON, HTML, dan CSS. ASMCompressor memungkinkan Anda menambahkan filter kompresi di lapisan proxy sehingga semua layanan berbagi konfigurasi kompresi yang konsisten, alih-alih menerapkan kompresi secara terpisah di setiap bahasa atau framework. Topik ini menjelaskan cara menggunakan ASMCompressor di ASM untuk menentukan pengaturan kompresi pada panggilan antar-layanan.
Prasyarat
Kluster ACK telah ditambahkan ke instans ASM versi 1.21 atau lebih baru. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance dan Upgrade an ASM instance.
The Bookinfo sample application is deployed to the ASM instance.
Istio resources are configured to route traffic between different service versions.
Ikhtisar fitur
Proxy mendukung dua algoritma kompresi: Gzip dan Brotli.
Gzip adalah algoritma kompresi yang banyak digunakan dan didukung oleh banyak server web dan browser, dikenal karena rasio kompresi tinggi dan kecepatan kompresi cepat. Algoritma ini biasanya digunakan untuk mengompresi konten statis maupun dinamis.
Brotli adalah algoritma kompresi lanjutan yang memberikan rasio kompresi lebih tinggi dan kecepatan dekompresi lebih cepat, serta banyak digunakan di web. Brotli biasanya digunakan untuk mengompresi konten statis, seperti file HTML, CSS, dan JavaScript.
Brotli menawarkan rasio kompresi lebih tinggi daripada Gzip, tetapi proses kompresinya mungkin lebih lambat.
Aktifkan dan verifikasi kompresi Gzip
Langkah 1: Catat ukuran respons garis dasar
Dapatkan alamat gerbang masuk.
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
Pada halaman Ingress Gateway, peroleh Service address.
-
Masukkan
http://{ASM_GATEWAY_ADDRESS}/productpagedi bilah alamat browser Anda untuk mengakses aplikasi Bookinfo. Ganti {ASM_GATEWAY_ADDRESS} dengan alamat yang telah Anda peroleh.Buka developer tools browser Anda dan periksa ukuran respons untuk permintaan
productpage.Ukuran respons adalah 5,5 KB.
Langkah 2: Aktifkan kompresi Gzip
Buat file bernama
ingressgateway-gzip.yamldengan konten berikut.Untuk deskripsi bidang-bidangnya, lihat ASMCompressor CRD reference.
Jalankan perintah berikut untuk mengaktifkan kompresi Gzip:
kubectl apply -f ingressgateway-gzip.yaml
Langkah 3: Verifikasi kompresi Gzip
Masukkan
http://{ASM_GATEWAY_ADDRESS}/productpagedi bilah alamat browser Anda untuk mengakses aplikasi Bookinfo.Buka developer tools browser Anda dan periksa ukuran respons untuk permintaan
productpage.Ukuran respons turun dari 5,5 KB menjadi 1,8 KB. Hal ini mengonfirmasi bahwa kompresi Gzip telah diaktifkan.
Langkah 4: Verifikasi kompresi Brotli
Modifikasi VirtualService
bookinfo.Tambahkan konten berikut di bawah
spec.httpdalam file bookinfo.yaml.- directResponse: body: string: >- Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! status: 200 match: - uri: prefix: /helloworldKonten YAML yang telah diperbarui adalah sebagai berikut:
Jalankan perintah berikut untuk menerapkan VirtualService:
kubectl apply -f bookinfo.yaml
Aktifkan kompresi Brotli.
Buat file bernama
ingressgateway-brotli.yamldengan konten berikut.Untuk deskripsi bidang-bidangnya, lihat ASMCompressor CRD reference.
Jalankan perintah berikut untuk mengaktifkan kompresi Brotli:
kubectl apply -f ingressgateway-brotli.yaml
Verifikasi bahwa kompresi Brotli telah diaktifkan.
Jalankan perintah berikut untuk menyimpan respons dari path
/helloworldke fileout.br:curl -I -H "Accept-Encoding: br" http://{ASM_GATEWAY_ADDRESS}/helloworld > out.brInstal Brotli.
macOS: Jalankan perintah
brew install brotliuntuk menginstal.Di Windows, lihat petunjuk instalasi di brotli.
Jalankan perintah
brotliuntuk mendekompresi fileout.br:brotli -d out.brPembuatan file
outyang telah didekompresi dengan konten yang benar mengonfirmasi bahwa kompresi Brotli telah diaktifkan.
Langkah 5: Verifikasi konfigurasi per-route
Setelah konfigurasi pada Langkah 4, kompresi diaktifkan untuk respons di semua path. Anda dapat mengatur IP gateway sebagai variabel lingkungan dan menjalankan perintah berikut:
export ASM_GATEWAY_IP=<your_gateway_ip> curl ${ASM_GATEWAY_IP}/helloworld > helloworld_no_compress.html curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/helloworld > helloworld_compress.html curl ${ASM_GATEWAY_IP}/productpage > productpage_no_compress.html curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/productpage > productpage_compress.htmlJalankan perintah
lsuntuk membandingkan ukuran respons untuk kedua path ini sebelum dan sesudah kompresi:ls -lh total 40 -rw-r--r--@ 1 user staff 37B 5 28 18:16 helloworld_compress.html -rw-r--r--@ 1 user staff 324B 5 28 18:15 helloworld_no_compress.html -rw-r--r--@ 1 user staff 1,2K 5 28 18:17 productpage_compress.html -rw-r--r--@ 1 user staff 5,2K 5 28 18:16 productpage_no_compress.htmlDi VirtualService, tambahkan nama ke route helloworld. File
bookinfo.yamlyang telah dimodifikasi adalah sebagai berikut:Tambahkan konfigurasi per-route ke ASMCompressor dan nonaktifkan kompresi pada route helloworld. ASMCompressor yang telah dimodifikasi adalah sebagai berikut:
apiVersion: istio.alibabacloud.com/v1beta1 kind: ASMCompressor metadata: name: ingressgateway-gzip namespace: istio-system spec: compressor_library: brotli: quality: 5 window_bits: 15 isGateway: true portNumber: 80 request_direction_config: # Nonaktifkan kompresi permintaan. common_config: enabled: default_value: false runtime_key: NOT_EXISTENT_KEY response_direction_config: common_config: content_type: - application/json - text/plain - text/html min_content_length: 100 disable_on_etag_header: true per_route_configs: # Tambahkan konfigurasi per-route. - disabled: true route_match: vhost: route: name: helloworld-route # Masukkan nama route yang dikonfigurasi di VirtualService di sini. workloadSelector: labels: istio: ingressgatewayJalankan perintah berikut untuk memverifikasi bahwa kompresi dinonaktifkan untuk respons dari path
/helloworld:curl -H "Accept-Encoding: br" ${ASM_GATEWAY_IP}/helloworld > helloworld_route_disabled.htmlJalankan kembali perintah
lsuntuk memeriksa ukuran respons saat ini dari path /helloworld.ls -lh total 48 -rw-r--r--@ 1 user staff 37B 5 28 18:16 helloworld_compress.html -rw-r--r--@ 1 user staff 324B 5 28 18:15 helloworld_no_compress.html -rw-r--r--@ 1 user staff 324B 5 28 19:29 helloworld_route_disabled.html -rw-r--r--@ 1 user staff 1,3K 5 28 19:30 productpage_compress.html -rw-r--r--@ 1 user staff 5,2K 5 28 18:16 productpage_no_compress.htmlHal ini mengonfirmasi bahwa pengaturan kompresi tingkat route berfungsi sebagaimana mestinya.