Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

19 Séptémber di Moscow lumangsung pasamoan tematik munggaran HUG (Highload ++ Grup pamaké), nu ieu dedicated ka microservices. Aya presentasi "Operating Microservices: Size Matters, Even If You Have Kubernetes," dimana kami ngabagi pangalaman éksténsif Flant dina operasi proyék sareng arsitéktur microservice. Anu mimiti, éta bakal kapaké pikeun sadaya pamekar anu mikir ngeunaan ngagunakeun pendekatan ieu dina proyék ayeuna atanapi anu bakal datang.

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Nepangkeun video laporan (50 menit, leuwih informatif ti artikel), kitu ogé ekstrak utama ti dinya dina wangun téks.

NB: Video sareng presentasi ogé sayogi di tungtung tulisan ieu.

perkenalan

Biasana carita anu alus ngabogaan awal, plot utama jeung resolusi. Laporan ieu langkung mirip prelude, sareng anu tragis. Éta ogé penting pikeun dicatet yén éta nyadiakeun pandangan urang luar ngeunaan microservices. garapan.

Kuring gé mimitian ku grafik ieu, panulis nu (dina 2015) janten Martin Fowler:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Éta nunjukkeun kumaha, dina kasus aplikasi monolithic anu ngahontal nilai anu tangtu, produktivitas mimiti turun. Microservices béda sabab produktivitas awal sareng aranjeunna langkung handap, tapi nalika pajeulitna ningkat, degradasi efisiensi henteu katingali pisan pikeun aranjeunna.

Kuring bakal nambahan kana grafik ieu pikeun kasus ngagunakeun Kubernetes:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Naha aplikasi sareng microservice langkung saé? Kusabab arsitéktur sapertos kitu nyayogikeun syarat anu serius pikeun arsitéktur, anu dina gilirannana sampurna katutupan ku kamampuan Kubernetes. Di sisi séjén, sababaraha pungsi ieu bakal mangpaat pikeun monolith a, utamana kusabab monolith has kiwari teu persis monolith a (detailna bakal engké dina laporan).

Sakumaha anjeun tiasa tingali, grafik ahir (nalika aplikasi monolithic sareng microservice aya dina infrastruktur sareng Kubernetes) henteu béda pisan sareng anu asli. Salajengna urang bakal ngobrol ngeunaan aplikasi anu dioperasikeun nganggo Kubernetes.

Microservices mangpaat tur ngabahayakeun

Sareng ieu mangrupikeun ide utama:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Naon normal arsitéktur microservice? Sakuduna mawa anjeun kauntungan nyata, ngaronjatkeun efisiensi gawé anjeun. Lamun urang balik deui ka grafik, ieu téh:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Lamun nelepon manehna mangpaat, teras di sisi séjén grafik bakal aya ngabahayakeun microservices (ngaganggu pagawéan):

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Balik deui ka "gagasan utama": naha kuring kedah percanten kana pangalaman kuring? Ti mimiti taun ieu kuring geus pilari 85 proyék. Henteu sakabéh éta microservices (kira-kira sapertilu nepi ka satengah di antarana miboga arsitéktur misalna hiji), tapi ieu masih angka nu gede ngarupakeun. Kami (perusahaan Flant) salaku outsourcers tiasa ningali rupa-rupa aplikasi anu dikembangkeun boh di perusahaan leutik (kalayan 5 pamekar) sareng anu ageung (~ 500 pamekar). Kauntungan tambahan nyaéta yén urang ningali aplikasi ieu hirup sareng mekar salami sababaraha taun.

Naha microservices?

Pikeun patarosan ngeunaan mangpaat microservices aya jawaban pisan husus ti Martin Fowler anu parantos disebatkeun:

  1. wates jelas ngeunaan modularity;
  2. deployment bebas;
  3. kabebasan milih téknologi.

Kuring parantos nyarios pisan ka arsiték parangkat lunak sareng pamekar sareng naroskeun naha aranjeunna peryogi jasa mikro. Sareng kuring ngadamel daptar ekspektasi kuring. Ieu kajadian:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Lamun urang ngajelaskeun sababaraha titik "dina sensations," lajeng:

  • wates jelas modul: didieu urang boga monolith dahsyat, sarta ayeuna sagalana bakal rapih disusun dina repositories Git, nu sagalana "dina rak", haneut tur lemes teu dicampur;
  • kamerdikaan deployment: urang bakal tiasa gulung kaluar jasa sacara mandiri supados pangwangunan langkung gancang (nyebarkeun fitur-fitur anyar paralel);
  • kamerdikaan ngembangkeun: urang tiasa masihan microservice ieu hiji tim / pamekar, jeung nu hiji deui, hatur nuhun nu urang bisa ngamekarkeun gancang;
  • боreliabiliti gede: lamun degradasi parsial lumangsung (hiji microservice kaluar 20 ragrag), lajeng ngan hiji tombol bakal eureun gawé, sarta sistem sakabéhna bakal neruskeun fungsi.

