Pola neundeun data dina Kubernetes

Pola neundeun data dina Kubernetes
Héy Habr!

Kami ngingetkeun yén kami parantos ngaluarkeun anu sanés anu pikaresepeun sareng mangpaat buku ngeunaan pola Kubernetes. Éta sadayana dimimitian ku"Pola"Brendan Burns, sareng, ku jalan kitu, kami ngagaduhan padamelan di bagéan ieu bisul. Dinten ieu kami ngajak anjeun maca artikel tina blog MiniIO anu ngajelaskeun sakeudeung tren sareng spésifikasi pola neundeun data di Kubernetes.

Kubernetes dasarna parantos ngarobih pola pamekaran sareng panyebaran aplikasi tradisional. Ayeuna tim tiasa ngembangkeun, nguji, sareng nyebarkeun aplikasi dina sababaraha dinten-di sababaraha lingkungan, sadayana dina klaster Kubernetes. Karya sapertos kitu sareng téknologi generasi sateuacana biasana nyandak sababaraha minggu, upami henteu bulan.

Akselerasi ieu dimungkinkeun ku abstraksi anu disayogikeun ku Kubernetes - nyaéta, kusabab Kubernetes sorangan berinteraksi sareng detil tingkat handap mesin fisik atanapi virtual, ngamungkinkeun para pangguna pikeun nyatakeun prosésor anu dipikahoyong, jumlah mémori anu dipikahoyong, sareng jumlah wadahna. conto, diantara parameter séjén. Kalayan komunitas ageung anu ngadukung Kubernetes sareng adopsina terus-terusan ngembang, Kubernetes mangrupikeun pamimpin diantara sadaya platform orkestrasi wadahna ku margin anu lega.

Salaku pamakéan Kubernetes tumuwuh, kitu ogé kabingungan ngeunaan pola gudang na..

Jeung dulur competing pikeun sapotong pai Kubernetes (i.e., gudang data), lamun datang ka ngobrol ngeunaan neundeun data, sinyal ieu drowned dina loba noise.
Kubernetes embodies model modern pikeun ngembangkeun aplikasi, deployment, sarta manajemén. Modél modéren ieu ngaleungitkeun panyimpen data tina komputasi. Pikeun ngartos lengkep detachment dina konteks Kubernetes, anjeun ogé kedah ngartos naon aplikasi stateful sareng stateless, sareng kumaha panyimpenan data cocog kana éta. Ieu dimana pendekatan REST API dipaké ku S3 boga kaunggulan jelas leuwih pendekatan POSIX / CSI sahiji solusi séjén.

Dina artikel ieu, urang bakal ngobrol ngeunaan pola panyimpen data dina Kubernetes sareng khususna nyentuh perdebatan antara aplikasi stateful sareng stateless pikeun langkung ngartos naon bédana antara aranjeunna sareng naha éta penting. Sesa téks bakal ningali aplikasi sareng pola panyimpen datana dumasar kana prakték pangsaéna pikeun damel sareng wadah sareng Kubernetes.

Wadah Stateless

Wadahna ku alam hampang sareng ephemeral. Éta tiasa gampang dieureunkeun, dipiceun, atanapi disebarkeun ka titik anu sanés - sadayana dina sababaraha detik. Dina sistem orkestrasi wadahna ageung, operasi sapertos kitu lumangsung unggal waktos, sareng pangguna henteu perhatikeun parobihan sapertos kitu. Nanging, gerakan ngan ukur tiasa dilaksanakeun upami wadahna henteu ngagaduhan katergantungan dina titik dimana tempatna. Wadah sapertos kitu tiasa dianggo stateless.

Wadah Stateful

Upami wadahna nyimpen data dina alat anu dipasang sacara lokal (atanapi dina alat blok), maka toko data dimana tempatna kedah dialihkeun ka titik énggal, sareng wadahna sorangan, upami aya gagal. Ieu penting sabab lamun henteu aplikasi nu ngajalankeun dina wadahna moal bisa fungsina leres sabab perlu ngakses data nu disimpen dina média lokal. Wadah sapertos kitu tiasa dianggo stateful.

