Istio Circuit Breaker: mateni kontaner sing rusak

Preian wis rampung lan kita bali karo kiriman kapindho ing seri Istio Service Mesh.

Istio Circuit Breaker: mateni kontaner sing rusak

Topik saiki yaiku Circuit Breaker, sing diterjemahake menyang teknik listrik Rusia tegese "pemutus sirkuit", kanthi istilah umum - "pemutus sirkuit". Mung ing Istio mesin iki ora medhot sirkuit shorted utawa overloaded, nanging kontaner rusak.

Carane iki kudu bisa saenipun

Nalika layanan mikro dikelola dening Kubernetes, contone ing platform OpenShift, kanthi otomatis munggah lan mudhun gumantung saka beban. Amarga layanan mikro mbukak ing pods, bisa uga ana pirang-pirang conto layanan mikro kontainer ing siji titik pungkasan, lan Kubernetes bakal nuntun panjaluk lan mbukak keseimbangan ing antarane. Lan - saenipun - kabeh iki kudu bisa sampurna.

Kita elinga yen microservices cilik lan ora suwe. Ephemerality, sing ing kene tegese gampang katon lan ilang, asring disepelekake. Lair lan pati saka conto liyane saka microservice ing pod iku cukup samesthine, OpenShift lan Kubernetes nangani iki uga, lan kabeh dianggo apik - nanging maneh ing teori.

Cara kerjane

Saiki bayangake yen conto tartamtu saka microservice, yaiku, wadhah, wis ora bisa digunakake: salah siji ora nanggapi (error 503), utawa, sing luwih ora nyenengake, nanggapi, nanging alon-alon. Ing tembung liyane, dadi glitchy utawa ora nanggapi panjalukan, nanging ora otomatis dibusak saka blumbang. Apa sing kudu ditindakake ing kasus iki? Kanggo nyoba maneh? Apa aku kudu mbusak saka rencana nuntun? Lan apa tegese "alon banget" - pira jumlahe, lan sapa sing nemtokake? Mungkin mung ngaso lan nyoba maneh mengko? Yen ngono, mengko pira?

Apa Pool Ejection ing Istio

Lan ing kene Istio teka kanggo ngluwari karo mesin pangayoman Circuit Breaker sawijining, kang sementara mbusak kontaner rusak saka nuntun lan mbukak wawas blumbang sumber, ngleksanakake prosedur Pool Ejection.

Nggunakake strategi deteksi outlier, Istio ndeteksi polong kurva sing metu saka baris lan mbusak saka blumbang sumber kanggo wektu tartamtu, disebut jendhela turu.

Kanggo nuduhake cara kerjane ing Kubernetes ing platform OpenShift, ayo miwiti karo gambar saka microservices sing biasane digunakake saka conto ing gudang. Demo Pangembang Red Hat. Kene kita duwe rong pods, v1 lan v2, saben mbukak siji wadhah. Nalika aturan routing Istio ora digunakake, Kubernetes dadi standar kanggo rute round-robin sing seimbang:

Istio Circuit Breaker: mateni kontaner sing rusak

Nyiyapake kanggo kacilakan

Sadurunge nindakake Pool Ejection, sampeyan kudu nggawe aturan rute Istio. Contone, kita pengin nyebarake panjaluk antarane polong kanthi rasio 50/50. Kajaba iku, kita bakal nambah jumlah kontaner v2 saka siji dadi loro, kaya iki:

oc scale deployment recommendation-v2 --replicas=2 -n tutorial

Saiki kita nyetel aturan nuntun supaya lalu lintas disebarake ing antarane polong kanthi rasio 50/50.

Istio Circuit Breaker: mateni kontaner sing rusak
Iki minangka asil saka aturan iki:

Istio Circuit Breaker: mateni kontaner sing rusak
Sampeyan bisa nemokake fault karo kasunyatan sing layar iki ora 50/50, nanging 14: 9, nanging liwat wektu kahanan bakal nambah.

Nggawe kesalahan

Saiki ayo mateni salah siji saka rong wadhah v2 supaya kita duwe siji wadhah v1 sing sehat, siji wadhah v2 sing sehat lan siji wadhah v2 sing rusak:

Istio Circuit Breaker: mateni kontaner sing rusak

Ndandani kesalahan

Dadi, kita duwe wadhah sing rusak, lan wektune kanggo Ejection Pool. Nggunakake config banget prasaja, kita bakal ngilangi wadhah gagal iki saka sembarang rencana nuntun kanggo 15 detik ing pangarep-arep sing bakal bali menyang negara sehat (salah siji miwiti maneh utawa mulihake kinerja). Iki minangka konfigurasi iki lan asil kerjane:

Istio Circuit Breaker: mateni kontaner sing rusak
Istio Circuit Breaker: mateni kontaner sing rusak
Nalika sampeyan bisa ndeleng, wadhah v2 gagal maneh digunakake kanggo nuntun panjalukan amarga wis dibusak saka blumbang. Nanging sawise 15 detik bakal kanthi otomatis bali menyang blumbang. Bener, kita mung nuduhake cara kerja Ejection Pool.

Ayo miwiti mbangun arsitektur

Pool Ejection, digabungake karo kemampuan ngawasi Istio kang, ngijini sampeyan kanggo miwiti mbangun framework kanggo otomatis ngganti kontaner rusak kanggo ngurangi, yen ora ngilangi, downtime lan gagal.
 
