Naha pangkalan data cicing di Kubernetes?

Naha pangkalan data cicing di Kubernetes?

Kumaha bae, sajarahna, industri IT dibagi kana dua kubu kondisional pikeun alesan naon: jalma anu "pikeun" jeung jalma anu "ngalawan". Leuwih ti éta, subyek sengketa tiasa sagemblengna sawenang. OS mana anu langkung saé: Win atanapi Linux? Dina smartphone Android atanapi ios? Naha anjeun kedah nyimpen sadayana dina méga atanapi nempatkeun kana neundeun RAID tiis sareng nempatkeun screws dina brankas? Naha urang PHP boga hak pikeun disebut programer? Sengketa ieu, kadang-kadang, sacara éksklusif eksistensial di alam sareng teu aya dasar sanés ti kapentingan olahraga.

Ieu ngan jadi kajadian nu ku mecenghulna peti jeung sakabeh masakan tercinta ieu kalawan docker na k8s kondisional, debat "kanggo" jeung "ngalawan" pamakéan kamampuhan anyar dina sagala rupa wewengkon backend nu dimimitian. (Hayu urang reservasi sateuacanna yén sanajan Kubernetes bakal sering dituduhkeun salaku orkestra dina diskusi ieu, pilihan alat khusus ieu henteu penting pisan. .)

Na, eta bakal sigana, ieu bakal jadi sengketa basajan antara dua sisi tina koin sarua. Sapertos teu masuk akal sareng teu karunya sapertos konfrontasi anu langgeng antara Win vs Linux, dimana aya jalma anu nyukupan dimana waé di tengah. Tapi dina kasus containerization, teu sagalana geus jadi basajan. Biasana dina sengketa sapertos teu aya sisi katuhu, tapi dina kasus "pamakéan" atawa "teu make" wadahna pikeun nyimpen database, sagalana kabukti tibalik ka handap. Kusabab dina rasa anu tangtu, boh pendukung sareng lawan pendekatan ieu leres.

Sisi caang

Argumen The Light Side tiasa dijelaskeun sakedap dina hiji frasa: "Halo, 2k19 aya di luar jandela!" Ieu disada kawas populism, tangtosna, tapi lamun delve kana kaayaan di jéntré, éta boga kaunggulan na. Hayu urang nyortir aranjeunna kaluar ayeuna.

Anggap anjeun gaduh proyék wéb anu ageung. Bisa mimitina diwangun dina dasar pendekatan microservice, atawa di sawatara titik eta sumping ka eta ngaliwatan jalur évolusionér - ieu teu penting pisan, kanyataanna. Anjeun nyebarkeun proyék kami kana jasa mikro anu misah, nyetél orkestrasi, kasaimbangan beban, sareng skala. Sareng ayeuna, kalayan ati nurani anu jelas, anjeun nyeuseup mojito dina tempat tidur gantung salami épék habra tinimbang naékkeun server anu murag. Tapi dina sagala lampah anjeun kudu konsisten. Mindeng pisan, ngan aplikasi sorangan-kode-anu containerized. Naon deui anu urang gaduh salain kode?

Éta leres, data. Jantung proyék naon waé datana: ieu tiasa janten DBMS khas - MySQL, Postgre, MongoDB, atanapi panyimpen anu dianggo pikeun milarian (ElasticSearch), neundeun nilai konci pikeun cache - contona, redis, jsb. urang bakal ngobrol ngeunaan pilihan palaksanaan backend bengkung nalika database ngadat alatan queries kirang ditulis, jeung gantina urang bakal ngobrol ngeunaan mastikeun kasabaran sesar database ieu dina beban klien. Barina ogé, nalika kami wadahna aplikasi kami sarta ngidinan ka bebas skala pikeun ngolah sagala Jumlah requests asup, ieu sacara alami ngaronjatkeun beban dina database.

