Kubernetes-da ma'lumotlarni saqlash naqshlari

Kubernetes-da ma'lumotlarni saqlash naqshlari
Hey Xabr!

Sizga shuni eslatib o'tamizki, biz yana bir juda qiziqarli va foydali nashrni chiqardik kitob Kubernetes naqshlari haqida. Hammasi "dan boshlandiNaqshlar"Brendan Berns, va aytmoqchi, bizda bu segmentda ish bor qaynaydi. Bugun biz sizni MiniIO blogidan Kubernetes-da ma'lumotlarni saqlash usullarining tendentsiyalari va xususiyatlarini qisqacha tavsiflovchi maqolani o'qishni taklif qilamiz.

Kubernetes an'anaviy ilovalarni ishlab chiqish va joylashtirish modellarini tubdan o'zgartirdi. Endi jamoa bir necha kun ichida dasturni ishlab chiqishi, sinovdan o‘tkazishi va o‘rnatishi mumkin - bir nechta muhitda, barchasi Kubernetes klasterlarida. Texnologiyaning oldingi avlodlari bilan bunday ishlash odatda oylar bo'lmasa, haftalar davom etdi.

Ushbu tezlashtirish Kubernetes tomonidan taqdim etilgan abstraksiya tufayli amalga oshiriladi, ya'ni Kubernetesning o'zi jismoniy yoki virtual mashinalarning past darajadagi tafsilotlari bilan o'zaro ta'sir qiladi va foydalanuvchilarga kerakli protsessorni, kerakli xotira hajmini va konteyner sonini e'lon qilish imkonini beradi. misollar, boshqa parametrlar qatorida. Kubernetes-ni qo'llab-quvvatlovchi va uni qabul qilish doimiy ravishda kengayib borayotgan ulkan hamjamiyat bilan Kubernetes barcha konteyner orkestr platformalari orasida keng farq bilan etakchi hisoblanadi.

Kubernetes-dan foydalanish oshgani sayin, uni saqlash shakllari haqida chalkashliklar ham ortadi..

Har bir inson Kubernetes pirogi (ya'ni, ma'lumotlarni saqlash) uchun raqobatlashayotganda, ma'lumotlarni saqlash haqida gap ketganda, signal juda ko'p shovqinga botib ketadi.
Kubernetes ilovalarni ishlab chiqish, joylashtirish va boshqarish uchun zamonaviy modelni o'zida mujassam etgan. Ushbu zamonaviy model ma'lumotlarni saqlashni hisoblashdan ajratadi. Kubernetes kontekstida ajralishni to'liq tushunish uchun siz davlat va fuqaroligi bo'lmagan ilovalar nima ekanligini va ma'lumotlarni saqlash bunga qanday mos kelishini tushunishingiz kerak. Bu erda S3 tomonidan qo'llaniladigan REST API yondashuvi boshqa echimlarning POSIX/CSI yondashuvidan aniq afzalliklarga ega.

Ushbu maqolada biz Kubernetes-da ma'lumotlarni saqlash naqshlari haqida gaplashamiz va ular orasidagi farq nima va nima uchun muhimligini yaxshiroq tushunish uchun davlat va fuqaroligi bo'lmagan ilovalar o'rtasidagi bahslarga to'xtalamiz. Matnning qolgan qismi konteynerlar va Kubernetes bilan ishlash boʻyicha eng yaxshi amaliyotlar asosida ilovalar va ularning maʼlumotlarni saqlash modellarini koʻrib chiqadi.

Fuqaroligi bo'lmagan konteynerlar

Konteynerlar tabiatan engil va vaqtinchalik. Ularni osongina to'xtatish, olib tashlash yoki boshqa tugunga joylashtirish mumkin - barchasi bir necha soniya ichida. Katta konteyner orkestrlash tizimida bunday operatsiyalar doimo sodir bo'ladi va foydalanuvchilar hatto bunday o'zgarishlarni sezmaydilar. Biroq, konteynerning u joylashgan tugunga bog'liqligi bo'lmasa, harakatlanish mumkin. Bunday idishlarning ishlashi aytiladi fuqaroligi bo'lmagan.

Holatli konteynerlar

Agar konteyner ma'lumotlarni mahalliy biriktirilgan qurilmalarda (yoki blokli qurilmada) saqlasa, u holda ishlamay qolganda u joylashgan ma'lumotlar ombori konteynerning o'zi bilan birga yangi tugunga ko'chirilishi kerak bo'ladi. Bu juda muhim, chunki aks holda konteynerda ishlaydigan dastur to'g'ri ishlay olmaydi, chunki u mahalliy mediada saqlangan ma'lumotlarga kirishi kerak. Bunday idishlarning ishlashi aytiladi davlatga tegishli.

