Programming ∀
Endi bunga write streamlar qo'shish kerak va agar man biror structure berib shuni journalga yozsam o'zi encode qilib streamga tashlashi kerak. Shunda bunaqa tassavur qilsangiz bo'ladi. Har bir journal entry bu raw Har bir entry field bu column. Ammo journal…
Tiplarni journalga implement qilishga bitta sabab topdim.
1. Loglarni render qilish kerak. Journalga hohlagancha narsa yozib tashlayverganingiz bilan hali muammoni report qilinganda o'sha journalni view qiladiganlar ham tushuna olishi kerak.
2. Reportdan olingan dump file ichida aniq duplicated narsalar bo'ladi, masalan muammo kernel oops bilan boshlandi va shu sababli boshqa joylarga ham tasir qildi, natija tizimda nimadurlar buzildi lekin bunaqa holatda loglarni ko'rsangiz doyim ham bitta bo'lmaydi yani sabablar zanjiri. Demak journalni indexlay olish muhimroq ammo indexlar read journal qilinganda bo'lmaydi mavjud journal data fileni o'qib undan index yasash kerak va bu yaqin kelajakda bo'ladi.
Bu holatda esa eng boshlang'ich yechim journal entrylarga tiplar qo'shish. Ho'sh qanday bo'ladi ?
Yechimlar unchalik qiyin emas hayolga 2tasi keldi.
1. Har bir field o'zini tipiga ega bo'ladi. Bunda boshlang'ich 1 yoki 4 byte offset type representation bo'ladi. Masalan 1 kelsa 32bit int, 2 kelsa 64, 3 kelsa string vaxakazo.
2. Bufferlar indexlari bo'yicha type schemalar. Bu holatda biz har bir entryga metadataga schema qo'shib ketamiz. Masalan bizni entryda 3ta field bor. Metadatagi N byte tuple bo'ladi va u yerda schema turadi: (3,3,2) Bu yerda entry field order o'zgarsa ham farqi yo'q kombinatsiyalar mos kelaveradi.
Yana bir biroz murakkabroq va chalaroq fikr bor ammo potential storage efficient, recorda tag bor yani type constructor tag bo'lib olgan. Aslida bu unchalik tog'ri ham emas chunki code o'zgarishi mumkin va turli tillarda constructor namelar turlicha. Shu sabab shunchaki strukturani identity qilish kerak hayolga birinchi kelgan yechim bu Duck typing. Ammo bizda juda muhim nuans shundaki journalni oddiy user journalni o'qimaydi, shu sababli biz auto indexing qilsak bo'ladi. Masalan journal dump yuborilganidan kegin bizga kelib tushganida alohida indexing bo'ladi. Yani xinux ishlayotgan joyda indexlash vaxakazolarga umuman extiyoj bo'lmaydi uyoqda hamma narsa write oriented bo'ladi. Lekin journal bizga kelganida biz uni o'qishdan oldin read oriented qilib olamiz )). Xozircha bu narsa biroz hom, agar fikrlar bo'lsa aytilar.
1. Loglarni render qilish kerak. Journalga hohlagancha narsa yozib tashlayverganingiz bilan hali muammoni report qilinganda o'sha journalni view qiladiganlar ham tushuna olishi kerak.
2. Reportdan olingan dump file ichida aniq duplicated narsalar bo'ladi, masalan muammo kernel oops bilan boshlandi va shu sababli boshqa joylarga ham tasir qildi, natija tizimda nimadurlar buzildi lekin bunaqa holatda loglarni ko'rsangiz doyim ham bitta bo'lmaydi yani sabablar zanjiri. Demak journalni indexlay olish muhimroq ammo indexlar read journal qilinganda bo'lmaydi mavjud journal data fileni o'qib undan index yasash kerak va bu yaqin kelajakda bo'ladi.
Bu holatda esa eng boshlang'ich yechim journal entrylarga tiplar qo'shish. Ho'sh qanday bo'ladi ?
Yechimlar unchalik qiyin emas hayolga 2tasi keldi.
1. Har bir field o'zini tipiga ega bo'ladi. Bunda boshlang'ich 1 yoki 4 byte offset type representation bo'ladi. Masalan 1 kelsa 32bit int, 2 kelsa 64, 3 kelsa string vaxakazo.
2. Bufferlar indexlari bo'yicha type schemalar. Bu holatda biz har bir entryga metadataga schema qo'shib ketamiz. Masalan bizni entryda 3ta field bor. Metadatagi N byte tuple bo'ladi va u yerda schema turadi: (3,3,2) Bu yerda entry field order o'zgarsa ham farqi yo'q kombinatsiyalar mos kelaveradi.
Yana bir biroz murakkabroq va chalaroq fikr bor ammo potential storage efficient, recorda tag bor yani type constructor tag bo'lib olgan. Aslida bu unchalik tog'ri ham emas chunki code o'zgarishi mumkin va turli tillarda constructor namelar turlicha. Shu sabab shunchaki strukturani identity qilish kerak hayolga birinchi kelgan yechim bu Duck typing. Ammo bizda juda muhim nuans shundaki journalni oddiy user journalni o'qimaydi, shu sababli biz auto indexing qilsak bo'ladi. Masalan journal dump yuborilganidan kegin bizga kelib tushganida alohida indexing bo'ladi. Yani xinux ishlayotgan joyda indexlash vaxakazolarga umuman extiyoj bo'lmaydi uyoqda hamma narsa write oriented bo'ladi. Lekin journal bizga kelganida biz uni o'qishdan oldin read oriented qilib olamiz )). Xozircha bu narsa biroz hom, agar fikrlar bo'lsa aytilar.
Hamma Linux borligini bilib qolib pingvini rasmini qo'yabti deb o'ylabman.
😁21🤣13
Bizni relago journaldagi muammolarni aniqlaydi va report tayyorlaydi.
Qiziq joyi shundaki u ham systemd service bo'lib ishlaydi va hamma servislar kabi unga ham stdout va stderr beriladi. Odatad bu streamlar journalga ulanadi va agar shunday qilinsa qiziq hodisa bo'ladi:
Tassavur qiling relago o'zida muammo chiqdi, stdoutdan o'zini muammosini catch qiladi. Agar nimadir bo'lib journaldan kelgan streamni parse qilolmagani uchun muammo bo'lsa bu jarayon rekursiv davom etadi.
Qiziq joyi shundaki u ham systemd service bo'lib ishlaydi va hamma servislar kabi unga ham stdout va stderr beriladi. Odatad bu streamlar journalga ulanadi va agar shunday qilinsa qiziq hodisa bo'ladi:
Tassavur qiling relago o'zida muammo chiqdi, stdoutdan o'zini muammosini catch qiladi. Agar nimadir bo'lib journaldan kelgan streamni parse qilolmagani uchun muammo bo'lsa bu jarayon rekursiv davom etadi.