Unit — ITda kontekstga qarab mustaqil boshqariladigan, o‘lchanadigan yoki sinovdan o‘tkaziladigan eng kichik mantiqiy birlikni bildiruvchi umumiy atamadir. Unit testdagi birlik funksiya yoki komponent bo‘lishi mumkin; service manager unitni xizmat, socket yoki timer sifatida boshqaradi; deployment unit esa birgalikda chiqariladigan artefaktlar chegarasini ifodalaydi.
Dasturiy birlik
Koddagi unit aniq mas’uliyat va interfeysga ega bo‘ladi. U har doim bitta funksiya degani emas: obyekt xatti-harakati bir nechta metod orqali to‘liq ifodalanishi mumkin. Birlik chegarasi implementation detaliga emas, tekshiriladigan contractga mos tanlansa refactoring testlarni keraksiz buzmaydi.
Modul, package va library ham turli darajadagi unitdir. Cohesion yuqori bo‘lsa unit ichidagi qismlar bir maqsadga xizmat qiladi. Coupling kamayganda boshqa unitga bog‘liqlik aniq interfeys orqali o‘tadi. Juda mayda bo‘lish ko‘p vositachi va chaqiriq yaratadi, juda katta bo‘lish o‘zgarish ta’sirini kengaytiradi.
Service manager unitlari
Systemd kontekstida unit tizim boshqaradigan resurs ta’rifidir. Service unit jarayonni, socket unit aloqa endpointini, mount unit fayl tizimini, timer unit vaqt hodisasini ifodalaydi. Target unit bir nechta unitni mantiqiy guruhlaydi. Unit fayl dependency, ordering, restart va sandbox sozlamalarini deklarativ beradi.
Unit holati active bo‘lishi uning funksional jihatdan sog‘lomligini har doim bildirmaydi. Jarayon tirik, ammo xizmat so‘rovga javob bermayotgan bo‘lishi mumkin. Readiness, watchdog va tashqi monitoring bilan amaliy holat tekshiriladi.
Deployment birligi
Deployment unit bir versiya sifatida birga quriladigan va chiqariladigan komponentlar to‘plamidir. Monolitda butun ilova bitta unit, mikroxizmatda har xizmat alohida bo‘lishi mumkin. Alohida unit mustaqil rollout beradi, lekin API compatibility, observability va operatsion xarajatni oshiradi.
Container image keng tarqalgan deployment unit bo‘lsa-da, konfiguratsiya, database migration va secret uning tashqarisida boshqariladi. Versiyani faqat image tag bilan emas, immutable digest bilan aniqlash rollbackni ishonchli qiladi. Bir release bir nechta unitni talab qilsa orchestratsiya va backward compatibility kerak.
O‘lchov birligi
Unit atamasi qiymatning o‘lchov birligini ham anglatadi: bayt, bit/soniya, millisekund yoki foiz. Monitoringda unit ko‘rsatilmasa 1024 va 1000 asoslari, soniya va millisekund aralashib xato alarm yaratadi. API schema va metric metadata birlikni aniq yozadi.
Saqlash hajmida MB va MiB farqli: MB odatda 10^6, MiB 2^20 bayt. Vaqt qiymati integer sifatida uzatilsa unit nomga yoki typega kiritiladi. Unit conversion chegarada bir marta bajarilib, ichki kod bitta canonical birlikdan foydalanadi.
Chegarani tanlash
Unit chegarasi ownership va o‘zgarish tezligiga mos bo‘lsa jamoa uni mustaqil tushunadi. Ikki modul doim birgalikda o‘zgarsa ularni sun’iy alohida deployment unit qilish distributed transaction va version coordination keltirishi mumkin. Aksincha, mustaqil xavfsizlik siyosati yoki scaling talabi alohida unitni asoslaydi. Birliklar orasidagi contract versiyalanadi, ammo ichki implementation erkin o‘zgaradi. Kuzatuvda metric unit va software unit nomi chalkashmasligi uchun termin aniq yoziladi. Masalan, request_duration uchun sekund, payment-service uchun service identifikatori metadata’da boshqa maydonda turadi. Noaniq “unit failed” xabari qaysi ma’noni anglatishini ko‘rsatmaydi.
Unit chegarasi kontekstga bog‘liq bo‘lsa-da, u aniq interfeys va bitta mas’uliyat bilan ifodalanishi maqsadga muvofiq. Juda katta unit alohida tekshiruvni qiyinlashtiradi, haddan tashqari maydalash esa bog‘lanishlar sonini oshiradi.
Bog‘liq tushunchalar
Module, Unit test, Systemd unit, Deployment unit, Cohesion, Measurement unit