patokan konsumsi CPU pikeun Istio na Linkerd

patokan konsumsi CPU pikeun Istio na Linkerd

perkenalan

Kami asup Shopify mimiti nyebarkeun Istio salaku bolong jasa. Sacara prinsip, sadayana henteu kunanaon, kecuali hiji hal: éta mahal.

В tolok ukur diterbitkeun pikeun Istio nyebutkeun:

Kalayan Istio 1.1, proksi nganggo kirang langkung 0,6 vCPU (inti virtual) per 1000 pamundut per detik.

Pikeun wewengkon kahiji dina bolong jasa (2 proxy dina saban gigir sambungan), urang bakal boga 1200 cores ngan pikeun proxy, dina laju hiji juta requests per detik. Numutkeun kana kalkulator biaya Google, éta kirang langkung $ 40 / bulan / inti pikeun konfigurasi. n1-standard-64, nyaeta, wewengkon ieu nyalira bakal ngarugikeun urang leuwih ti 50 sarébu dollar per bulan pikeun 1 juta requests per detik.

Ivan Sim (Ivan Sim) visually dibandingkeun jasa bolong telat taun ka tukang sareng jangji anu sami pikeun mémori sareng prosésor, tapi éta henteu hasil:

Tétéla, values-istio-test.yaml sacara serius bakal ningkatkeun paménta CPU. Mun Kuring geus rengse math abdi leres, anjeun peryogi ngeunaan 24 cores CPU pikeun panel kontrol jeung 0,5 CPU pikeun tiap proxy. Abdi henteu gaduh seueur. Kuring bakal ngulang tés nalika langkung seueur sumber dialokasikeun ka kuring.

Abdi hoyong ningali sorangan kumaha kinerja Istio sami sareng bolong jasa open source anu sanés: Linkerd.

Jasa pamasangan bolong

Anu mimiti, kuring dipasang dina klaster supergloo:

$ supergloo init
installing supergloo version 0.3.12
using chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.12.tgz
configmap/sidecar-injection-resources created
serviceaccount/supergloo created
serviceaccount/discovery created
serviceaccount/mesh-discovery created
clusterrole.rbac.authorization.k8s.io/discovery created
clusterrole.rbac.authorization.k8s.io/mesh-discovery created
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding created
deployment.extensions/supergloo created
deployment.extensions/discovery created
deployment.extensions/mesh-discovery created
install successful!

Kuring nganggo SuperGloo sabab ngajadikeun bootstrapping bolong jasa langkung gampang. Abdi henteu kedah ngalakukeun seueur. Kami henteu nganggo SuperGloo dina produksi, tapi éta idéal pikeun tugas sapertos kitu. Kuring kedah nganggo sacara harfiah sababaraha paréntah pikeun tiap bolong jasa. Kuring nganggo dua klaster pikeun ngasingkeun - masing-masing pikeun Istio sareng Linkerd.

Percobaan ieu dilakukeun dina Google Kubernetes Engine. Kuring dipaké Kubernetes 1.12.7-gke.7 sarta kumpulan titik n1-standard-4 kalawan skala titik otomatis (minimal 4, maksimum 16).

Teras kuring dipasang duanana jasa meshes tina garis paréntah.

Linkerd munggaran:

$ supergloo install linkerd --name linkerd
+---------+--------------+---------+---------------------------+
| INSTALL |     TYPE     | STATUS  |          DETAILS          |
+---------+--------------+---------+---------------------------+
| linkerd | Linkerd Mesh | Pending | enabled: true             |
|         |              |         | version: stable-2.3.0     |
|         |              |         | namespace: linkerd        |
|         |              |         | mtls enabled: true        |
|         |              |         | auto inject enabled: true |
+---------+--------------+---------+---------------------------+

Lajeng Istio:

