perkenalan
Kami asup
В
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 (
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:
Jasa pamasangan bolong
Anu mimiti, kuring dipasang dina klaster
$ 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
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 a200/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 perirs-client
.irs-client
: 3 réplika nu narima pamundut nu, antosan 100ms terus pamundut kairs-server
.irs-server
: 3 réplika nu balik200/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
Hasil
Panel kontrol
Kahiji, urang nalungtik konsumsi CPU.
Panel kontrol Linkerd ~ 22 millicore
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.
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.
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:
Linkerd: ~ 50 millicore pikeun irs-server
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