Ti sudut pandang teknis murni, peti stateful ogé bisa dipindahkeun ka titik lianna. Ieu biasana dihontal nganggo sistem file anu disebarkeun atanapi panyimpen jaringan blok anu digantelkeun ka sadaya wadah anu ngajalankeun. Ku cara kieu, wadahna ngaksés volume pikeun neundeun data anu terus-terusan, sareng inpormasi disimpen dina disk anu aya di sapanjang jaringan. Kuring bakal nelepon metoda ieu "pendekatan wadahna stateful", sareng dina sesa tulisan kuring bakal nyauran éta pikeun kasaragaman.

Pola neundeun data dina Kubernetes

Dina pendekatan wadah stateful has, sadaya pods aplikasi digantelkeun ka sistem file disebarkeun tunggal-sajenis gudang dibagikeun dimana sakabeh data aplikasi resides. Sanaos sababaraha variasi mungkin, ieu mangrupikeun pendekatan tingkat luhur.

Ayeuna hayu urang tingali naha pendekatan wadah stateful mangrupa anti pola dina dunya awan-centric.

Desain aplikasi cloud-pribumi

Sacara tradisional, aplikasi ngagunakeun basis data pikeun neundeun inpormasi terstruktur sareng disk lokal atanapi sistem file anu disebarkeun dimana sadaya data anu henteu terstruktur atanapi semi-terstruktur dibuang. Nalika volume data henteu terstruktur naék, pamekar sadar yén POSIX teuing ngobrol, gaduh overhead anu signifikan, sareng pamustunganana ngahalangan kinerja aplikasi nalika pindah ka skala anu saé pisan.

Ieu utamana nyumbang ka mecenghulna standar anyar pikeun neundeun data, nyaeta, gudang dumasar-awan, digawé utamana dumasar kana REST API jeung freeing aplikasi tina pangropéa burdensome of a gudang data lokal. Dina hal ieu, aplikasi sacara efektif asup kana modeu stateless (sabab kaayaan aya dina panyimpenan jauh). Aplikasi modéren diwangun ti mimiti kalayan faktor ieu dina pikiran. Sakumaha aturan, naon waé aplikasi modéren anu ngolah data tina hiji jinis atanapi anu sanés (log, metadata, gumpalan, sareng sajabana) diwangun dumasar kana paradigma berorientasi awan, dimana nagara ditransferkeun ka sistem parangkat lunak khusus pikeun neundeunana.

Pendekatan wadah stateful maksakeun sakabeh paradigma ieu balik persis dimana eta dimimitian!

Kalayan ngagunakeun antarbeungeut POSIX pikeun nyimpen data, aplikasi beroperasi saolah-olah stateful, sareng kusabab ieu, aranjeunna angkat tina prinsip anu paling penting dina desain awan-centric, nyaéta, kamampuan pikeun ngarobih ukuran benang worker aplikasi gumantung kana anu asup. input, beban, pindah ka titik anyar pas titik ayeuna gagal, jeung saterusna.

