Istio Circuit Breaker: nganonaktipkeun peti lepat

Liburan parantos réngsé sareng kami uih deui sareng pos kadua kami dina séri Istio Service Mesh.

Istio Circuit Breaker: nganonaktipkeun peti lepat

Topik dinten ieu nyaéta Circuit Breaker, anu ditarjamahkeun kana téknik listrik Rusia hartosna "pemutus sirkuit", dina basa umum - "pemutus sirkuit". Ngan dina Istio mesin ieu teu megatkeun sirkuit shorted atanapi overloaded, tapi peti faulty.

Kumaha ieu kedah dianggo idéal

Nalika microservices dikokolakeun ku Kubernetes, contona dina platform OpenShift, aranjeunna otomatis skala luhur jeung ka handap gumantung kana beban. Kusabab microservices dijalankeun dina pods, tiasa aya sababaraha instansi microservice containerized dina hiji titik tungtung, sarta Kubernetes bakal ruteu requests sarta kasaimbangan beban antara aranjeunna. Sareng - idéal - sadayana ieu kedah dianggo sampurna.

Urang émut yén microservices leutik sareng ephemeral. Ephemerality, nu di dieu hartina betah muncul jeung ngiles, mindeng underestimated. Lahirna sareng pupusna conto microservice anu sanés dina pod mangrupikeun hal anu dipiharep, OpenShift sareng Kubernetes nanganan ieu ogé, sareng sadayana tiasa dianggo - tapi deui dina téori.

Kumaha bener jalanna

Ayeuna bayangkeun yén conto spésifik microservice, nyaéta wadahna, janten teu tiasa dianggo: boh henteu ngaréspon (kasalahan 503), atanapi, anu langkung pikaresepeun, ngaréspon, tapi lalaunan teuing. Kalayan kecap séjén, eta janten glitchy atanapi henteu ngabales requests, tapi teu otomatis dikaluarkeun tina kolam renang nu. Naon anu kudu dipigawé dina hal ieu? Pikeun nyobaan deui? Naha kuring kedah ngahapus tina skéma routing? Sareng naon hartosna "lambat teuing" - sabaraha jumlahna, sareng saha anu nangtukeun aranjeunna? Meureun ngan masihan putus jeung cobian deui engké? Lamun kitu, sabaraha engké?

Naon Pool Ejection di Istio

Sarta di dieu Istio datang ka nyalametkeun kalayan mesin panyalindungan Circuit breaker na, nu samentara miceun peti faulty tina routing jeung beban balancing sumberdaya kolam renang, ngalaksanakeun prosedur Pool Ejection.

Ngagunakeun strategi deteksi outlier, Istio ngadeteksi polong kurva anu kaluar tina garis tur miceun aranjeunna tina kolam renang sumberdaya pikeun waktu nu tangtu, disebut "jandela sare".

Pikeun nunjukkeun kumaha ieu jalanna dina Kubernetes dina platform OpenShift, hayu urang mimitian ku layar layar microservices anu biasana dianggo tina conto dina gudang. Demo pamekar Red Hat. Di dieu urang boga dua pods, v1 jeung v2, unggal ngajalankeun hiji wadah. Lamun aturan routing Istio teu dipaké, Kubernetes ingkar mun saimbang merata round-robin routing:

Istio Circuit Breaker: nganonaktipkeun peti lepat

Nyiapkeun pikeun kagagalan

Sateuacan ngalakukeun Pool Ejection, anjeun kedah nyiptakeun aturan rute Istio. Anggap urang hoyong ngadistribusikaeun pamundut antara pods dina nisbah 50/50. Salaku tambahan, urang bakal ningkatkeun jumlah wadah v2 tina hiji ka dua, sapertos kieu:

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

Ayeuna urang nyetel aturan routing supados lalulintas disebarkeun antara pods dina nisbah 50/50.