Arsitéktur microservice has (ngabahayakeun).

Pikeun ngajelaskeun naha kanyataanana henteu naon anu urang ngarepkeun, kuring bakal nampilkeun koléktif gambar arsitéktur microservice dumasar kana pangalaman ti loba proyék béda.

Conto bakal janten toko online abstrak anu badé bersaing sareng Amazon atanapi sahenteuna OZON. Arsitéktur microservice na sapertos kieu:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Pikeun kombinasi alesan, microservices ieu ditulis dina platform béda:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Kusabab unggal microservice kedah gaduh otonomi, seueur di antarana peryogi database sareng cache sorangan. Arsitéktur ahir nyaéta kieu:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Naon akibatna?

Fowler ogé gaduh ieu aya hiji artikel — ngeunaan "pamayaran" pikeun ngagunakeun jasa mikro:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Sareng urang bakal ningali upami ekspektasi urang kapendak.

Jelas wates modul ...

tapi sabaraha microservices urang sabenerna kudu ngalereskeun?pikeun gulung kaluar robah? Dupi urang malah angka kaluar kumaha sagalana jalan tanpa tracer disebarkeun (sanggeus kabeh, pamundut wae diolah ku satengah tina microservices)?

Aya pola"lump badag tina kokotor", sareng di dieu tétéla janten gumpalan kokotor anu disebarkeun. Pikeun ngonfirmasi hal ieu, ieu mangrupikeun ilustrasi perkiraan ngeunaan kumaha pamundut:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Kamerdikaan panyebaran...

Téhnisna, éta geus kahontal: urang tiasa gulung kaluar unggal microservice nyalira. Tapi dina prakna anjeun kudu tumut kana akun nu salawasna gulung kaluar loba microservices, sarta kami kudu tumut kana akun urutan rollout maranéhna. Dina cara anu saé, urang umumna kedah nguji dina sirkuit anu misah naha urang ngaluncurkeun sékrési dina urutan anu leres.

Kabebasan milih téknologi ...

Anjeunna. Ngan inget yen kabebasan mindeng wates jeung lawlessness. Penting pisan di dieu pikeun henteu milih téknologi ngan ukur "maén" sareng aranjeunna.

Kamerdékaan pangwangunan...

Kumaha carana ngadamel loop test pikeun sakabéh aplikasi (kalawan jadi loba komponén)? Tapi anjeun tetep kudu tetep up to date. Sadaya ieu ngakibatkeun kanyataan yén jumlah sabenerna sirkuit test, anu prinsipna urang tiasa ngandung, tétéla minimal.

Sareng nyebarkeun sadayana ieu sacara lokal?.. Tétéla sering pamekar ngalakukeun padamelanna sacara mandiri, tapi "sacara acak", sabab anjeunna kapaksa ngantosan dugi ka sirkuit gratis pikeun uji.

Skala misah...

Leres, tapi éta dugi ka daérah DBMS anu dianggo. Dina conto arsitéktur anu dipasihkeun, Cassandra moal ngagaduhan masalah, tapi MySQL sareng PostgreSQL bakal.

Боlangkung reliabilitas...

Henteu ngan ukur kagagalan hiji microservice dina kanyataanana sering ngalanggar fungsi anu leres tina sakabéh sistem, tapi aya ogé masalah anyar: nyieun unggal microservice fault-tolerant pisan hésé. Kusabab microservices ngagunakeun téknologi béda (memcache, Redis, jsb), pikeun tiap anjeun kudu mikir ngaliwatan sagalana jeung nerapkeun eta, nu, tangtosna, mungkin, tapi merlukeun sumberdaya badag.

Pangukuran beban...

Ieu bener alus.

The "lightness" microservices ...

Urang teu ngan boga badag overhead jaringan (Requests pikeun DNS anu ngalikeun, jsb), tapi ogé alatan loba subqueries kami dimimitian data ulangan (cache toko), nu ngakibatkeun jumlah signifikan gudang.

