Context propagation — request yoki vazifaga tegishli metadata ni process, thread, coroutine va tarmoq chegaralari orqali keyingi bajarilish bosqichiga uzatish mexanizmidir. Distributed tracingda trace va parent span, loglarda correlation ID, securityda esa ayrim identity atributlari context orqali yetkaziladi. Propagation noto‘g‘ri bo‘lsa bir operatsiya yozuvlari bo‘linadi yoki parallel requestlar aralashadi.
Context tarkibi
Context odatda kichik va immutable key-value to‘plamdir. Trace ID, span ID, sampling flag va baggage keng tarqalgan elementlar hisoblanadi. Deadline, cancellation va locale ham ayrim runtime yoki RPC frameworklarda context bilan uzatiladi.
Context application payloadining o‘rnini bosmaydi. Katta obyekt, database connection yoki maxfiy tokenni barcha qatlam bo‘ylab ko‘tarish coupling va xavfsizlik muammosi yaratadi. Har fieldning scopei, egasi va amal muddati bo‘ladi.
Process ichida
Synchronous call stackda context parametr bilan uzatilishi mumkin. Async dasturda task-local yoki language runtime context variable ishlatiladi. Oddiy global variable bir vaqtda ishlayotgan requestlar qiymatini aralashtiradi; thread-local esa coroutine bir threadda almashganda yetarli bo‘lmasligi mumkin.
Executor yoki thread poolga vazifa yuborilganda current context avtomatik ko‘chmasligi ehtimol. Wrapper snapshot olib workerda activate qiladi va finally bosqichida eski holatni tiklaydi. Aks holda worker thread keyingi vazifaga oldingi request contextini olib o‘tadi.
Tarmoq chegarasi
HTTP client trace contextni traceparent va tracestate headerlariga inject qiladi. Server ularni extract qilib yangi span uchun remote parent yaratadi. Message brokerda context message property yoki headerda saqlanadi; consumer delivery attempt uchun yangi span yaratadi.
Carrier format va limitga ega. Binary RPC metadata, HTTP header va queue property bir xil encodingni talab qilmaydi. Composite propagator W3C va eski vendor formatini birga qabul qilishi mumkin, ammo ikki context kelganda ustuvorlik aniq belgilanadi.
Ishonch chegarasi
Tashqi client yuborgan trace yoki correlation ID authorization dalili emas. Gateway format va uzunlikni tekshiradi, tracestate a’zolarini tozalashi yoki yangi trace boshlashi mumkin. Baggage ichidagi tenant yoki role faqat signed va ishonchli manbadan kelganda security qaroriga ta’sir qiladi.
Headerga email, token va shaxsiy ma’lumot qo‘yish xavfli: u proxy, log va uchinchi tomon xizmatidan o‘tadi. Allowlist va data classification propagation siyosatining qismidir.
Cancellation va deadline
Deadline downstreamga qolgan vaqt budgetini beradi. Har xizmat o‘z timeoutini asl deadline dan uzoq qo‘ymaydi. Relative timeoutni har hopda qayta boshlash umumiy requestni kutilganidan uzoq davom ettiradi.
Cancellation signal cooperative bo‘lib, worker uni tekshirishi va resource ni tozalashi kerak. Queuega allaqachon publish qilingan mustaqil taskni HTTP client uzilgani uchun avtomatik bekor qilish domen talabiga bog‘liq. Observability context va execution control context bir xil lifecyclega ega bo‘lmasligi mumkin.
Chegara va versiya mosligi
Process yoki network chegarasidan o‘tganda context formatlangan carrierga yoziladi. HTTP header, message metadata yoki RPC metadata buning odatiy ko‘rinishlaridir. Producer va consumer turli kutubxona versiyasida bo‘lsa ham majburiy fieldlar bir xil talqin qilinishi kerak. Noma’lum fieldni inkor etmasdan uzatish forward compatibilityga yordam beradi, biroq ishonchsiz manbadan kelgan baggage hajmi va nomlari cheklanadi. Gateway bir nechta propagation formatini qabul qilishi mumkin, ammo chiqishda tashkilot tanlagan bitta canonical formatdan foydalanishi kuzatuv zanjirining bo‘linishini kamaytiradi.
Bog‘liq tushunchalar
Trace context, Correlation ID, Baggage, Async context, Cancellation, Deadline, Distributed tracing