$ supergloo install istio --name istio --installation-namespace istio-system --mtls=true --auto-inject=true
+---------+------------+---------+---------------------------+
| INSTALL |    TYPE    | STATUS  |          DETAILS          |
+---------+------------+---------+---------------------------+
| istio   | Istio Mesh | Pending | enabled: true             |
|         |            |         | version: 1.0.6            |
|         |            |         | namespace: istio-system   |
|         |            |         | mtls enabled: true        |
|         |            |         | auto inject enabled: true |
|         |            |         | grafana enabled: true     |
|         |            |         | prometheus enabled: true  |
|         |            |         | jaeger enabled: true      |
+---------+------------+---------+---------------------------+

Kacilakaan-loop nyandak sababaraha menit, lajeng panel kontrol stabilized.

(Catetan: SuperGloo ngan ngarojong Istio 1.0.x pikeun ayeuna. Kuring ngulang percobaan kalawan Istio 1.1.3, tapi teu aya bewara béda noticeable.)

Nyetél Istio Deployment Otomatis

Pikeun ngadamel Istio masang Envoy sidecar, kami nganggo injector sidecar − MutatingAdmissionWebhook. Kami moal ngobrol ngeunaan éta dina tulisan ieu. Hayu atuh ngan nyebutkeun yén ieu téh controller nu ngawas aksés sadaya pods anyar jeung dinamis nambahkeun sidecar jeung initContainer, nu tanggung jawab tugas. iptables.

Kami di Shopify nyerat controller aksés urang sorangan pikeun nerapkeun sidecars, tapi pikeun patokan ieu kuring nganggo controller anu hadir sareng Istio. Controller nyuntik sidecars sacara standar nalika aya potong kompas dina namespace istio-injection: enabled:

$ kubectl label namespace irs-client-dev istio-injection=enabled
namespace/irs-client-dev labeled

$ kubectl label namespace irs-server-dev istio-injection=enabled
namespace/irs-server-dev labeled

Nyetel deployment Linkerd otomatis

Pikeun nyetél Linkerd sidecar embedding, kami nganggo annotations (kuring ditambahkeun sacara manual via kubectl edit):

metadata:
  annotations:
    linkerd.io/inject: enabled

$ k edit ns irs-server-dev 
namespace/irs-server-dev edited

$ k get ns irs-server-dev -o yaml
apiVersion: v1
kind: Namespace
metadata:
  annotations:
    linkerd.io/inject: enabled
  name: irs-server-dev
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

Simulator Kasabaran Istio Sesar

Kami ngawangun simulator kasabaran kasalahan anu disebut Istio pikeun ékspérimén sareng lalu lintas anu unik pikeun Shopify. Kami peryogi alat pikeun nyiptakeun topologi khusus anu bakal ngawakilan bagian khusus tina grafik jasa kami, dikonpigurasi sacara dinamis pikeun modél beban kerja khusus.

Infrastruktur Shopify aya dina beban beurat nalika penjualan lampu kilat. Dina waktos anu sami, Shopify nyarankeun sellers nahan jualan misalna leuwih sering. konsumén badag kadang ngingetkeun ngeunaan hiji diobral flash rencanana. Batur ngalaksanakeun éta teu disangka-sangka pikeun urang iraha waé siang atanapi wengi.

Kami hoyong simulator kalenturan kami pikeun modél alur kerja anu cocog sareng topologi sareng beban kerja anu parantos ngaleuleuskeun infrastruktur Shopify dina jaman baheula. Tujuan utama ngagunakeun bolong jasa nyaéta yén urang peryogi réliabilitas sareng kasabaran kasalahan dina tingkat jaringan, sareng penting pikeun urang yén bolong jasa sacara efektif ngatasi beban anu sateuacana ngaganggu jasa.

Dina manah simulator kasabaran sesar mangrupakeun titik worker, nu tindakan minangka titik layanan bolong. Node worker tiasa dikonpigurasi sacara statik nalika ngamimitian atanapi sacara dinamis via REST API. Kami nganggo konfigurasi dinamis titik pagawé pikeun nyiptakeun alur kerja dina bentuk tés régrési.

Ieu conto prosés sapertos kieu:

  • Urang ngajalankeun 10 server salaku bar jasa nu balik respon a 200/OK saatos 100 ms.
  • Urang ngajalankeun 10 klien - unggal ngirimkeun 100 requests per detik ka bar.
  • Unggal 10 detik urang nyabut 1 server na monitor kasalahan 5xx dina klien.