Nyokot katingal ngadeukeutan dina kaayaan ieu, urang manggihan yén lamun milih hiji toko data, urang deui jeung deui Nyanghareupan POSIX vs dilema API REST, tapi ku aggravation tambahan tina masalah POSIX alatan alam disebarkeun di lingkungan Kubernetes. Khususna,

  • POSIX cerewet: POSIX semantik merlukeun unggal operasi pakait sareng metadata na file descriptors nu mantuan ngajaga kaayaan operasi. Ieu ngakibatkeun waragad signifikan nu teu boga nilai nyata. API panyimpen obyék, khususna API S3, nyingkirkeun sarat ieu, ngamungkinkeun aplikasi pikeun seuneu teras "poho" ngeunaan teleponna. Réspon sistem panyimpen nunjukkeun naha tindakan éta suksés atanapi henteu. Upami gagal, aplikasi tiasa dicobian deui.
  • Watesan jaringan: Dina sistem anu disebarkeun, tersirat yén meureun aya seueur aplikasi anu nyobian nyerat data kana média anu napel anu sami. Ku alatan éta, teu ngan aplikasi bakal bersaing saling pikeun mindahkeun data rubakpita (pikeun ngirim data ka média), tapi sistem gudang sorangan bakal bersaing pikeun rubakpita ieu ku ngirim data sakuliah disk fisik. Kusabab loquaciousness of POSIX, jumlah telepon jaringan naek sababaraha kali. Di sisi anu sanés, S3 API nyayogikeun bédana anu jelas antara telepon jaringan antara anu asalna tina klien ka server sareng anu lumangsung dina server.
  • kasalametan: Modél kaamanan POSIX dirancang pikeun partisipasi aktif manusa: pangurus ngonpigurasikeun tingkat aksés husus pikeun tiap pamaké atawa grup. Paradigma ieu hese adaptasi sareng dunya anu berpusat dina awan. Aplikasi modéren gumantung kana modél kaamanan basis API, dimana hak aksés diartikeun sakumpulan kawijakan, akun jasa, kredensial samentara, jsb.
  • Ngatur: peti Stateful gaduh sababaraha overhead manajemén. Urang ngobrol ngeunaan nyinkronkeun aksés paralel kana data, mastikeun konsistensi data, sadaya ieu merlukeun tinimbangan ati nu pola aksés data ngagunakeun. Parangkat lunak tambahan kedah dipasang, diawaskeun, sareng dikonpigurasikeun, sanés waé usaha pangembangan tambahan.

Wadah Data Panyimpenan Interface

Bari Interface Panyimpenan Wadahna (CSI) geus mangrupa pitulung hébat ku proliferasi lapisan volume Kubernetes, sawaréh outsourcing ka ngical paralatan gudang pihak-katilu, éta ogé teu ngahaja nyumbang kana kapercayaan yén pendekatan wadahna stateful mangrupakeun metoda dianjurkeun pikeun nyimpen data dina Kubernetes.

CSI dikembangkeun salaku standar pikeun nyayogikeun blok sawenang-wenang sareng sistem panyimpen file kana aplikasi warisan nalika dijalankeun dina Kubernetes. Sareng, sakumaha anu ditingalikeun ku tulisan ieu, hiji-hijina kaayaan dimana pendekatan wadahna stateful (sareng CSI dina bentuk ayeuna) masuk akal nyaéta nalika aplikasi éta sorangan mangrupikeun sistem warisan dimana teu mungkin pikeun nambihan dukungan pikeun API neundeun obyék. .

Penting pikeun ngarti yén ngagunakeun CSI dina bentuk ayeuna, nyaéta, ningkatna volume nalika damel sareng aplikasi modern, urang bakal mendakan masalah anu sami anu timbul dina sistem dimana panyimpen data diatur dina gaya POSIX.

Hiji Pendekatan Leuwih alus

Dina hal ieu, hal anu penting pikeun ngarti yén paling aplikasi teu inherently dirancang husus pikeun stateful atanapi stateless karya. Paripolah ieu gumantung kana arsitéktur sistem sakabéh sareng pilihan desain khusus anu dilakukeun. Hayu urang ngobrol saeutik ngeunaan aplikasi stateful.

Sacara prinsip, sadaya data aplikasi tiasa dibagi kana sababaraha jinis lega:

  • Log data
  • Data cap waktu
  • Data transaksi
  • Métadata
  • Gambar wadahna
  • Blob (objék badag binér) data