Nyatana, saluran pikeun ngaksés pangkalan data sareng server anu dijalankeun janten panon jarum dina backend wadah anu indah urang. Dina waktos anu sami, motif utama virtualisasi wadahna nyaéta mobilitas sareng kalenturan struktur, anu ngamungkinkeun urang pikeun ngatur distribusi beban puncak dina sakumna infrastruktur anu sayogi pikeun urang sabisa-gancang. Nyaéta, upami urang henteu wadah sareng gulung kaluar sadaya unsur sistem anu aya dina kluster, urang ngalakukeun kasalahan anu serius.

Éta langkung logis pikeun klaster henteu ngan ukur aplikasi sorangan, tapi ogé jasa anu tanggung jawab pikeun nyimpen data. Ku clustering na deploying web server anu dianggo bebas sarta ngadistribusikaeun beban diantara sorangan dina k8s, urang geus ngarengsekeun masalah sinkronisasi data - komentar sarua dina tulisan, lamun urang nyandak sababaraha media atawa platform blog salaku conto. Dina sagala hal, urang boga hiji intra-cluster, malah virtual, ngagambarkeun database salaku ExternalService. Patarosanna nyaéta yén pangkalan data éta henteu acan dikelompokeun - pangladén wéb anu dipasang dina kubus nyandak inpormasi ngeunaan parobihan tina pangkalan data tempur statik urang, anu puteran nyalira.

Anjeun ngarasa nyekel? Kami nganggo k8s atanapi Swarm pikeun ngadistribusikaeun beban sareng ngahindarkeun nabrak pangladén wéb utama, tapi kami henteu ngalakukeun ieu pikeun pangkalan data. Tapi lamun database ngadat, teras sakabéh infrastruktur clustered kami teu aya rasa - naon alusna kaca web kosong nu balik kasalahan aksés database?

Éta pisan sababna naha perlu klaster teu ukur web server, sakumaha biasana dipigawé, tapi ogé infrastruktur database. Ngan ku cara ieu urang tiasa mastikeun struktur anu tiasa dianggo dina hiji tim, tapi dina waktos anu sami bebas tina unggal anu sanés. Sumawona, sanajan satengah tina backend urang "runtuh" ​​dina beban, sésana bakal salamet, sarta sistem nyingkronkeun database saling dina klaster jeung kamampuhan pikeun endlessly skala na nyebarkeun klaster anyar bakal mantuan gancang ngahontal kapasitas diperlukeun - lamun ngan aya rak di puseur data.

Sajaba ti éta, model database disebarkeun di klaster ngidinan Anjeun pikeun nyandak ieu pisan database ka mana diperlukeun; Lamun urang ngobrol ngeunaan layanan global, éta rada teu logis mun spin up klaster web wae di wewengkon San Fransisco, sarta dina waktos anu sareng ngirim pakét nalika ngakses database di wewengkon Moscow jeung deui.

Ogé, containerization tina pangkalan data ngamungkinkeun anjeun ngawangun sadaya unsur sistem dina tingkat abstraksi anu sami. Anu, kahareupna ngamungkinkeun pikeun ngatur sistem ieu langsung tina kode, ku pamekar, tanpa partisipasi aktif pangurus. Pamekar ngira yén DBMS anu misah diperyogikeun pikeun subproyék énggal - gampang! nyerat file yaml, unggah kana kluster sareng anjeun parantos réngsé.

Sarta tangtu, operasi internal ieu greatly disederhanakeun. Béjakeun ka kuring, sabaraha kali anjeun nutup panon anjeun nalika anggota tim anyar nempatkeun leungeun-Na kana database tempur pikeun digawé? Anu, kanyataanna, ngan hiji-hijina anu anjeun gaduh sareng spinning ayeuna? Tangtosna, urang sadayana dewasa di dieu, sareng dimana waé urang gaduh cadangan seger, bahkan langkung jauh - di tukangeun rak kalayan cucumbers nini sareng skis lami - cadangan anu sanés, bahkan dina panyimpenan tiis, sabab kantor anjeun parantos hurung sakali. Tapi kabeh sarua, unggal bubuka hiji anggota tim anyar kalawan aksés ka infrastruktur tempur sarta, tangtosna, kana database ngempur téh ember validol for everyone sabudeureun. Muhun, saha nu terang anjeunna, newbie, meureun anjeunna cross-leungeun? Éta pikasieuneun, anjeun bakal satuju.

