Logo GH

ردیابی توزیع شده

(بخش: تکنولوژی و زیرساخت)

خلاصه ای کوتاه

ردیابی توزیع شده پاسخ به این سوال که در آن و چرا زمان در طول مسیر درخواست از طریق دروازه، API، صف، پایگاه داده ها، ارائه دهندگان خارجی (PSP/استودیوهای بازی) از دست داده است. OpenTelemetry (OTel) یک استاندارد SDK/agent/protocol باز است که ترکیبی از مسیرها، معیارها و سیاهههای مربوط است. در iGaming، این یک ابزار اساسی برای حفظ p95/p99، به سرعت محلی سازی مسائل پرداخت و شناسایی تنگناها قبل از مسابقات اوج است.

1) مفاهیم OTel

ردیابی - مسیر کامل عملیات (سپرده، نرخ، برداشت).
محدوده کاری (HTTP handler، درخواست SQL، تماس صف/ارائه دهنده).
ویژگی ها - کلید ارزش با جزئیات ("خالص. همکار. اسم دی بی. سیستم '،' PSP. مسیر ').
رویدادها - رویدادهای فوری (عقب نشینی، اتمام وقت، از دست دادن حافظه پنهان).
پیوندها - پیوند به ردیابی های دیگر (مهم برای async/صف).
منبع - فراداده فرآیند: "سرویس. نام، خدمات. نسخه '،' استقرار. محیط زیست، ابر. منطقه ".

2) انتشار زمینه

استفاده از زمینه ردیابی W3C:

traceparent: 00-<trace_id>-<span_id>-01 tracestate:...

علاوه بر این - چمدان برای کلید های امن (به عنوان مثال، «مستاجر»، «مسیر»)، PII را در آنجا قرار ندهید.

که در آن به سوراخ زمینه: API دروازه → RPC های داخلی → تولید کننده به صف → مصرف کننده HTTP خارجی (PSP/ارائه دهندگان).

3) قراردادهای معنایی (حداقل اجباری)

HTTP/RPC: 'http. روش '،' HTTP. مسیر '،' HTTP. status_code' است.
DB/کش: "db. system '(' mysql '/' postgresql '/' redis '),' db. statement '(masked)', 'db. عملیات...
صفها: "پیام. system '(' kafka '/' rabbitmq ')،' پیام. مقصد «،» پیام. عملیات ('ارسال '/' فرآیند').
پرداخت: PSP. مسیر، PSP. پرداخت «،» ارائه دهنده. id '(pseudonymize),' مقدار ',' ارز '.
دامنه iGaming: "بازی. ارائه دهنده '،' بازی. session_id' (هش)، بازیکن. id_hash' است.

یک طبقه بندی واحد → قابلیت مقایسه داشبورد و جستجوی سریع علل.

4) نمونه برداری: چگونه در داده ها غرق نشویم

مبتنی بر سر

ساده، ارزان ؛ مناسب برای جریان عمومی.
منفی - شما می توانید آهنگ های آهسته/اشتباه «جالب» را از دست بدهید.

مبتنی بر دم (جمع کننده в)

تصمیم پس از پایان دوره ها ساخته شده است: ما فقط خطاها/بخش های آهسته/مهم (VIP/پرداخت) را ذخیره می کنیم.
ایده آل برای بار تولید: به شدت هزینه با محتوای اطلاعات بالا را کاهش می دهد.

هیبرید توصیه شده:
  • سر: 5-10٪ برای پوشش «پس زمینه».
  • Tail: 100% error + p95 + slow + payment tracks/canary releases.

5) توپولوژی جمع آوری OpenTelemetry

Agent-sidecar (در هر گره/غلاف): پذیرش محلی، حداقل بافر، صادرات به جمع کننده.
دروازه (خوشه): نمونه برداری دم، مسیریابی، غنی سازی، صادرات به Tempo/Jaeger/Zipkin/OTLP.

مثال: نمونه برداری دم (قطعه YAML)

yaml processors:
tailsampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code:
status_codes: [ ERROR ]
- name: slow_p95 type: latency latency:
threshold_ms: 250
- name: payments type: string_attribute string_attribute:
key: service. name values: [ "payments-api", "payments-worker" ]

