Xuddi shu nom ostida ikkinchi ulanish boshlanganidan keyin uzilish yozuvi keladi va o’sha foydalanuvchining eng yangi satrini yangilaydigan ishlov beruvchi noto’g’ri sessiyani yopadi. Xato vaqt belgilarini taqqoslashda emas. Xato nom va bir butun soniya bitta sessiyani aniqlaydi degan taxminda. Hook hodisalari ulanishlarni tasvirlaydi va ulanishga faqat o’ziga tegishli kalit kerak.

Uzilish o’zgaruvchilari aslida nimani anglatishidan boshlang. Shundagina identifikator tanlovi mantiqiy bo’ladi.

Uzilish hook’i aslida nima olib yuradi

Community OpenVPN 2.6 da hook ma’lumotnomasi time_unix ni mijoz ulangan payt sifatida belgilaydi; u ulanish hook’i ishga tushishidan oldin o’rnatiladi va uzilish hook’i keyinroq ishga tushganda qayta belgilanmaydi. time_duration o’sha sessiyaning davomiyligini soniyalarda beradi, shuning uchun oxiri taxminan ulanish vaqti va davomiylik yig’indisi. Ikkalasi ham butun soniya va hech biri sizning ma’lumotlar bazangiz hodisani qayta ishlagan payt emas. Aynan shu uch vaqtni alohida saqlash korrelyatsiyani faqat sinov paytida to’g’ri ko’rinish o’rniga haqiqatan ushlab turishini ta’minlaydi.

Bu arifmetika yozib qo’yishga arziydi, chunki bu hook o’zi taklif qiladigan yagona tugash vaqti. Qayta ishlash kechikishi va xostlar orasidagi soat farqlari hali ham uning tashqarisida qoladi.

Nima uchun ko’rinib turgan juftlik noyob emas

Nomni ulanish vaqti bilan juftlashtirish qidiruvni toraytiradi va hali ham sessiyani aniqlamaydi. Mijoz xuddi shu soniya ichida qayta ulanishi mumkin, shuning uchun ikkita sessiya ikkala qiymatni bo’lishishi mumkin. Ikkita daemon nusxasi yoki bir xil konfiguratsiyani saqlaydigan server almashtiruvi bu juftlikni turli jarayonlardan hosil qilishi mumkin. Tunnel manzillari ham xuddi shu sababdan qayta ishlatiladi, bu ularni sessiya identifikatorlari emas, balki atributlari qiladi.

Nosozlik uslubi jim. Birinchi sessiya uchun kechikkan uzilish eng yangi satrga mos keladi va ikkinchi sessiya hali ishlatayotgan ajratmani tugatadi, shuning uchun foydalanuvchi o’zi sabab bo’lmagan tasodifiy kirish yo’qotishini boshdan kechiradi. Keyin to’g’ri ko’rinadigan satrlar soni muammoni sezishni qiyinlashtiradi.

Barqaror shaxs qayerdan keladi

Boshqaruv interfeysi har bir mijozga mijoz nusxasi identifikatorini beradi va bu identifikator uni bergan daemon nusxasi bilan cheklangan. Ishlaydigan tashqi kalit barqaror server identifikatorini, daemon ishga tushganda o’zgaradigan davrni va o’sha mijoz ID sini birlashtiradi. Davr muhim, chunki identifikatorlar jarayon bilan birga qayta boshlanadi va yalang’och jarayon ID si keyinchalik aloqasiz narsa tomonidan qayta ishlatilishi mumkin.

Bola ulanish skriptining ichida o’rnatilgan muhit o’zgaruvchilari ota daemonning keyingi uzilish skriptiga o’tmaydi, chunki bu skriptlar o’z muhitlari bilan alohida jarayonlar sifatida ishlaydi. Shuning uchun ulanish paytida UUID yaratish yarim yechim. Uzilish tomoni o’sha UUID ni nomlay olishi kerak, ya’ni shaxs ikkala hodisa ham yeta oladigan joyda yashashi kerak.

Chiqishni shartli va idempotent qiling

Sessiya egasiga ko’ra chiqaring, foydalanuvchiga ko’ra emas. Nomga hozir tegishli bo’lgan har qanday ajratmani o’chiradigan ishlov beruvchi oxir-oqibat noto’g’risini o’chiradi va yagona himoya — o’chirilayotgan yozuv aynan shu hodisa tasvirlaydigan yozuv ekanini tekshirish.

Boshqaruv interfeysi bir vaqtning o’zida bitta ulangan boshqaruv mijozini qabul qiladi, shuning uchun xuddi shu soket uchun raqobatlashadigan ikkinchi kuzatuvchi qo’shish o’rniga uni allaqachon egallagan tomon bilan integratsiyalashing.

Takrorlanadigan hodisalarni natijani ikki marta o’zgartirmasdan boshqaring va juftlanmagan hodisalarni tashlash o’rniga muvofiqlashtirish uchun saqlang. Uzilish qayta chaqiruvi hujjatlashtirilgan hayot sikli shartlariga ega va halokat yoki qattiq to’xtashdan keyin hech qachon kelmasligi mumkin, shuning uchun dizaynga tugash hodisasi yo’q sessiyani tasvirlash usuli kerak.

Noqulay holatlarni ataylab sinab ko’ring: bir soniya ichida ikki qayta ulanish, ikkita daemon nusxasi, qayta ishlashi muvaffaqiyatsiz bo’lgan ulanish va sessiya o’rtasida daemonni qayta ishga tushirish. To’rttasiga ham bardosh beradigan kalit ishonchga loyiq kalit.

O'xshash maqolalar