1. Kirish va amalga oshirish fonlari
Katta kasalxonalar uchun keyingi avlodni qurish loyihasining test bosqichida har kuni minglab loglar bormaqda. Test jarayonida yuzaga keladigan nosozliklarni tezda aniqlash va sifatni tekshirish uchun har kuni loglarni to'g'ridan-to'g'ri ko'rib chiqib, xato turlarini tasniflash va tartibga solish jarayoni zarur edi.
O vaqt standartiga ko'ra, xato hisobotlarini qo'l bilan tayyorlash uchun kuniga o'rtacha 1 soatgacha vaqt ketardi va log ko'pligi bo'lgan kunlarda undan ko'proq vaqt olib ketishi mumkin edi. Shuningdek, qo'l bilan tayyorlash xususiyatidan kelib chiqib, yo'qotish yoki noto'g'ri tasnif qilish ehtimoli ham mavjud edi.
Shunga muvofiq, quyidagi maqsadlarga ega bo'lgan avtomatlashtirilgan tizimni bevosita rejalashtirib, ishlab chiqdik.
-
Takrorlanuvchi qo'lda bajarishlarni olib tashlash
-
Katta hajmdagi loglarni barqaror qayta ishlash imkonini beruvchi hisobot tizimini yaratish
-
Har kim bir xil shakldagi hisobni darhol yaratish imkonini beruvchi API taqdim etadi
-
Kelajakda qo'shimcha tahlil talablariga ham moslashuvchan yondashadigan tuzilma loyihalash
Natijada Apache POI asosidagi Excel reporting avtomatlashtirish API ni qurish orqali, mavjud qo'lda bajariladigan log tahlil jarayonini to'liq avtomatlashtirish imkoniyatiga ega bo'ldik.
2. Apache POI kiritish fonida va texnologiya tanlash jarayoni
2-1. Hisobot shaklini tanlash sabablari
Dastlab, ma'lumotlarni oddiy JSON javob shaklida taqdim etish variantini ko'rib chiqdik.
Ammo, lekin haqiqiy test amaliyotida ko'pchilik ishchilar ma'lumotlarni Excel asosida ko'rib chiqmoqda va quyidagi sabablarga ko'ra Excel formati eng mos keladi deb hisoblaymiz.
-
Test mas'uli va haqiqiy foydalanuvchilar eng ko'p tanish bo'lgan format
-
Tartib, filtr, shartli qidiruv kabi funksiyalar juda oson
-
Qo'shimcha tahlil va ikkinchi qayta ishlash oson
-
Emailni qo'shish va bo'lishi oson va operatsion hisobot materiallari sifatida ham darhol qo'llanilishi mumkin
Ayniqsa, oddiygina “loglarni ko'rish” darajasidan tashqari,
Amalga ish faoliyatida va sinov maydonlarida darhol foydalanish mumkin bo'lgan natijalar yaratish muhim deb hisobladik.
Shunga qarab, oxirgi natija formatini Excel (.xlsx) asosida belgilashga qaror qildik.
2-2. Apache POI tanlash sabablari
Excel yaratish kutubxonasini tanlash jarayonida bir nechta variantlar ko'rib chiqildi.
Ushbu jarayonda eng muhim hisobga olingan omillar quyidagilardir.
1) Katta hajmdagi ma'lumotlar bilan ishlash barqarorligi
Bir kun yuz minglab kengaytirilgan ma'lumotlarni qayta ishlashimiz kerak edi, shuning uchun xotira barqarorligi eng muhim omil edi. Oddiy Excel kutubxonalarida barcha ma'lumotlarni xotiraga yuklash va keyin fayl yaratish ko'p bo'lgan va bu katta ma'lumotlar muhitida Out Of Memory (OOM) xavfi mavjud edi.
Apache POI SXSSF (Stream rejimi) ni qo'llab-quvvatlash orqali faqat ba'zi ma'lumotlarni xotiraga saqlab, fayl yaratishga imkon berdi va katta hajmdagi qayta ishlash uchun juda mos keladi.
2) Java ekotizimi bilan yuqori moslik
Loyiha to'liq backend Java + Spring asosida tuzilganligi sababli, Java muhiti bilan табиий tarzda интеграция qilinadigan kutubxonalar kerak edi.
Apache POI Java standart ekotizimida eng keng tarqalgan Excel ishlov berish kutubxonasi edi,
-
qulay saqlash ma'lumotlarining ko'pligi
-
Hujjatli ravishda yaxshi tayyorlangan
-
Jamoatchilik holatlari ko'p
-
Barqarorligi tasdiqlanganligi afzalliklari borki.
Xususan, keyingi avlod loyihasining xususiyatlariga ko'ra, bir necha dasturchilar birgalikda xizmat ko'rsatishlari kerakligi sababli, ma'lum bir shaxs tomonidan tushuniladigan texnologiyalar o'rniga universallik va standartlashuv darajasi yuqori bo'lgan kutubxonalardan foydalanish muhim bo'ldi.
3-1. Yig'ilgan log ma'lumotlarini Apache POI asosida Excelga yaratish
Avvalo, log markazlashtirish tizimi bo'lgan Loki API orqali ma'lum bir davrda yuzaga kelgan log ma'lumotlarini strukturali ob'ektga aylantirdik, so'ngra Apache POI yordamida Excel hisobotini yaratdik.
Hisobot quyidagilardan iborat ravishda tayyorlandi.
-
Xizmatlarga oid xatoliklar holati jadvallari
-
Xatolik kodi statistikasi varaqasi
-
Tafsilotli xatolik logi varaqasi
-
Vaqt zonasiga qarab sodir bo'lish holati jadvallari
Har bir jadval dinamik ravishda yaratilishi uchun amalga oshirildi,
Testga mo'ljallangan xizmat o'zgarganida alohida tuzatishsiz javob berish uchun mo'ljallangan.
3-2. SXSSF qo'llanilishi va xotira optimallashtirish
Dastlabki dasturda oddiy XSSFWorkbook usuli bilan amalga oshirishga harakat qildim.
Biroq, o'n minglab log ma'lumotlarini qayta ishlash jarayonida xotira sarfi keskin oshdi va haqiqatan ham OOM xavfi paydo bo'ldi.
Buni hal qilish uchun Apache POI'ning SXSSFWorkbook usulidan foydalandik.
SXSSF quyidagi xususiyatlarga ega.
-
Jadval satrlarini faqat xotirada saqlash
-
O'tgan ma'lumotlar diskda vaqtinchalik faylga chiqariladi
-
Streaming usuli orqali katta hajmdagi fayl yaratish mumkin
Bu orqali xotira foydalanishini barqaror saqlab, ko'p miqdordagi loglarni xavfsiz tarzda qayta ishlash imkonini berdi.
Biroq SXSSFda quyidagi cheklovlar mavjud edi.
-
flush qilingan Rowni keyinchalik o'zgartirish mumkin emas
-
Ma'lumotlar faqat ketma-ket ravishda yozilishi mumkin
-
Oldingi qatorlarga kirishda cheklovlar mavjud
Shu sababli amalga oshirishda quyidagi nuqtalarni hisobga oldik.
-
Sarlavha/stilni avval aniqladik
-
Ma'lumotlarni yozish tartibini oldindan rejalashtiring
-
Keyin qayta ishlashni talab qiladigan mantiqni olib tashlang
-
Sheet tuzilishini oldindan tasdiqlangan
Bunday cheklovlarni tushunish va loyiha bosqichida aks etish barqaror amalga oshirishda katta yordam berdi.
4. Xulosa
Ushbu funksiyani ishlab chiqish orqali, har kuni taxminan 1 soat davom etgan qo'lda bajarilgan ishlarni taxminan 3 soniyagacha qisqartira oldik va sodda raqamlar tekshiruvi darajasida qolgani hisobga olinganda, hisobotlar ham batafsil nosozlik tahlili mumkin bo'lgan darajaga rivojlanishi mumkin edi.
Bu tajribadan shuni angladimki, backend engineer uchun faqat “funksiyalarni bajaradigan kod” yaratishdan ko'ra, ishga tushirish muhitida yuzaga kelishi mumkin bo'lgan ma'lumotlar hajmi, texnik xizmat ko'rsatish va kengaytirilishi kabi jihatlarni hisobga olish juda muhimdir.
Kelajakda oddiy amalga oshirishdan tashqari, haqiqiy maydondagi muammolarni hal qilish va ish samaradorligini oshirish uchun tuzilmalarga e'tibor beradigan dasturchi bo'lib o'sishga harakat qilmoqchiman.
Novin
ma'lumotlar ro'yxati