6) ارتباط با معیارها و سیاهههای مربوط

اضافه کردن 'trace _ id '/' span _ id' به هر ورودی ورود.
معیارهای تأخیر را به عنوان هیستوگرام ذخیره کنید و شامل نمونه ها باشید - اشاره به نماینده «trace _ id» برای «پرش» از p95-boket به یک ردیابی خاص.
حاشیه نویسی انتشار (Git SHA، نسخه نمودار) - مانند رویدادها/برچسب ها.

7) ابزار دقیق (زبان ها و عوامل خودکار)

برو (دستی + خودکار)

go tp:= sdktrace. NewTracerProvider(
sdktrace. WithBatcher(exporter),
sdktrace. WithResource(resource. NewWithAttributes(
semconv. SchemaURL,
semconv. ServiceName("payments-api"),
)),
)
otel. SetTracerProvider(tp)

ctx, span:= tracer. Start(ctx, "Deposit")
defer span. End()
span. SetAttributes(
attribute. String("psp. route","pspX"),
attribute. String("currency","EUR"),
)

جاوا

عامل خودکار "-javaagent: opentelemetry-javaagent. jar ', config via env (' OTEL _ SERVICE _ NAME ',' OTEL _ EXPORTER _ OTLP _ ENDPOINT ').
دستی - حاشیه نویسی/ابزار از مکان های پیاز (استخر JDBC, کش).

گره. JS/پایتون

ابزار خودکار با پلاگین SDK + (Express/FastAPI/کرفس).

برای صف - بسته بندی تولید کننده/مصرف کننده برای قرار دادن "پیام. و لینک ها

8) صف و async: دهانه های صحیح

Producer ('send'): دامنه برای ارسال به موضوع/صف.
Consumer ('process'): محدوده جدید پردازش پیام از لینک به محدوده تولید کننده (صرفه جویی در رابطه علی بدون 'trace _ id' مشترک).
برچسب ها: پیام کافکا. پارتیشن، پیام. رابيتمق. routing_key'، پیغام message_id' است.
With retrays - event «retry», try counter.

9) DB/کش و N + 1

فعال کردن ردیابی درایور پایگاه داده، گروه نمایش داده شد از همان نوع به دسته.
برای Redis/cache، صفات «cache» هستند. ضربه '/' کش. خانم...
درخواست های «سنگین» را برای جدا کردن دهانه ها بیرون بیاورید - می توانید ببینید کجا p99 است.

10) ارائه دهندگان خارجی: استودیوهای PSP/بازی

قرار دادن کلاینتهای HTTP: "psp. ارائه دهنده «،» PSP. route ',' timeout _ ms ',' تلاش '.
کدها/انواع خطا را وارد کنید، اما PII (شماره کارت، نشانه ها) نیست.
مقایسه استودیوها/مسیرها بر اساس «مدت زمان»، «نرخ خطا».

11) جلو و رام

OTEL WEB SDK: 'page _ view', 'resource _ load', 'xhr'.
پیرس «traceparent» را به باطن به کوک مسیر کاربر را از طریق رابط کاربر → API → پایگاه داده.
تقسیم بندی توسط ارائه دهندگان جغرافیایی/شبکه - برچسب های اختیاری.

12) ایمنی و PII

فیلدها را ماسک کنید ("db. statement 'edited), hash' player _ id '.
مناطق داده: 'pii = true'، 'region = EU/TR/LATAM'.
کنترل دسترسی به مسیرهای پرداخت (مبتنی بر نقش).
WORM/Retention: دوره های نگهداری برای ردیابی حساس، حذف توسط سیاست.

13) عملکرد و هزینه

Tail-sampling by policy: «خطاهای + پرداخت + آهسته + انتشار قناری».
Downsampling هیستوگرام متریک، deduplication ورود به سیستم تهاجمی.
محدودیت کاردینالیتی: «user _ id» را به عنوان برچسب متریک ننویسید.
بافر/دسته در جمع کننده، فشرده سازی OTLP.

14) داشبورد و تجزیه و تحلیل