NASA duwe semboyan banter - Gagal Ora Pilihan, sing penulise dianggep dadi direktur penerbangan Gene Kranz. Bisa diterjemahake menyang basa Rusia minangka "Gagal ora dadi pilihan," lan tegese kabeh bisa ditindakake yen sampeyan duwe kekarepan sing cukup. Nanging, ing urip nyata, kegagalan ora mung kedadeyan, ora bisa ditindakake, ing endi wae lan ing kabeh. Lan carane menehi hasil karo wong-wong mau ing cilik saka microservices? Ing mratelakake panemume, luwih becik ora ngandelake kekarepan, nanging ing kemampuan wadhah, Kubernetes, Red Hat OpenShiftlan Istio.

Istio, kaya sing kita tulis ing ndhuwur, ngetrapake konsep pemutus sirkuit, sing wis kabukten kanthi apik ing jagad fisik. Lan kaya pemutus sirkuit listrik mateni bagean masalah saka sirkuit, piranti lunak Istio Circuit Breaker mbukak sambungan antarane aliran panjalukan lan wadhah masalah nalika ana sing salah karo titik pungkasan, umpamane, nalika server nabrak utawa wiwit nabrak. alon mudhun.

Menapa malih, ing kasus kaloro mung ana masalah liyane, amarga rem saka siji wadhah ora mung nimbulaké cascade telat ing layanan ngakses lan, minangka asil, nyuda kinerja sistem minangka kabèh, nanging uga ngasilake bola-bali. panjalukan kanggo layanan wis alon-mlaku, kang mung aggravates kahanan .

Circuit Breaker ing teori

Circuit Breaker minangka proxy sing ngontrol aliran panjalukan menyang titik pungkasan. Nalika titik iki mandheg utawa, gumantung saka setelan sing ditemtokake, wiwit alon-alon, proxy ngilangi sambungan karo wadhah. Lalu lintas banjur dialihake menyang wadhah liyane, mung amarga keseimbangan muatan. Sambungan tetep mbukak kanggo jendhela turu tartamtu, ngandika rong menit, lan banjur dianggep setengah mbukak. Nyoba kanggo ngirim panjalukan sabanjurΓ© nemtokake negara luwih saka sambungan. Yen kabeh iku OK karo layanan, sambungan bali menyang kondisi digunakake lan maneh dadi ditutup. Yen isih ana sing salah karo layanan kasebut, sambungan kasebut pedhot lan jendhela turu diaktifake maneh. Mangkene tampilan diagram negara Circuit Breaker sing disederhanakake:

Istio Circuit Breaker: mateni kontaner sing rusak
Penting kanggo dicathet ing kene yen kabeh iki kedadeyan ing tingkat, supaya bisa ngomong, arsitektur sistem. Dadi ing sawetara titik, sampeyan kudu ngajar aplikasi sampeyan supaya bisa nggarap Circuit Breaker, kayata menehi nilai standar kanggo nanggepi utawa, yen bisa, ora nggatekake anane layanan kasebut. Pola bulkhead digunakake kanggo iki, nanging ngluwihi ruang lingkup artikel iki.

Circuit Breaker ing laku

Contone, kita bakal mbukak rong versi microservice rekomendasi ing OpenShift. Versi 1 bakal bisa digunakake kanthi becik, nanging ing v2 kita bakal nggawe wektu tundha kanggo simulasi slowdowns ing server. Kanggo ndeleng asil, gunakake alat kasebut pengepungan:

siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io

Istio Circuit Breaker: mateni kontaner sing rusak
Kabeh misale jek bisa, nanging apa biaya? Sepisanan, kita duwe kasedhiyan 100%, nanging deleng kanthi cetha - durasi transaksi maksimal nganti 12 detik. Iki jelas dadi bottleneck lan kudu ditambahi.

Kanggo nindakake iki, kita bakal nggunakake Istio kanggo ngilangi telpon kanggo alon-alon wadhah. Iki minangka konfigurasi sing cocog nggunakake Circuit Breaker:

Istio Circuit Breaker: mateni kontaner sing rusak
Ing baris pungkasan karo parameter httpMaxRequestsPerConnection sinyal sing sambungan karo kudu pedhot nalika nyoba kanggo nggawe liyane - liya - sambungan saliyane sing wis ana. Wiwit wadhah kita nyimulasi layanan sing alon, kahanan kaya ngono bakal muncul sacara periodik, banjur Istio bakal ngasilake kesalahan 503, nanging iki bakal ditampilake pengepungan:

Istio Circuit Breaker: mateni kontaner sing rusak

OK, kita duwe Circuit Breaker, apa sabanjure?

Dadi, kita nindakake mateni otomatis tanpa ndemek kode sumber layanan kasebut. Nggunakake Circuit Breaker lan prosedur Pool Ejection diterangake ing ndhuwur, kita bisa mbusak wadhah brake saka blumbang sumber nganti padha bali menyang normal, lan mriksa status ing frekuensi tartamtu - ing conto kita, iki rong menit (parameter sleepWindow).

Elinga yen kemampuan aplikasi kanggo nanggapi kesalahan 503 isih disetel ing tingkat kode sumber. Ana akeh Sastranegara kanggo nggunakake Circuit Breaker, gumantung ing kahanan.

Ing kirim sabanjure: Kita bakal ngomong babagan nelusuri lan ngawasi sing wis dibangun utawa gampang ditambahake menyang Istio, uga cara kanthi sengaja ngenalake kesalahan menyang sistem kasebut.

Source: www.habr.com

Add a comment