Sof texnik nuqtai nazardan, statistik konteynerlar boshqa tugunlarga ham ko'chirilishi mumkin. Bunga odatda taqsimlangan fayl tizimlari yoki konteynerlar bilan ishlaydigan barcha tugunlarga biriktirilgan tarmoq xotirasini bloklash orqali erishiladi. Shunday qilib, konteynerlar ma'lumotlarni doimiy saqlash uchun hajmlarga kirishadi va ma'lumotlar butun tarmoq bo'ylab joylashgan disklarda saqlanadi. Men bu usulni chaqiraman "statistik konteyner yondashuvi", va maqolaning qolgan qismida men uni bir xillik uchun deb atayman.

Kubernetes-da ma'lumotlarni saqlash naqshlari

Oddiy statistik konteyner yondashuvida barcha dastur podslari yagona taqsimlangan fayl tizimiga biriktirilgan - barcha ilova ma'lumotlari joylashgan umumiy saqlash turi. Ba'zi o'zgarishlar mumkin bo'lsa-da, bu yuqori darajadagi yondashuv.

Endi keling, nima uchun statistik konteyner yondashuvi bulutga asoslangan dunyoda anti-naqsh ekanligini ko'rib chiqaylik.

Bulutli dastur dizayni

An'anaga ko'ra, ilovalar ma'lumotlar bazalarini tizimli saqlash uchun ma'lumotlar va mahalliy disklar yoki tarqatilgan fayl tizimlaridan foydalangan, bu erda barcha tuzilmagan yoki hatto yarim tizimli ma'lumotlar tashlab yuborilgan. Tarkibi tuzilmagan ma'lumotlar hajmi oshgani sayin, ishlab chiquvchilar POSIX juda suhbatdosh ekanligini, katta xarajatlarga ega ekanligini va oxir-oqibat haqiqatan ham katta miqyosga o'tishda dastur ishlashiga to'sqinlik qilishini tushunishdi.

Bu asosan ma'lumotlarni saqlashning yangi standarti, ya'ni bulutli saqlash, birinchi navbatda REST API asosida ishlaydi va dasturni mahalliy ma'lumotlarni saqlashni og'ir texnik xizmat ko'rsatishdan ozod qildi. Bunday holda, dastur samarali tarzda fuqaroligi bo'lmagan rejimga o'tadi (chunki davlat uzoqdan saqlashda). Zamonaviy ilovalar ushbu omilni hisobga olgan holda noldan qurilgan. Qoidaga ko'ra, u yoki bu turdagi ma'lumotlarni qayta ishlaydigan har qanday zamonaviy dastur (jurnallar, metama'lumotlar, bloblar va boshqalar) bulutga yo'naltirilgan paradigma bo'yicha qurilgan, bunda davlat uni saqlash uchun maxsus ajratilgan dasturiy ta'minot tizimiga o'tkaziladi.

Holatli konteyner yondashuvi bu paradigmani aynan boshlangan joyiga qaytarishga majbur qiladi!

Ma'lumotlarni saqlash uchun POSIX interfeyslaridan foydalangan holda, ilovalar xuddi shunday ishlaydi va shuning uchun ular bulutga asoslangan dizaynning eng muhim qoidalaridan, ya'ni kiruvchi ma'lumotlarga qarab dastur ishchilarining iplari hajmini o'zgartirish qobiliyatidan ajralib turadi. kiritish, yuklash, joriy tugun ishdan chiqishi bilanoq yangi tugunga o‘tish va hokazo.