نقشه سرویس: وابستگی های سرویس، رنگ آمیزی خطا/تاخیر.
مقایسه انتشار: پایدار در مقابل بازنگری قناری (p95، نرخ خطا، پرداخت conv).
آثار آهسته بالا: در طول مسیر «/سپرده »، بخش در امتداد PSP/منطقه.
تاخیر صف: آهنگ های تاخیر مصرف عمیق.

15) نمونه هایی از تنظیمات جمع کننده

خطوط لوله (متریک/مسیرهای پیاده روی/سیاهههای مربوط، قطعه)

yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }

processors:
batch:
memory_limiter:
limit_mib: 1024 spike_limit_mib: 256 attributes/payments:
actions:
- key: "psp. provider"
action: insert value: "pspX"

exporters:
otlp/traces: { endpoint: tempo:4317, tls: { insecure: true } }
otlp/metrics:{ endpoint: prometheus-otlp:4317, tls: { insecure: true } }
otlp/logs:  { endpoint: loki-otlp:4317, tls: { insecure: true } }

service:
pipelines:
traces:
receivers: [ otlp ]
processors: [ memory_limiter, batch, tailsampling ]
exporters: [ otlp/traces ]
metrics:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/metrics ]
logs:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/logs ]

16) Runbooks (سناریوهای معمولی)

الف) رشد p99 در «پرداخت-نرم افزار»

1. باز کردن «بالا ردیابی آهسته» → سقوط به دهانه پایگاه داده/PSP.
2. اگر مشکل PSP ترجمه مسیر است، فعال کردن retrays/timeouts.
3. بررسی صف 'withdrawals' (تاخیر)، افزایش مصرف کنندگان.

ب) اشکالات 5xx پس از انتشار

1. فیلتر بر اساس سرویس نسخه '.
2. مقایسه پایدار/قناری ؛ پیدا کردن خوشه در PSP. مسیر ".
3. توقف ارتقاء، رول به عقب (نگاه کنید به استراتژی انتشار/رول بک).

ج) مشکوک N + 1

1. مسیرهای پیاده روی با تعداد زیادی از دهانه های کوتاه DB.
2. فعال کردن تجمع/joyns, اضافه کردن لایه کش.

17) چک لیست پیاده سازی

1. فعال کردن OTel SDK و ویژگی های منابع یکنواخت ('سرویس. نام '،' env '،' منطقه ').
2. انتشار W3C ردیابی زمینه از طریق تمام لایه ها و صف.
3. حداقل مجموعه ای از ویژگی های معنایی (HTTP/DB/صف/PSP).
4. Tail-sampling: errors, p95 +, payments, canary.
5. سیاهههای مربوط با 'trace _ id '/' span _ id'، معیارهای با نمونه.
6. داشبورد: نقشه خدمات، مقایسه انتشار، جریان پرداخت.
7. سیاست های PII: ماسک، مناطق، نقش ها، حفظ.
8. تست/بار: بررسی همبستگی و کامل ردیابی قبل از قله.
9. تولید خودکار لینک های runbook در هشدارها.

10. هزینه تله متری و گزارش کاردینالیتی

18) ضد گلوله

ردیابی «فقط در ورودی» بدون پایگاه داده/صف → بدون استفاده.
عدم انتشار در زنجیره علت و معلول async → شکستن.
نمونه برداری تصادفی 1٪ بدون منطق دم → آهسته/اشتباه گرفتن نیست.
Logs without trace _ id → no end-to-end correlation.
PII های خام در ویژگی ها/سیاهههای مربوط → خطرات انطباق.
کاردینالیتی «تا سقف» (کاربر/جلسه به عنوان برچسب متریک) → انفجار ارزش.

خلاصه

OpenTelemetry قابلیت مشاهده را از مجموعه ای از ابزارهای متفاوت به یک زبان عملکرد پایان می دهد. با انتشار صحیح زمینه، معناشناسی شسته و رفته، نمونه برداری دم و ترکیبی از «معیارها ↔ ردیابی ها ↔ سیاهههای مربوط»، تیم iGaming p95/p99 را تحت کنترل نگه می دارد، به سرعت تنگناها (DB، صف، PSP) را جدا می کند و با اطمینان حتی در اوج ترافیک منتشر می کند.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.