Thanos - kengaytiriladigan Prometey

Maqolaning tarjimasi kurs talabalari uchun maxsus tayyorlangan "DevOps amaliyotlari va vositalari".

Fabian Reynartz dasturiy ta'minot ishlab chiqaruvchisi, Go fanatik va muammolarni hal qiluvchi. U, shuningdek, Prometey boshqaruvchisi va Kubernetes SIG asboblari asoschilaridan biri. Ilgari u SoundCloud-da ishlab chiqarish muhandisi bo'lgan va CoreOS-da monitoring guruhini boshqargan. Hozirda Googleda ishlaydi.

Bartek Plotka - Improbable kompaniyasida infratuzilma muhandisi. U yangi texnologiyalar va taqsimlangan tizimlar muammolari bilan qiziqadi. U Intel’da past darajadagi dasturlash tajribasiga, Mesos’da hissa qo‘shish tajribasiga va Improbable’da jahon darajasidagi SRE ishlab chiqarish tajribasiga ega. Mikroservislar dunyosini yaxshilashga bag'ishlangan. Uning uchta sevgisi: Golang, ochiq manba va voleybol.

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 Prometheus. Prometey real vaqtda millionlab ko'rsatkichlarni kuzatishga qodir va kerakli ma'lumotlarni olish imkonini beruvchi kuchli so'rovlar tili bilan birga keladi.

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 mavjud Prometey klasterlarini cheksiz tarixiy ma'lumotlarni saqlashga ega yagona monitoring tizimiga muammosiz aylantirish uchun Improbable tomonidan yaratilgan ochiq kodli loyiha. Thanos Github-da mavjud shu yerda.

Improbable-dan so'nggi yangiliklardan xabardor bo'ling.

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. Ierarxik federatsiya. Bu har bir barg serveridan ba'zi ko'rsatkichlarni to'playdigan bitta Prometey meta-serverini yaratishni anglatadi.

Thanos - kengaytiriladigan Prometey

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. KubeCon Prometey 2 haqidagi asosiy ma'ruza). Biroq, Prometey ma'lumotlarni mahalliy diskda saqlaydi. Yuqori samarali ma'lumotlarni siqish mahalliy SSD-dan foydalanishni sezilarli darajada kamaytirishi mumkin bo'lsa-da, saqlanishi mumkin bo'lgan tarixiy ma'lumotlar miqdori uchun cheklov mavjud.

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 namunani pasaytirish (pastki namuna olish) - signalni tanlash chastotasini kamaytirish. Namunalarni pasaytirish bilan biz kattaroq vaqt oralig‘iga “kichraytirishimiz” va so‘rovlarga javob beradigan bir xil miqdordagi namunalarni saqlashimiz mumkin.

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. Sidekar. U har bir Prometey serveri yonida oʻrnatiladi va proksi-server vazifasini bajaradi, mahalliy Prometey maʼlumotlariga gRPC Store API orqali xizmat koʻrsatadi va vaqt seriyasi maʼlumotlarini teg va vaqt oraligʻi boʻyicha olish imkonini beradi.

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 g'iybat protokoli.

Thanos - kengaytiriladigan Prometey

  1. 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.
  2. 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.

Thanos - kengaytiriladigan Prometey

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.

Thanos - kengaytiriladigan Prometey

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.

Thanos - kengaytiriladigan Prometey

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.

Thanos - kengaytiriladigan Prometey

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.

Thanos - kengaytiriladigan Prometey

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.

Thanos - kengaytiriladigan Prometey

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:

Thanos - kengaytiriladigan Prometey

  1. Prometey serverlaringizga Thanos Sidecar qo'shing - masalan, Kubernetes podasidagi yonbosh konteyneri.
  2. 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:

  1. AWS S3 yoki GCS paqirini yarating. Sidecar-ni ushbu chelaklarga ma'lumotlarni nusxalash uchun sozlang. Endi mahalliy ma'lumotlarni saqlashni minimallashtirish mumkin.
  2. Store Gateway-ni o'rnating va uni mavjud g'iybat klasteringizga ulang. Endi siz zaxiralangan ma'lumotlarni so'rashingiz mumkin!
  3. 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 kubernetlar yaqqol misollardir и ishni boshlash!

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!

Thanos boshidanoq ochiq kodli loyiha bo'lib kelgan. Prometey bilan uzluksiz integratsiya va Thanos-ning faqat bir qismini ishlatish qobiliyati uni monitoring tizimingizni osonlikcha kengaytirish uchun ajoyib tanlov qiladi.

Biz har doim GitHub Pull so'rovlari va muammolarini qabul qilamiz. Ayni paytda, Github Issues yoki slack orqali biz bilan bog'laning Improbable-eng #thanosAgar sizda savollar yoki fikr-mulohazalaringiz bo'lsa yoki undan foydalanish tajribangizni baham ko'rmoqchi bo'lsangiz! Improbable-da qilayotgan ishimiz sizga yoqsa, biz bilan bog'lanishdan tortinmang - bizda doimo bo'sh ish o'rinlari bor!

Kurs haqida ko'proq bilib oling.

Manba: www.habr.com

a Izoh qo'shish