Ushbu vaziyatni sinchiklab ko'rib chiqsak, ma'lumotlar omborini tanlashda biz qayta-qayta POSIX va REST API dilemmasi bilan duch kelamiz, lekin Kubernetes muhitlarining taqsimlangan tabiati tufayli POSIX muammolarining qo'shimcha kuchayishi bilan. Ayniqsa,

  • POSIX suhbatdosh: POSIX semantikasi har bir operatsiya metadata va operatsiya holatini saqlashga yordam beruvchi fayl deskriptorlari bilan bog'lanishini talab qiladi. Bu haqiqiy qiymatga ega bo'lmagan sezilarli xarajatlarga olib keladi. Ob'ektlarni saqlash API'lari, xususan S3 API, ushbu talablardan xalos bo'lib, ilovani ishga tushirishga va keyin qo'ng'iroqni "unutishga" imkon beradi. Saqlash tizimining javobi harakat muvaffaqiyatli yoki yo'qligini ko'rsatadi. Muvaffaqiyatsiz bo'lsa, dastur qayta urinib ko'rishi mumkin.
  • Tarmoq cheklovlari: Tarqalgan tizimda bir xil biriktirilgan axborot vositalariga ma'lumotlarni yozishga urinayotgan ko'plab ilovalar bo'lishi mumkinligi nazarda tutiladi. Shuning uchun, ilovalar nafaqat ma'lumotlarni uzatish o'tkazuvchanligi (ommaviy axborot vositalariga yuborish uchun) uchun bir-biri bilan raqobatlashadi, balki saqlash tizimining o'zi ma'lumotlarni jismoniy disklar bo'ylab yuborish orqali ushbu tarmoqli kengligi uchun raqobatlashadi. POSIX-ning so'zsizligi tufayli tarmoq qo'ng'iroqlari soni bir necha barobar ortadi. Boshqa tomondan, S3 API mijozdan serverga kelib chiqadigan va server ichida sodir bo'ladigan tarmoq qo'ng'iroqlari o'rtasidagi aniq farqni ta'minlaydi.
  • Xavfsizlik: POSIX xavfsizlik modeli inson faol ishtiroki uchun mo'ljallangan: ma'murlar har bir foydalanuvchi yoki guruh uchun maxsus kirish darajalarini sozlaydi. Ushbu paradigmani bulutga asoslangan dunyoga moslashtirish qiyin. Zamonaviy ilovalar API-ga asoslangan xavfsizlik modellariga bog'liq bo'lib, bu erda kirish huquqlari siyosatlar to'plami sifatida belgilanadi, xizmat hisoblari, vaqtinchalik hisobga olish ma'lumotlari va boshqalar ajratiladi.
  • Boshqaruvchilik: Statusli konteynerlarda boshqaruv xarajatlari mavjud. Biz ma'lumotlarga parallel kirishni sinxronlashtirish, ma'lumotlarning izchilligini ta'minlash haqida gapiramiz, bularning barchasi ma'lumotlarga kirishning qaysi shakllaridan foydalanishni diqqat bilan ko'rib chiqishni talab qiladi. Qo'shimcha dasturiy ta'minotni o'rnatish, nazorat qilish va sozlash kerak, qo'shimcha rivojlanish harakatlari haqida gapirmaslik kerak.

Konteyner ma'lumotlarini saqlash interfeysi

Konteynerlarni saqlash interfeysi (CSI) Kubernetes hajmli qatlamini ko'paytirishda katta yordam bergan bo'lsa-da, uni qisman uchinchi tomon saqlash sotuvchilariga autsorsing qilgan bo'lsa-da, u beixtiyor statistik konteyner yondashuvi tavsiya etilgan usul ekanligiga ishonch hosil qildi. Kubernetes-da ma'lumotlarni saqlash.

CSI Kubernetes-da ishlayotganda eski ilovalarni o'zboshimchalik bilan bloklash va fayllarni saqlash tizimlari bilan ta'minlash uchun standart sifatida ishlab chiqilgan. Va, ushbu maqolada ko'rsatilgandek, statistik konteyner yondashuvi (va hozirgi shaklda CSI) mantiqiy bo'lgan yagona vaziyat, ilovaning o'zi eski tizim bo'lib, unda ob'ektni saqlash API-ni qo'llab-quvvatlashni qo'shish mumkin emas. .

Shuni tushunish kerakki, CSI-dan hozirgi shaklda foydalanish, ya'ni zamonaviy ilovalar bilan ishlashda hajmlarni o'rnatish, biz ma'lumotlarni saqlash POSIX uslubida tashkil etilgan tizimlarda paydo bo'lgan taxminan bir xil muammolarga duch kelamiz.

Yaxshiroq yondashuv

Bunday holda, ko'pchilik ilovalar tabiatan davlat yoki fuqaroligi bo'lmagan ish uchun maxsus ishlab chiqilmaganligini tushunish muhimdir. Ushbu xatti-harakatlar tizimning umumiy arxitekturasiga va amalga oshirilgan maxsus dizayn tanlovlariga bog'liq. Keling, statistik ilovalar haqida bir oz gapiraylik.