Istio Circuit Breaker: nganonaktipkeun peti lepat
Ieu kumaha hasil tina aturan ieu sapertos kieu:

Istio Circuit Breaker: nganonaktipkeun peti lepat
Anjeun tiasa mendakan lepat sareng kanyataan yén layar ieu sanés 50/50, tapi 14: 9, tapi kana waktosna kaayaan bakal ningkat.

Nyieun glitch a

Ayeuna hayu urang nganonaktipkeun salah sahiji tina dua wadah v2 supados urang gaduh hiji wadah v1 anu séhat, hiji wadah v2 anu séhat sareng hiji wadah v2 anu lepat:

Istio Circuit Breaker: nganonaktipkeun peti lepat

Ngalereskeun glitch

Janten, urang gaduh wadah anu lepat, sareng waktosna pikeun Pool Ejection. Ngagunakeun config basajan pisan, urang bakal ngaluarkeun wadahna gagal ieu tina sagala skéma routing pikeun 15 detik dina harepan nu bakal balik deui ka kaayaan cageur (boh balikan deui atawa balikkeun kinerja). Ieu kumaha config ieu sareng hasil karyana:

Istio Circuit Breaker: nganonaktipkeun peti lepat
Istio Circuit Breaker: nganonaktipkeun peti lepat
Sakumaha anjeun tiasa tingali, wadahna v2 gagal geus euweuh dipaké pikeun requests routing sabab geus dikaluarkeun tina kolam renang nu. Tapi sanggeus 15 detik eta otomatis bakal balik deui ka kolam renang. Sabenerna, kami ngan nunjukkeun kumaha Pool Ejection jalan.

Hayu urang mimitian ngawangun arsitektur

Pool Ejection, digabungkeun sareng kamampuan ngawaskeun Istio, ngamungkinkeun anjeun pikeun ngamimitian ngawangun kerangka pikeun otomatis ngagentos wadah anu lepat pikeun ngirangan, upami henteu ngaleungitkeun, downtime sareng gagal.

NASA gaduh motto anu nyaring - Gagal Henteu Pilihan, panulis anu dianggap diréktur penerbangan Gene Kranz. Éta tiasa ditarjamahkeun kana Rusia salaku "Kagagalan sanés pilihan," sareng hartosna di dieu nyaéta yén sadayana tiasa dilakukeun upami anjeun gaduh karep cukup. Nanging, dina kahirupan nyata, kagagalan henteu ngan ukur kajantenan, aranjeunna henteu tiasa dihindari, dimana waé sareng dina sagala hal. Na kumaha carana nungkulan aranjeunna dina kasus microservices? Dina pamadegan urang, eta leuwih hade teu ngandelkeun willpower, tapi dina kamampuhan wadahna, Kubernetes, Hat Beureum OpenShiftjeung Istio.

Istio, sakumaha anu urang tulis di luhur, ngalaksanakeun konsép pemutus sirkuit, anu parantos ngabuktikeun dirina ogé di dunya fisik. Sareng sapertos pemutus sirkuit listrik mareuman bagian masalah tina sirkuit, parangkat lunak Istio's Circuit Breaker muka sambungan antara aliran pamundut sareng wadah masalah nalika aya anu salah dina titik tungtung, contona, nalika server nabrak atanapi mimiti. lalaunan.

Leuwih ti éta, dina kasus kadua ngan aya deui masalah, sabab rem tina hiji wadahna teu ngan ngabalukarkeun cascade of telat dina jasa ngakses eta na, salaku hasilna, ngurangan kinerja sistem sakabéhna, tapi ogé ngahasilkeun ulang. requests ka layanan geus slow-ngajalankeun, nu ngan aggravates kaayaan .

Circuit breaker dina téori