Sadaya jinis data ieu dirojong pisan dina platform panyimpen modéren, sareng aya sababaraha platform asli awan anu disaluyukeun pikeun nganteurkeun data dina unggal format khusus ieu. Salaku conto, data transaksi sareng metadata tiasa aya dina pangkalan data asli awan modern sapertos CockroachDB, YugaByte, jsb. Gambar wadahna atanapi data blob tiasa disimpen dina pendaptaran docker dumasar kana MiniIO. Data timestamp tiasa disimpen dina database séri waktos sapertos InfluxDB, jsb. Kami moal ngajelaskeun sacara rinci ngeunaan unggal jinis data sareng aplikasina di dieu, tapi ideu umum nyaéta pikeun ngahindarkeun panyimpen data anu terus-terusan anu ngandelkeun pamasangan disk lokal.

Pola neundeun data dina Kubernetes

Sajaba ti, éta mindeng éféktif nyadiakeun lapisan cache samentara anu boga fungsi minangka toko file samentara pikeun aplikasi, tapi aplikasi teu kudu gumantung kana lapisan ieu salaku sumber bebeneran.

Panyimpenan aplikasi stateful

Sanaos dina kalolobaan kasus mangpaat pikeun ngajaga aplikasi tanpa kaayaan, aplikasi anu dirancang pikeun nyimpen data - sapertos database, toko obyék, toko nilai konci - kedah stateful. Hayu urang tingali naha aplikasi ieu disebarkeun dina Kubernetes. Hayu urang nyandak MiniIO sabagé conto, tapi prinsip-prinsip anu sami berlaku pikeun sistem panyimpen awan-asli ageung anu sanés.

Aplikasi cloud-asli dirancang pikeun ngamangpaatkeun pinuh kalenturan anu aya dina wadah. Ieu ngandung harti yén maranéhna teu nyieun asumsi ngeunaan lingkungan dimana maranéhna bakal deployed. Contona, MiniIO ngagunakeun mékanisme coding erasure internal pikeun nyadiakeun sistem kalawan daya tahan cukup pikeun tetep operasional sanajan satengah disk gagal. MiniIO ogé ngatur integritas sareng kaamanan data nganggo hashing sareng enkripsi sisi server proprietary.

Pikeun aplikasi cloud-centric sapertos kitu, volume pengkuh lokal (PV) paling merenah salaku panyimpenan cadangan. PV lokal nyadiakeun kamampuhan pikeun nyimpen data atah, bari aplikasi ngajalankeun on luhureun PVs ieu bebas ngumpulkeun informasi pikeun skala data jeung ngatur sarat data tumuwuh.

pendekatan ieu loba basajan tur nyata leuwih scalable ti PVs basis CSI, nu ngawanohkeun lapisan sorangan manajemén data na redundancy kana sistem; titik éta lapisan ieu biasana konflik kalawan aplikasi dirancang pikeun stateful.

Hiji gerakan kuat nuju decoupling data tina itungan

Dina artikel ieu, urang ngobrol ngeunaan kumaha aplikasi anu reoriented pikeun digawé tanpa nyimpen kaayaan, atawa, dina basa sejen, nyimpen data geus decoupled tina komputasi dina eta. Kasimpulanana, hayu urang tingali sababaraha conto nyata tina tren ieu.

silalatu, platform analytics data nonjol, geus tradisional geus stateful tur deployed on HDFS. Nanging, nalika Spark pindah kana dunya anu berpusat dina awan, platformna beuki dianggo tanpa kaayaan nganggo `s3a`. Spark nganggo s3a pikeun mindahkeun kaayaan ka sistem anu sanés, sedengkeun wadah Spark sorangan beroperasi sacara teu aya kaayaan. Pamaén perusahaan utama sanés dina widang analitik data gedé, khususna, Vertika, Teradata, Greenplum Éta ogé pindah ka gawé kalawan separation gudang data jeung itungan on aranjeunna.

Pola anu sami ogé tiasa ditingali dina platform analitik ageung sanés, kalebet Presto, Tensorflow to R, Jupyter. Ku ngamuat kaayaan ka sistem panyimpen awan jauh, janten langkung gampang pikeun ngatur sareng skala aplikasi anjeun. Salaku tambahan, éta ngagampangkeun portabilitas aplikasi kana rupa-rupa lingkungan.

sumber: www.habr.com

Tambahkeun komentar