Sareng ieu mangrupikeun hasil tina minuhan ekspektasi kami:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Tapi éta henteu sadayana!

Kusabab:

  • Paling dipikaresep urang bakal butuh beus pesen.
  • Kumaha cara ngadamel cadangan anu konsisten dina waktos anu pas? Hiji-hijina nyata pilihan nyaeta mareuman lalulintas keur ieu. Tapi kumaha carana ngalakukeun ieu dina produksi?
  • Upami urang nyarioskeun ngadukung sababaraha daérah, maka ngatur kelestarian di masing-masing daérah mangrupikeun tugas anu padat karya.
  • Masalah nyieun parobahan terpusat timbul. Salaku conto, upami urang kedah ngapdet versi PHP, urang kedah komitmen ka unggal gudang (sareng aya puluhan).
  • Tumuwuhna dina pajeulitna operasional téh, offhand, éksponénsial.

Naon anu kudu dipigawé kalayan sagala ieu?

Mimitian ku aplikasi monolithic. pangalaman Fowler urang anjeunna speaks yén ampir kabéh aplikasi microservice suksés dimimitian salaku monolith nu jadi badag teuing lajeng pegat. Dina waktos anu sami, ampir sadaya sistem anu diwangun salaku jasa mikro ti mimiti mimiti atanapi engké ngalaman masalah anu serius.

Pikiran berharga anu sanés nyaéta pikeun proyék kalayan arsitéktur microservice suksés, anjeun kedah terang pisan jeung wewengkon subjek, jeung kumaha carana nyieun microservices. Sareng cara anu pangsaéna pikeun diajar daérah subjek nyaéta ngadamel monolith.

Tapi kumaha upami urang parantos aya dina kaayaan ieu?

Léngkah munggaran pikeun ngarengsekeun masalah naon waé nyaéta satuju sareng ngartos yén éta mangrupikeun masalah, yén urang henteu hoyong sangsara deui.

Lamun, dina kasus hiji monolith overgrown (nalika urang geus kaluar tina kasempetan mésér sumberdaya tambahan pikeun eta), urang motong éta, lajeng dina hal ieu carita sabalikna tétéla: nalika microservices kaleuleuwihan euweuh mantuan, tapi ngahalangan - motong kaleuwihan jeung ngagedekeun!

Contona, pikeun gambar koléktif dibahas di luhur ...

Nyingkirkeun jasa mikro anu paling ditaroskeun:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Gabungkeun sadaya jasa mikro anu tanggung jawab pikeun ngahasilkeun frontend:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

... kana hiji microservice, ditulis dina hiji (modern jeung normal, sakumaha anjeun pikir sorangan) basa / kerangka:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Bakal gaduh hiji ORM (hiji DBMS) sareng sababaraha aplikasi munggaran:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

... tapi sacara umum anjeun tiasa nransper langkung seueur di dinya, kéngingkeun hasil ieu:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Sumawona, dina Kubernetes urang ngajalankeun sadayana ieu dina instansi anu kapisah, anu hartosna urang masih tiasa ngukur beban sareng skala aranjeunna nyalira.

Pikeun nyimpulkeun

Tingali kana gambar anu langkung ageung. Sering pisan, sadaya masalah ieu sareng microservices timbul kusabab batur nyandak tugas maranéhanana, tapi hayang "maén kalawan microservices".

Dina kecap "microservices" bagian "mikro" kaleuleuwihan.. Aranjeunna "mikro" ngan sabab leuwih leutik batan monolith badag. Tapi ulah nganggap aranjeunna salaku hal leutik.

Sareng pikeun pamikiran ahir, hayu urang uih deui ka bagan aslina:

Microservices: Ukuran penting, sanajan anjeun boga Kubernetes

Hiji catetan ditulis dina eta (katuhu luhur) bisul kana kanyataan yén kaahlian tim nu ngajadikeun proyék anjeun salawasna primér - aranjeunna bakal maénkeun peran konci dina pilihan anjeun antara microservices na monolith a. Upami tim henteu gaduh kaahlian anu cekap, tapi éta ngamimitian ngadamel jasa mikro, caritana pasti bakal parah.

Video sareng slide

Pidéo tina pidato (~ 50 menit; hanjakalna, éta henteu ngémutan seueur émosi para sémah, anu sakitu legana nangtukeun suasana laporan, tapi éta kumaha éta):

Presentasi laporan:

PS

Laporan séjén dina blog urang:

Anjeun ogé tiasa resep kana publikasi ieu:

sumber: www.habr.com

Tambahkeun komentar