Circuit Breaker mangrupikeun proksi anu ngatur aliran pamundut ka titik akhir. Nalika titik ieu lirén damel atanapi, gumantung kana setélan anu ditetepkeun, mimiti ngalambatkeun, proxy ngarobih sambungan sareng wadahna. Lalu lintas teras dialihkeun ka wadah anu sanés, ngan ukur kusabab kasaimbangan beban. Sambungan tetep kabuka pikeun jandela sare nu dibikeun, sebutkeun dua menit, lajeng dianggap satengah muka. Usaha pikeun ngirim pamundut salajengna nangtukeun kaayaan sambungan salajengna. Upami sadayana OK sareng jasa éta, sambunganna balik deui ka kaayaan damel sareng ditutup deui. Upami masih aya anu lepat sareng jasa éta, sambunganna dipegatkeun sareng jandela bobo diaktipkeun deui. Ieu mangrupikeun diagram kaayaan Circuit Breaker anu saderhana:

Istio Circuit Breaker: nganonaktipkeun peti lepat
Kadé dicatet di dieu yén sakabéh ieu lumangsung dina tingkat, jadi mun nyarita, arsitektur sistem. Janten dina sababaraha waktos anjeun kedah ngajarkeun aplikasi anjeun pikeun damel sareng Circuit Breaker, sapertos nyayogikeun nilai standar pikeun ngaréspon atanapi, upami mungkin, teu malire ayana jasa éta. A pola bulkhead dipaké pikeun ieu, tapi éta saluareun ruang lingkup artikel ieu.

Circuit breaker dina prakna

Salaku conto, urang bakal ngajalankeun dua vérsi microservice rekomendasi kami dina OpenShift. Vérsi 1 bakal dianggo rupa, tapi dina v2 urang bakal ngawangun dina reureuh simulate slowdowns on server. Pikeun ningali hasil, paké alat ngepung:

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

Istio Circuit Breaker: nganonaktipkeun peti lepat
Sagalana sigana jalan, tapi dina biaya naon? Dina glance kahiji, urang boga 100% kasadiaan, tapi nyandak katingal ngadeukeutan - durasi urus maksimum nyaéta saloba 12 detik. Ieu jelas bottleneck sarta perlu dilegakeun.

Jang ngalampahkeun ieu, kami bakal nganggo Istio pikeun ngaleungitkeun telepon pikeun ngalambatkeun peti. Ieu mangrupikeun konfigurasi anu saluyu sareng nganggo Circuit Breaker:

Istio Circuit Breaker: nganonaktipkeun peti lepat
Garis panungtungan kalawan parameter httpMaxRequestsPerConnection sinyal yén sambungan kalawan kudu dipegatkeun nalika nyobian nyieun sejen - kadua - sambungan salian ti nu geus aya. Kusabab wadahna kami simulasi jasa anu laun, kaayaan sapertos kitu bakal timbul sacara périodik, teras Istio bakal ngabalikeun kasalahan 503, tapi ieu anu bakal ditingalikeun ku pengepungan:

Istio Circuit Breaker: nganonaktipkeun peti lepat

OKÉ, urang boga Circuit breaker, naon salajengna?

Janten, urang ngalaksanakeun shutdown otomatis tanpa ngarampa kode sumber jasa éta nyalira. Ngagunakeun Circuit breaker jeung prosedur Pool Ejection ditétélakeun di luhur, urang tiasa nyabut wadahna marake tina kolam renang sumberdaya dugi aranjeunna normal deui, sarta pariksa status maranéhanana dina frékuénsi husus - dina conto urang, ieu dua menit (parameter sleepWindow).

Catet yén kamampuan aplikasi pikeun ngaréspon kasalahan 503 masih disetél dina tingkat kode sumber. Aya seueur strategi pikeun ngagunakeun Circuit Breaker, gumantung kana kaayaan.

Dina postingan salajengna: Urang bakal ngobrol ngeunaan ngalacak sareng ngawaskeun anu parantos dipasang atanapi gampang ditambah kana Istio, ogé kumaha ngahaja ngenalkeun kasalahan kana sistem.

sumber: www.habr.com

Tambahkeun komentar