Gesaan dan konteks
Seorang worker menggunakan 100 peristiwa daripada baris gilir (queue) dan membuat satu panggilan API hiliran selepas pengagregatan. Setiap peristiwa mungkin milik Trace yang berbeza, dan worker juga boleh dicetuskan oleh penjadual (scheduler) atau main semula (replay). Modelkan surihan supaya setiap sumber kekal boleh ditemui tanpa berpura-pura bahawa permintaan yang tidak berkaitan membentuk satu pepohon induk-anak (parent-child).
OpenTelemetry menerangkan Spans sebagai operasi yang boleh membentuk pepohon dan membenarkan setiap Span mengandungi sifar atau lebih Links. Gambaran keseluruhannya menamakan pemprosesan kelompok yang dimulakan oleh berbilang Spans yang masuk sebagai kes penggunaan lazim untuk Links.
Perkara yang diuji oleh penemu duga
Calon harus mengetahui bahawa parent ialah satu konteks semasa manakala Link mewakili kausaliti berkaitan tanpa pertalian induk. Mereka harus mengawal bilangan pautan, pensampelan, dan atribut kekardinalan tinggi, sambil mengekalkan korelasi metrik dan log yang berguna.
Soalan penjelasan untuk ditanya terlebih dahulu
- Bolehkah kelompok mengandungi berbilang penyewa (tenants), tahap keselamatan, atau jenis perniagaan?
- Adakah panggilan hiliran merupakan satu operasi agregat, atau bolehkah ia kekal bagi setiap peristiwa?
- Adakah matlamatnya kebertanggungjawaban setiap peristiwa, analisis kependaman (latency), atau daya pemprosesan kelompok?
- Adakah pensampelan diputuskan semasa masuk (ingress), atau bolehkah worker mengekalkan konteks sumber yang dipilih?
- Bolehkah atribut Link mengandungi ID peristiwa, ID penyewa, atau medan sensitif?
Rangka kerja jawapan 30 saat
“Span pemprosesan kelompok menggunakan konteks worker atau scheduler sebagai parent-nya. 100 SpanContexts yang masuk menjadi Links kerana mereka bersama-sama menyebabkan satu operasi kelompok tanpa membentuk satu rantaian induk-anak. Saya hanya menyimpan atribut kekardinalan rendah yang diperlukan, menguatkuasakan had pautan, dan mengira pemotongan (truncation). Metrik kelompok meliputi saiz, masa menunggu baris gilir, pemprosesan, kependaman hiliran, kegagalan, dan percubaan semula (retries); log dikorelasikan dengan ID kelompok dan cincangan (hash) peristiwa. Medan penyewa yang sensitif ditapis, dan kelompok yang gagal atau dimainkan semula mempunyai laluan keselamatan pensampelan.”
Perincian langkah demi langkah
Langkah 1: Asingkan parent daripada Link
Parent menyatakan Span tunggal mana yang diteruskan oleh operasi semasa, membentuk pepohon Trace dan mewarisi TraceId-nya. Link merekodkan satu SpanContext berkaitan daripada Trace yang sama atau yang lain. Apabila sumber adalah setaraf (peers) dalam kelompok, memilih peristiwa pertama sebagai parent mencipta pepohon yang palsu.
Batch-processing Span
parent: worker / scheduler context
links: event-1 SpanContext ... event-100 SpanContextLangkah 2: Kekalkan SpanContext merentasi sempadan
Ekstrak TraceContext daripada pengepala mesej, sahkan format dan bendera pensampelannya, dan cipta Link. Jangan masukkan mesej lengkap, input pengguna, atau token mentah ke dalam atribut Link. Untuk konteks yang tiada, kira “tiada konteks sumber” dan bukannya mereka-reka TraceId.
Langkah 3: Batasi saiz dan kos pautan
Seratus pautan hanyalah had contoh; kelompok pengeluaran mungkin lebih besar. Konfigurasikan had kiraan pautan SDK atau had aplikasi, kekalkan sumber ralat, percubaan semula, main semula, atau penyewa keutamaan yang representatif, dan rekodkan kiraan pautan yang digugurkan. Pemotongan mesti kelihatan dalam metrik dan log kelompok.
Langkah 4: Tentukan kitaran hayat Span kelompok
Span meliputi menunggu kelompok, penyahsiri (deserialization), pengagregatan, panggilan hiliran, dan komit. Tambah peristiwa fasa atau metrik. Setiap Span yang dicipta mesti berakhir pada kejayaan, kegagalan, pembatalan, atau komit separa. Satu peristiwa yang perlahan tidak boleh menyembunyikan sempadan fasa kelompok.
Langkah 5: Jadikan pensampelan dan kegagalan boleh didiagnosis
Pensampelan semasa masuk mungkin membuang Traces sumber, jadi worker memerlukan dasar keselamatan untuk kegagalan, percubaan semula, dead letters, dan main semula manual. Links yang ada semasa penciptaan Span mungkin mempengaruhi pensampelan; Links yang ditambah kemudian mungkin tidak mempengaruhinya. Jadikan susunan dan sandaran (fallback) itu jelas.
Langkah 6: Berikan tugas berbeza kepada surihan, metrik, dan log
Surihan menerangkan kausaliti satu kelompok. Metrik membawa saiz kelompok, masa menunggu baris gilir, kependaman pemprosesan, kejayaan/kegagalan, dan pemotongan. Log menggunakan ID kelompok, cincangan peristiwa, dan ID main semula untuk mencari sampel yang terkawal. Jangan gunakan ID peristiwa sebagai label metrik tanpa batas.
Langkah 7: Asingkan penyewa dan privasi
Untuk kelompok berbilang penyewa, gunakan cincangan tak berbalik (irreversible) atau rujukan dalaman dalam Links dan log, serta tapis atribut sebelum dieksport. Jika tahap keselamatan tidak boleh dicampur, bahagikan kelompok mengikut penyewa atau kebenaran supaya pembaca dengan keistimewaan rendah tidak boleh melintasi konteks penyewa lain.
Langkah 8: Sahkan pertanyaan dan kegagalan
Uji satu sumber, Traces bercampur, konteks tiada, limpahan pautan, kehilangan pensampelan, percubaan semula hiliran, kegagalan separa, dead letter, dan main semula. Sahkan bahawa Span kelompok melompat ke Traces sumber yang dikekalkan dan metrik mengenal pasti kelompok yang dipotong atau tidak disampel.
Model jawapan berkualiti tinggi
“Span kelompok menggunakan worker atau scheduler sebagai parent, dan setiap SpanContext mesej ialah Link. Itu mengekalkan fakta bahawa 100 peristiwa bersama-sama menyebabkan satu panggilan hiliran tanpa mereka-reka pepohon induk-anak. Saya mengehadkan pautan dan mengira pengguguran, menapis atribut penyewa dan sensitif, serta menggunakan metrik untuk saiz kelompok, masa menunggu baris gilir, kependaman hiliran, kegagalan, dan percubaan semula. Log berkorelasi dengan ID kelompok dan main semula, dan kelompok yang gagal menerima perlindungan pensampelan. Ujian meliputi konteks yang tiada, Traces bercampur, limpahan, dan main semula.”
Kesilapan lazim
- Memilih mesej pertama sebagai parent → kausaliti palsu → gunakan parent worker yang sama dan Links untuk sumber.
- Memasukkan mesej penuh dalam Link → kebocoran privasi dan kos → kekalkan medan kekardinalan rendah yang dibersihkan dan perlu sahaja.
- Menambah Links tanpa had → Span dan kos eksport tanpa batas → hadkan dan ukur pemotongan.
- Menamatkan Span hanya apabila berjaya → kegagalan dan pembatalan membiarkan Span terbuka → tamatkan dalam blok finally atau skop.
- Menggunakan ID peristiwa sebagai label metrik → ledakan kekardinalan → simpan butiran dalam log atau surihan.
- Menganggap Links yang lewat sentiasa mempengaruhi pensampelan → sumber penting hilang → sediakan konteks pensampelan sebelum penciptaan Span.
Soalan susulan dan respons mantap
Soalan susulan 1: Adakah kelompok satu mesej memerlukan Link?
Ia boleh menggunakan konteks mesej tersebut sebagai parent. Jika worker mempunyai jangka hayat bebas, parent worker ditambah satu Link juga sah; pilih berdasarkan sama ada kelompok itu merupakan operasi anak terus.
Soalan susulan 2: Adakah Links menggabungkan Traces yang berbeza?
Tidak. Ia menyatakan perkaitan dan mengekalkan setiap TraceId. Sistem pertanyaan mesti menyediakan navigasi daripada Link ke Trace sumber.
Soalan susulan 3: Sumber mana yang terselamat daripada pemotongan?
Utamakan ralat, percubaan semula, main semula, penyewa keutamaan, atau sampel deterministik; rekod jumlah keseluruhan dan kiraan yang digugurkan. Mengekalkan N yang pertama secara senyap memperkenalkan berat sebelah.
Soalan susulan 4: Bagaimanakah anda mendiagnosis kelompok yang gagal?
Berikan ID kelompok/main semula bebas kepada kegagalan dan main semula dead-letter, kekalkan Links atau ringkasan sumber ralat yang terkawal, dan letakkan jenis kegagalan dalam metrik.
Soalan susulan 5: Bolehkah Link mengandungi tenant.id?
Hanya selepas semakan akses, kekardinalan, dan privasi. Eksport rentas penyewa biasanya mencincang atau mengeluarkannya, dan ia tidak sepatutnya menjadi label metrik volum tinggi.