Containerization sareng, kanyataanna, topologi fisik anu disebarkeun tina pangkalan data proyék anjeun ngabantosan pikeun ngahindarkeun waktos validasi sapertos kitu. Teu percanten ka newbie? OKÉ! Hayu urang masihan anjeunna kluster sorangan pikeun digawe sareng pegatkeun sambungan database ti klaster séjén - sinkronisasi ngan ku push manual tur rotasi sinkron dua kenop (hiji keur kalungguhan tim, nu séjén pikeun admin). Jeung dulur senang.

Sareng ayeuna waktosna pikeun ngarobih kana lawan tina clustering database.

Sisi poek

Arguing naha teu patut containerizing database jeung neraskeun ngajalankeun eta dina hiji server sentral, urang moal stoop kana retorika orthodoxies jeung pernyataan kawas "akina lumpat database on hardware, kitu ogé urang!" Sabalikna, hayu urang nyobian kaayaan dimana containerization saleresna bakal mayar dividen anu nyata.

Satuju, proyék-proyék anu leres-leres peryogi dasar dina wadahna tiasa diitung dina ramo ku sanés operator mesin panggilingan anu pangsaéna. Kanggo sabagéan ageung, bahkan panggunaan k8s atanapi Docker Swarm nyalira kaleuleuwihan - sering alat-alat ieu dianggo kusabab hype umum téknologi sareng sikep "kawasa" dina jalma genders pikeun nyorong sadayana kana awan jeung wadah. Nya, sabab ayeuna modéren sareng sadayana ngalakukeunana.

Sahenteuna satengah tina kasus, ngagunakeun Kubernetis atanapi ngan Docker dina proyék anu kaleuleuwihan. Masalahna nyaéta henteu sadayana tim atanapi perusahaan outsourcing anu disewa pikeun ngajaga infrastruktur klien sadar ieu. Ieu parah lamun peti ditumpukeun, sabab waragad jumlah nu tangtu koin ka klien nu.

Sacara umum, aya hiji pamadegan yén docker / kubus mafia ieu stupidly crushing klien nu outsource masalah infrastruktur ieu. Barina ogé, pikeun digawe sareng klaster, urang peryogi insinyur anu sanggup ieu sareng umumna ngartos arsitektur solusi anu dilaksanakeun. Kami sakali parantos ngajelaskeun kasus kami sareng publikasi Republik - di dinya kami ngalatih tim klien pikeun damel di realitas Kubernetis, sareng sadayana wareg. Tur éta santun. Seringna, "implementers" k8s nyandak disandera infrastruktur klien - sabab ayeuna ngan aranjeunna ngartos kumaha sadayana jalan di dinya; teu aya spesialis di sisi klien.

Ayeuna ngabayangkeun yén ku cara kieu urang outsource teu ukur bagian web server, tapi ogé pangropéa database. Kami nyarios yén BD mangrupikeun jantung, sareng leungitna jantung nyaéta fatal pikeun sagala organisme hirup. Pondokna, prospek teu pangalusna. Ku kituna, tinimbang hype Kubernetis, loba proyek kedah saukur teu ganggu ku tarif normal pikeun AWS, nu bakal ngajawab sagala masalah jeung beban dina situs maranéhanana / proyék. Tapi AWS geus euweuh fashionable, sarta show-offs sia leuwih ti duit - hanjakalna, dina lingkungan IT teuing.

