Maqolaning tarjimasi kurs talabalari uchun maxsus tayyorlangan
Bizning flagman mahsulotimiz SpatialOS ga qarab, Improbable o'nlab Kubernetes klasterlariga ega bo'lgan yuqori dinamik, global miqyosdagi bulutli infratuzilmani talab qilishini taxmin qilishingiz mumkin. Biz birinchilardan bo‘lib monitoring tizimidan foydalandik
Prometeyning soddaligi va ishonchliligi uning asosiy afzalliklaridan biridir. Biroq, ma'lum bir o'lchovdan o'tganimizdan so'ng, biz bir nechta kamchiliklarga duch keldik. Ushbu muammolarni hal qilish uchun biz ishlab chiqdik
Thanos bilan bizning maqsadlarimiz
Muayyan miqyosda vanil Prometeyning imkoniyatlaridan tashqarida bo'lgan muammolar paydo bo'ladi. Tarixiy ma'lumotlarning petabaytlarini qanday ishonchli va iqtisodiy saqlash kerak? Buni javob vaqtini buzmasdan qilish mumkinmi? Bitta API so'rovi bilan turli Prometey serverlarida joylashgan barcha ko'rsatkichlarga kirish mumkinmi? Prometey HA yordamida to'plangan takrorlangan ma'lumotlarni birlashtirishning biron bir usuli bormi?
Ushbu muammolarni hal qilish uchun biz Thanos-ni yaratdik. Keyingi bo'limlarda biz ushbu masalalarga qanday yondashganimiz va maqsadlarimizni tushuntiramiz.
Bir nechta Prometey misollaridan ma'lumotlarni so'rash (global so'rov)
Prometey sharding uchun funktsional yondashuvni taklif qiladi. Hatto bitta Prometey serveri deyarli barcha foydalanish holatlarida foydalanuvchilarni gorizontal parchalanishning murakkabligidan ozod qilish uchun etarli darajada kengayishni ta'minlaydi.
Bu ajoyib joylashtirish modeli bo'lsa-da, ko'pincha bitta API yoki UI - global ko'rinish orqali turli Prometey serverlaridagi ma'lumotlarga kirish kerak bo'ladi. Albatta, bitta Grafana panelida bir nechta so'rovlarni ko'rsatish mumkin, ammo har bir so'rov faqat bitta Prometey serverida bajarilishi mumkin. Boshqa tomondan, Thanos yordamida siz bir nechta Prometey serverlaridan ma'lumotlarni so'rashingiz va to'plashingiz mumkin, chunki ularning barchasiga bitta so'nggi nuqtadan kirish mumkin.
Ilgari Improbable-da global ko'rinishga ega bo'lish uchun biz Prometey misollarimizni ko'p darajali qilib tashkil qildik.
Ushbu yondashuv muammoli bo'lib chiqdi. Buning natijasida yanada murakkab konfiguratsiyalar, qo'shimcha potentsial nosozlik nuqtasi qo'shildi va federatsiyalangan so'nggi nuqta faqat kerakli ma'lumotlarni olishini ta'minlash uchun murakkab qoidalar qo'llaniladi. Bundan tashqari, bunday federatsiya haqiqiy global ko'rinishga ega bo'lishga imkon bermaydi, chunki bitta API so'rovidan barcha ma'lumotlar mavjud emas.
Yuqori darajadagi (HA) Prometey serverlarida to'plangan ma'lumotlarning yagona ko'rinishi bunga chambarchas bog'liq. Prometeyning HA modeli mustaqil ravishda ma'lumotlarni ikki marta to'playdi, bu shunchalik soddaki, bundan oddiyroq bo'lishi mumkin emas. Shu bilan birga, ikkala oqimning birlashtirilgan va nusxalangan ko'rinishidan foydalanish ancha qulayroq bo'ladi.
Albatta, yuqori darajada mavjud Prometey serverlariga ehtiyoj bor. Improbable-da biz ma'lumotlarni daqiqama-daqiqa monitoringini juda jiddiy qabul qilamiz, ammo har bir klasterda bitta Prometey nusxasiga ega bo'lish - bu bitta muvaffaqiyatsizlik nuqtasi. Har qanday konfiguratsiya xatosi yoki apparatdagi nosozlik muhim ma'lumotlarning yo'qolishiga olib kelishi mumkin. Hatto oddiy o'rnatish ham ko'rsatkichlarni to'plashda kichik uzilishlarga olib kelishi mumkin, chunki qayta ishga tushirish qirqish oralig'idan sezilarli darajada uzoqroq bo'lishi mumkin.
Tarixiy ma'lumotlarni ishonchli saqlash
Arzon, tez, uzoq muddatli o'lchovlarni saqlash bizning orzuimizdir (ko'pchilik Prometey foydalanuvchilari tomonidan baham ko'riladi). Improbable-da biz o'lchovlarni saqlash muddatini to'qqiz kunga (Prometey 1.8 uchun) sozlashga majbur bo'ldik. Bu biz orqaga qarashimiz mumkin bo'lgan aniq chegaralarni qo'shadi.
Prometheus 2.0 bu borada yaxshilandi, chunki vaqt seriyalari soni endi serverning umumiy ishlashiga ta'sir qilmaydi (qarang.
Bundan tashqari, Improbable-da biz ishonchlilik, soddalik va narx haqida qayg'uramiz. Katta mahalliy disklarni ishlatish va zaxiralash qiyinroq. Ular qimmatroq va ko'proq zaxira vositalarini talab qiladi, bu esa keraksiz murakkablikni keltirib chiqaradi.
Namunalarni qisqartirish
Tarixiy ma'lumotlar bilan ishlashni boshlaganimizdan so'ng, biz haftalar, oylar va yillar ma'lumotlari bilan ishlaganimizda so'rovlarni sekinlashtiradigan va sekinlashtiradigan big-O bilan asosiy qiyinchiliklar mavjudligini tushundik.
Ushbu muammoning standart echimi bo'ladi
Eski ma'lumotlarning namunalarini qisqartirish har qanday uzoq muddatli saqlash yechimining muqarrar talabi bo'lib, vanil Prometey doirasidan tashqarida.
Qo'shimcha maqsadlar
Thanos loyihasining asl maqsadlaridan biri mavjud Prometey qurilmalari bilan muammosiz integratsiya qilish edi. Ikkinchi maqsad - kirish uchun minimal to'siqlar bilan ishlash qulayligi. Har qanday bog'liqliklar ham kichik, ham katta foydalanuvchilar uchun osonlik bilan qondirilishi kerak, bu ham past tayanch xarajat degan ma'noni anglatadi.
Thanos arxitekturasi
Oldingi bo'limda maqsadlarimizni sanab o'tganimizdan so'ng, keling, ular ustida ishlaymiz va Thanos bu muammolarni qanday hal qilishini ko'rib chiqamiz.
Global ko'rinish
Mavjud Prometey misollari ustida global ko'rinishga ega bo'lish uchun biz barcha serverlarga bitta so'rov kirish nuqtasini bog'lashimiz kerak. Thanos komponenti aynan shunday qiladi.
Boshqa tomonda esa standart Prometheus HTTP API orqali PromQL so'rovlariga javob berishdan ko'ra ko'proq narsani qilmaydigan kengaytirilgan, fuqaroligi bo'lmagan Querier komponenti mavjud. Querier, Sidecar va boshqa Thanos komponentlari orqali muloqot qiladi
- Querier, so'rovni olgandan so'ng, tegishli Store API serveriga, ya'ni bizning Sidecars-ga ulanadi va tegishli Prometey serverlaridan vaqt seriyasi ma'lumotlarini oladi.
- Shundan so'ng, u javoblarni birlashtiradi va ular bo'yicha PromQL so'rovini bajaradi. Querier Prometheus HA serverlaridan ajratilgan ma'lumotlarni va takroriy ma'lumotlarni birlashtirishi mumkin.
Bu bizning jumboqimizning asosiy qismini hal qiladi - izolyatsiya qilingan Prometey serverlari ma'lumotlarini yagona ko'rinishda birlashtirish. Aslida, Thanos faqat ushbu xususiyat uchun ishlatilishi mumkin. Mavjud Prometey serverlariga hech qanday o'zgartirish kiritish shart emas!
Cheksiz saqlash muddati!
Biroq, ertami-kechmi biz Prometeyning odatdagi saqlash vaqtidan tashqari ma'lumotlarni saqlashni xohlaymiz. Tarixiy ma'lumotlarni saqlash uchun ob'ektni saqlashni tanladik. U har qanday bulutda, shuningdek, mahalliy ma'lumotlar markazlarida keng tarqalgan va juda tejamkor. Bundan tashqari, deyarli har qanday ob'ektni saqlash taniqli S3 API orqali mavjud.
Prometey ma'lumotlarni RAMdan diskka taxminan har ikki soatda yozadi. Saqlangan ma'lumotlar bloki ma'lum bir vaqt uchun barcha ma'lumotlarni o'z ichiga oladi va o'zgarmasdir. Bu juda qulay, chunki Thanos Sidecar shunchaki Prometey ma'lumotlar katalogiga qarashi va yangi bloklar paydo bo'lishi bilan ularni ob'ektlarni saqlash paqirlariga yuklashi mumkin.
Diskga yozgandan so'ng darhol ob'ekt xotirasiga yuklash, shuningdek, qirg'ichning soddaligini saqlashga imkon beradi (Prometey va Thanos Sidecar). Bu qo'llab-quvvatlash, xarajatlar va tizim dizaynini soddalashtiradi.
Ko'rib turganingizdek, ma'lumotlarni zaxiralash juda oddiy. Ammo ob'ektni saqlashda ma'lumotlarni so'rash haqida nima deyish mumkin?
Thanos Store komponenti ob'ekt xotirasidan ma'lumotlarni olish uchun proksi-server vazifasini bajaradi. Thanos Sidecar singari, u g'iybat klasterida ishtirok etadi va Store API-ni amalga oshiradi. Shunday qilib, mavjud Querier uni boshqa vaqt seriyali ma'lumotlar manbai sifatida Sidecar kabi ko'rib chiqishi mumkin - maxsus konfiguratsiya talab qilinmaydi.
Vaqt seriyali ma'lumotlar bloklari bir nechta katta fayllardan iborat. Ularni talab bo'yicha yuklash unchalik samarasiz bo'lardi va ularni lokal ravishda keshlash katta hajmdagi xotira va disk maydonini talab qiladi.
Buning o'rniga, Store Gateway Prometey xotira formatini qanday boshqarishni biladi. Aqlli so'rovlar rejalashtiruvchisi va bloklarning faqat kerakli indeks qismlarini keshlash tufayli, murakkab so'rovlarni ob'ektni saqlash fayllariga HTTP so'rovlarining minimal soniga kamaytirish mumkin. Shunday qilib, siz so'rovlar sonini to'rt-olti darajaga kamaytirishingiz va odatda so'rovlardan mahalliy SSD-dagi ma'lumotlarga ajratish qiyin bo'lgan javob vaqtlariga erishishingiz mumkin.
Yuqoridagi diagrammada ko'rsatilganidek, Thanos Querier Prometey saqlash formatidan foydalanish va tegishli ma'lumotlarni yonma-yon joylashtirish orqali ob'ektni saqlash ma'lumotlari so'rovi narxini sezilarli darajada kamaytiradi. Ushbu yondashuvdan foydalanib, biz ko'plab yagona so'rovlarni minimal miqdordagi ommaviy operatsiyalarga birlashtira olamiz.
Siqilish va namuna olish
Vaqt seriyali ma'lumotlarining yangi bloki ob'ekt xotirasiga muvaffaqiyatli yuklangandan so'ng, biz uni "tarixiy" ma'lumotlar sifatida ko'rib chiqamiz, ular darhol Store Gateway orqali mavjud.
Biroq, bir muncha vaqt o'tgach, bitta manbadan bloklar (Sidecar bilan Prometey) to'planadi va endi to'liq indekslash potentsialidan foydalanmaydi. Ushbu muammoni hal qilish uchun biz Compactor deb nomlangan boshqa komponentni taqdim etdik. U oddiygina Prometeyning mahalliy siqishni mexanizmini ob'ektni saqlashdagi tarixiy ma'lumotlarga qo'llaydi va oddiy davriy paketli ish sifatida ishlatilishi mumkin.
Samarali siqish tufayli saqlashni uzoq vaqt davomida so'rash ma'lumotlar hajmi bo'yicha muammo tug'dirmaydi. Biroq, milliardlab qiymatlarni ochish va ularni so'rov protsessori orqali ishga tushirishning potentsial qiymati muqarrar ravishda so'rovlarni bajarish vaqtini keskin oshirishga olib keladi. Boshqa tomondan, ekranda har bir piksel uchun yuzlab ma'lumotlar nuqtalari mavjud bo'lganligi sababli, ma'lumotlarni to'liq piksellar sonida tasavvur qilish ham imkonsiz bo'lib qoladi. Shunday qilib, namunani pasaytirish nafaqat mumkin, balki aniqlikning sezilarli yo'qolishiga olib kelmaydi.
Ma'lumotlarni pasaytirish uchun Compactor doimiy ravishda besh daqiqa va bir soatlik ruxsatda ma'lumotlarni jamlaydi. TSDB XOR siqish yordamida kodlangan har bir xom bo'lak uchun har xil turdagi jamlangan ma'lumotlar saqlanadi, masalan, bitta blok uchun min, maksimal yoki yig'indisi. Bu Querier-ga berilgan PromQL so'roviga mos keladigan agregatni avtomatik ravishda tanlash imkonini beradi.
Foydalanuvchi tomonidan qisqartirilgan aniqlikdagi ma'lumotlardan foydalanish uchun maxsus konfiguratsiya talab qilinmaydi. Foydalanuvchi kattalashtirish va kichraytirishda Querier avtomatik ravishda turli ruxsatlar va xom maʼlumotlar oʻrtasida almashinadi. Agar so'ralsa, foydalanuvchi buni to'g'ridan-to'g'ri so'rovdagi "qadam" parametri orqali boshqarishi mumkin.
Bir GB saqlash narxi past bo'lganligi sababli, sukut bo'yicha Thanos xom ma'lumotlarni, besh daqiqalik va bir soatlik ruxsatli ma'lumotlarni saqlaydi. Asl ma'lumotlarni o'chirishning hojati yo'q.
Yozib olish qoidalari
Hatto Thanos bilan ham yozib olish qoidalari monitoring stekining muhim qismidir. Ular so'rovlarning murakkabligi, kechikish va narxini kamaytiradi. Shuningdek, ular foydalanuvchilarga ko'rsatkichlar bo'yicha jamlangan ma'lumotlarni olishlari uchun qulaydir. Thanos vanil Prometey misollariga asoslangan, shuning uchun mavjud Prometey serverida yozib olish qoidalari va ogohlantirish qoidalarini saqlash juda maqbuldir. Biroq, ba'zi hollarda bu etarli bo'lmasligi mumkin:
- Global ogohlantirish va qoida (masalan, xizmat uchta klasterdan ikkitadan ortiq ishlamasa, ogohlantirish).
- Mahalliy xotiradan tashqarida ma'lumotlar uchun qoida.
- Barcha qoidalar va ogohlantirishlarni bir joyda saqlash istagi.
Ushbu barcha holatlar uchun Thanos Ruler deb nomlangan alohida komponentni o'z ichiga oladi, u Thanos so'rovlari orqali qoida va ogohlantirishni hisoblaydi. Taniqli StoreAPI-ni taqdim etish orqali So'rovlar tugunlari yangi hisoblangan ko'rsatkichlarga kirishlari mumkin. Keyinchalik ular ob'ekt xotirasida saqlanadi va Store Gateway orqali taqdim etiladi.
Thanosning kuchi
Thanos sizning ehtiyojlaringizga mos ravishda sozlanishi uchun etarlicha moslashuvchan. Bu, ayniqsa, oddiy Prometeydan ko'chib o'tishda foydalidir. Keling, Thanos komponentlari haqida bilib olganlarimizni qisqacha misol bilan takrorlaylik. Vanil Prometeyni "cheksiz o'lchovlarni saqlash" dunyosiga qanday olib kirish mumkin:
- Prometey serverlaringizga Thanos Sidecar qo'shing - masalan, Kubernetes podasidagi yonbosh konteyneri.
- Ma'lumotlarni ko'rish uchun bir nechta Thanos Querier replikalarini joylashtiring. Ushbu bosqichda Scraper va Querier o'rtasida g'iybatni o'rnatish oson. Komponentlarning o'zaro ta'sirini tekshirish uchun "thanos_cluster_members" ko'rsatkichidan foydalaning.
Prometey HA ning potentsial nusxalaridan global ko'rinish va uzluksiz ma'lumotlarning takrorlanishini ta'minlash uchun faqat shu ikki qadam kifoya! Shunchaki boshqaruv panelini Querier HTTP so‘nggi nuqtasiga ulang yoki to‘g‘ridan-to‘g‘ri Thanos UI dan foydalaning.
Ammo, agar sizga o'lchovlarni zaxiralash va uzoq muddatli saqlash kerak bo'lsa, yana uchta qadamni bajarishingiz kerak bo'ladi:
- AWS S3 yoki GCS paqirini yarating. Sidecar-ni ushbu chelaklarga ma'lumotlarni nusxalash uchun sozlang. Endi mahalliy ma'lumotlarni saqlashni minimallashtirish mumkin.
- Store Gateway-ni o'rnating va uni mavjud g'iybat klasteringizga ulang. Endi siz zaxiralangan ma'lumotlarni so'rashingiz mumkin!
- Siqilish va namuna olishdan foydalangan holda uzoq vaqt davomida so'rovlar samaradorligini oshirish uchun Compactor-ni joylashtiring.
Agar siz ko'proq ma'lumotga ega bo'lishni istasangiz, bizni ko'rib chiqing
Atigi besh bosqichda biz Prometeyni global ko'rinishga ega, cheksiz saqlash vaqti va ko'rsatkichlarning potentsial yuqori mavjudligi bilan ishonchli monitoring tizimiga aylantirdik.
So'rovni oling: biz sizga keraksiz!
Biz har doim GitHub Pull so'rovlari va muammolarini qabul qilamiz. Ayni paytda, Github Issues yoki slack orqali biz bilan bog'laning
Manba: www.habr.com