Asos sifatida, barcha dastur ma'lumotlarini bir nechta keng turlarga bo'lish mumkin:

  • Jurnal ma'lumotlari
  • Vaqt tamg'asi ma'lumotlari
  • Tranzaksiya ma'lumotlari
  • Metadata
  • Konteyner rasmlari
  • Blob (ikkilik katta ob'ekt) ma'lumotlari

Ushbu ma'lumotlar turlarining barchasi zamonaviy saqlash platformalarida juda yaxshi qo'llab-quvvatlanadi va ushbu o'ziga xos formatlarning har birida ma'lumotlarni etkazib berish uchun moslashtirilgan bir nechta bulutli platformalar mavjud. Masalan, tranzaksiya ma'lumotlari va metama'lumotlar CockroachDB, YugaByte va boshqalar kabi zamonaviy bulutli mahalliy ma'lumotlar bazasida bo'lishi mumkin. Konteyner tasvirlari yoki blob ma'lumotlari MiniIO asosidagi docker registrida saqlanishi mumkin. Vaqt tamg'asi ma'lumotlari InfluxDB va boshqalar kabi vaqt seriyali ma'lumotlar bazasida saqlanishi mumkin. Biz bu yerda har bir maʼlumot turi va unga bogʻliq ilovalar haqida batafsil toʻxtalib oʻtmaymiz, lekin umumiy fikr mahalliy diskni oʻrnatishga tayanadigan doimiy maʼlumotlarni saqlashdan qochishdir.

Kubernetes-da ma'lumotlarni saqlash naqshlari

Bundan tashqari, ko'pincha ilovalar uchun vaqtinchalik fayllar do'koni bo'lib xizmat qiluvchi vaqtinchalik keshlash qatlamini ta'minlash samarali bo'ladi, lekin ilovalar haqiqat manbai sifatida ushbu qatlamga bog'liq bo'lmasligi kerak.

Shtatli ilovalarni saqlash

Ko'pgina hollarda ilovalarni fuqaroliksiz saqlash foydali bo'lsa-da, ma'lumotlar bazalari, ob'ektlar do'konlari, kalit-qiymatlar do'konlari kabi ma'lumotlarni saqlash uchun mo'ljallangan ilovalar holati bo'lishi kerak. Keling, ushbu ilovalar nima uchun Kubernetes-da joylashtirilganini ko'rib chiqaylik. Misol sifatida MiniIO ni olaylik, ammo shunga o'xshash printsiplar boshqa har qanday yirik bulutli mahalliy saqlash tizimiga tegishli.

Bulutli mahalliy ilovalar konteynerlarga xos bo'lgan moslashuvchanlikdan to'liq foydalanish uchun mo'ljallangan. Bu ular joylashtiriladigan muhit haqida hech qanday taxmin qilmasliklarini anglatadi. Misol uchun, MiniIO tizimni disklarning yarmi ishlamay qolgan taqdirda ham ishlashni davom ettirish uchun etarli chidamlilikni ta'minlash uchun ichki o'chirish kodlash mexanizmidan foydalanadi. MiniIO shuningdek, xususiy server tomonidagi xesh va shifrlash yordamida ma'lumotlar yaxlitligi va xavfsizligini boshqaradi.

Bunday bulutga asoslangan ilovalar uchun mahalliy doimiy hajmlar (PV) zaxira saqlash sifatida eng qulaydir. Mahalliy PV xom ma'lumotlarni saqlash qobiliyatini ta'minlaydi, shu bilan birga, ushbu PV-lar ustida ishlaydigan ilovalar ma'lumotlarni masshtablash va o'sib borayotgan ma'lumotlar talablarini boshqarish uchun mustaqil ravishda ma'lumot to'playdi.

Bu yondashuv CSI-ga asoslangan PV-larga qaraganda ancha sodda va sezilarli darajada kengaytirilishi mumkin, ular tizimga o'zlarining ma'lumotlarni boshqarish va ortiqcha qatlamlarini kiritadilar; Gap shundaki, bu qatlamlar odatda holatni ko'rsatish uchun mo'ljallangan ilovalar bilan ziddir.

Hisob-kitoblardan ma'lumotlarni ajratish bo'yicha kuchli harakat

Ushbu maqolada biz ilovalarning holatini saqlamasdan ishlashga qanday yo'naltirilganligi yoki boshqacha qilib aytganda, ma'lumotlarni saqlash undagi hisoblashdan ajratilganligi haqida gaplashdik. Xulosa qilib aytganda, keling, ushbu tendentsiyaning bir nechta haqiqiy misollarini ko'rib chiqaylik.

uchqun, taniqli ma'lumotlarni tahlil qilish platformasi, an'anaviy tarzda HDFS-da joylashtirilgan va joylashtirilgan. Biroq, Spark bulutga asoslangan dunyoga o'tishi bilan platforma `s3a` yordamida fuqaroligi bo'lmagan holda tobora ko'proq foydalanilmoqda. Spark holatini boshqa tizimlarga o'tkazish uchun s3a dan foydalanadi, Spark konteynerlarining o'zi esa butunlay fuqaroligisiz ishlaydi. Katta ma'lumotlar tahlili sohasidagi boshqa yirik korporativ o'yinchilar, xususan, Vertika, Teradata, Yashil olxo'ri Ular, shuningdek, ma'lumotlarni saqlash va ular bo'yicha hisob-kitoblarni ajratish bilan ishlashga o'tmoqda.

Shunga o'xshash naqshlarni boshqa yirik tahliliy platformalarda ham ko'rish mumkin, jumladan Presto, Tensorflow to R, Jupyter. Holatni masofaviy bulutli saqlash tizimlariga yuklash orqali ilovangizni boshqarish va masshtablash ancha osonlashadi. Bundan tashqari, u turli xil muhitlarga ilovani ko'chirishni osonlashtiradi.

Manba: www.habr.com

a Izoh qo'shish