Dina ahir alur kerja, urang pariksa log sareng métrik sareng pariksa naha tés lulus. Ku cara ieu urang diajar ngeunaan kinerja bolong jasa urang sareng ngajalankeun uji régrési pikeun nguji asumsi urang ngeunaan kasabaran kasalahan.

(Catetan: Kami mikir ngeunaan sumber terbuka simulator kasabaran kasalahan Istio, tapi henteu acan siap.)

Istio sesar kasabaran simulator pikeun patokan bolong jasa

Kami netepkeun sababaraha titik kerja simulator:

  • irs-client-loadgen: 3 réplika nu ngirim 100 requests per detik per irs-client.
  • irs-client: 3 réplika nu narima pamundut nu, antosan 100ms terus pamundut ka irs-server.
  • irs-server: 3 réplika nu balik 200/OK saatos 100 ms.

Kalayan konfigurasi ieu, urang tiasa ngukur aliran lalu lintas anu stabil antara 9 titik tungtung. Sidecar di irs-client-loadgen и irs-server narima 100 requests per detik, jeung irs-client - 200 (asup jeung kaluar).

Urang ngalacak pamakéan sumberdaya ngaliwatan DataDogsabab urang teu boga klaster Prometheus.

Hasil

Panel kontrol

Kahiji, urang nalungtik konsumsi CPU.

patokan konsumsi CPU pikeun Istio na Linkerd
Panel kontrol Linkerd ~ 22 millicore

patokan konsumsi CPU pikeun Istio na Linkerd
Panel kontrol Istio: ~ 750 millicore

Panel kontrol Istio ngagunakeun kira-kira 35 kali leuwih sumberdaya CPUti Linkerd. Tangtu, sagalana geus dipasang sacara standar, sarta istio-telemétri meakeun loba sumberdaya processor dieu (bisa ditumpurkeun ku nganonaktipkeun sababaraha fungsi). Lamun urang nyabut komponén ieu, urang masih meunang leuwih ti 100 millicores, éta 4 kali langkungti Linkerd.

Sidecar proxy

Urang lajeng nguji pamakéan proxy a. Kedah aya hubungan linier kalawan jumlah requests, tapi pikeun tiap sidecar aya sababaraha overhead nu mangaruhan kurva.

patokan konsumsi CPU pikeun Istio na Linkerd
Linkerd: ~100 milicores pikeun irs-klien, ~50 milicores pikeun irs-klien-loadgen

Hasilna katingali logis, sabab proxy klien nampi dua kali langkung seueur lalulintas tibatan proxy loadgen: pikeun unggal pamundut kaluar ti loadgen, klien ngagaduhan hiji asup sareng hiji kaluar.

patokan konsumsi CPU pikeun Istio na Linkerd
Istio / Utusan: ~ 155 milicores pikeun irs-klien, ~ 75 milicores pikeun irs-klien-loadgen

Kami ningali hasil anu sami pikeun sidecars Istio.

Tapi sacara umum, proxy Istio / Utusan meakeun kira-kira 50% leuwih sumberdaya CPUti Linkerd.

Kami ningali skéma anu sami dina sisi server:

patokan konsumsi CPU pikeun Istio na Linkerd
Linkerd: ~ 50 millicore pikeun irs-server

patokan konsumsi CPU pikeun Istio na Linkerd
Istio / Utusan: ~ 80 millicore pikeun irs-server

Di sisi server, sidecar Istio / Utusan meakeun kira-kira 60% leuwih sumberdaya CPUti Linkerd.

kacindekan

Proksi Istio Envoy nganggo 50+% langkung seueur CPU tibatan Linkerd dina beban kerja simulasi urang. Panel kontrol Linkerd nganggo sumber daya anu langkung saeutik tibatan Istio, khususna pikeun komponén inti.

Kami masih mikir ngeunaan kumaha carana ngirangan biaya ieu. Upami anjeun gaduh ide, mangga bagikeun!

sumber: www.habr.com

Tambahkeun komentar