OKÉ. Panginten proyék éta leres-leres peryogi kluster, tapi upami sadayana jelas sareng aplikasi stateless, teras kumaha urang tiasa ngatur konektipitas jaringan anu santun pikeun database clustered?

Upami urang nyarioskeun solusi rékayasa anu lancar, anu mangrupikeun transisi ka k8s, maka nyeri sirah utama urang nyaéta réplikasi data dina database clustered. Sababaraha DBMS mimitina rada satia kana distribusi data antara instansi individu maranéhanana. Seueur anu sanés henteu ngabagéakeun. Sareng sering argumen utama dina milih DBMS pikeun proyék kami sanés kamampuan pikeun ngayakeun réplikasi kalayan biaya sumberdaya sareng rékayasa minimal. Utamana lamun proyék ieu teu mimitina rencanana salaku microservice a, tapi saukur mekar dina arah ieu.

Kami pikir teu perlu ngobrol ngeunaan speed drive jaringan - aranjeunna slow. Jelema. Urang masih teu boga kasempetan nyata, lamun hal kajadian, pikeun balikan deui hiji conto DBMS dimana aya deui, contona, kakuatan processor atawa RAM bébas. Urang bakal gancang pisan ngajalankeun kana kinerja subsistem disk virtualized. Sasuai, DBMS kudu dipaku kana set pribadi sorangan mesin lokasina di deukeutna. Atawa perlu kumaha bae misah niiskeun sinkronisasi data cukup gancang pikeun cadangan sakuduna dituju.

Neruskeun topik sistem file virtual: Docker Volumes, hanjakalna, henteu masalah-gratis. Sacara umum, dina masalah sapertos neundeun data anu tiasa dipercaya pikeun jangka panjang, kuring hoyong ngalakukeun skéma anu paling téknisna saderhana. Sareng nambihan lapisan abstraksi énggal tina FS wadahna ka FS host indungna mangrupikeun résiko nyalira. Tapi nalika operasi sistem rojongan containerization ogé encounters kasusah jeung ngirimkeun data antara lapisan ieu, lajeng éta bener musibah. Ayeuna, seueur masalah anu dipikanyaho ku umat manusa progresif sigana parantos dibasmi. Tapi anjeun ngartos, beuki kompleks mékanisme, nu gampang megatkeun.

Dina lampu tina sagala "petualangan" ieu, éta leuwih nguntungkeun sarta gampang pikeun nyimpen database dina hiji tempat, komo lamun kudu containerize aplikasi, hayu eta ngajalankeun sorangan tur ngaliwatan gateway distribution narima komunikasi simultaneous kalawan database, nu bakal dibaca jeung ditulis ngan sakali jeung Di hiji tempat. Pendekatan ieu ngirangan kamungkinan kasalahan sareng desynchronization ka minimum.

Urang nuju naon? Leuwih ti éta, containerization database luyu dimana aya kabutuhan nyata eta. Anjeun teu tiasa ngeusian pangkalan data aplikasi lengkep sareng muter saolah-olah anjeun ngagaduhan dua belasan microservices - éta henteu jalan kitu. Jeung ieu kudu jelas dipikaharti.

Gantina output

Upami anjeun ngantosan kacindekan anu jelas "pikeun virtualisasi pangkalan data atanapi henteu," maka kami bakal nguciwakeun anjeun: éta moal aya di dieu. Kusabab nalika nyieun sagala solusi infrastruktur, hiji kudu dipandu teu ku fashion jeung kamajuan, tapi, mimiti sagala, ku akal sehat.

Aya proyék-proyék anu prinsip-prinsip sareng alat-alat anu disayogikeun ku Kubernetis pas, sareng dina proyék-proyék sapertos kitu aya katengtreman sahenteuna di daérah tukang. Tur aya proyék nu teu kedah containerization, tapi infrastruktur server normal, sabab fundamentally teu bisa rescale kana model klaster microservice, sabab bakal tumiba.

sumber: www.habr.com

Tambahkeun komentar