GH GambleHub

مجمعات الاتصال ووقت الانتهاء

مجمعات الاتصال والكمون

1) سبب الحاجة إلى حمامات السباحة

الاتصالات باهظة الثمن (مصافحات TCP/TLS، والمصادقة، والإحماء). يسمح المسبح بما يلي:
  • إعادة استخدام الاتصالات الجاهزة (البقاء على قيد الحياة) → أسفل TTFB.
  • التحكم في التزامن وإعطاء الضغط الخلفي بدلاً من سيل من التراجعات.
  • قلل من ذيل p95/p99 بسبب الحجم الصحيح والوقت المحدد.

المخاطر الرئيسية: قوائم الانتظار في المسبح، وحجب رأس الخط، ومحتوى الاتصالات وعاصفة من التراجعات.

2) قاعدة الرياضيات: كيفية عد حجم البركة

نستخدم قانون ليتل: «L = λ × W». بالنسبة للمسبح، هذا يعني:
  • «λ» هو متوسط تيار الطلب (RPS).
  • «W» هو متوسط الاتصال المشغول لكل طلب (وقت الخدمة، بما في ذلك زمن وصول الشبكة وتشغيل الخدمة عن بُعد).
  • الحد الأدنى لحجم المسبح هو «N _ min ≈ λ × W».
  • أضف هامش للاختلافات و p99: غرفة الرأس 20-50٪.
  • مثال: 300 RPS، متوسط وقت الانتظار 40 ms → 'N _ min = 300 × 0. 04 = 12`. بهامش 50٪، 18 وصلة →.

إذا كانت الذيول كبيرة: ضع في اعتبارك «W _ p95» أو «W _ p99» للمسارات الحرجة - تنمو البرك.

3) مبادئ التصميم العامة

1. مسار البيانات القصير: إعادة الاستخدام (البقاء على قيد الحياة، HTTP/2/3 تعدد الإرسال).
2. الحد من التوازي: من الأفضل الرفض بسرعة (429/503) بدلاً من قلي الخلف.
3. Timeouts> retreats: حدد مهلات صغيرة وخلوات نادرة.
4. قوائم انتظار العملاء أقصر من قوائم انتظار الخادم (سريعة الفشل).
5. الضغط على الظهر: عندما يكون المسبح ممتلئًا - على الفور NACK/خطأ/collbeck «لاحقًا».
6. عزل المجمعات حسب الأهداف: DB، cache، PSP الخارجي - حدودها.

4) HTTP/1. 1 مقابل HTTP/2/3، ابق على قيد الحياة

HTTP/1. 1: طلب اتصال واحد في كل مرة (عمليا) ؛ بحاجة إلى مسبح به اتصالات متعددة لكل مضيف.
HTTP/2: تعدد الإرسال في برنامج واحد للتعاون الفني ؛ عدد أقل من الاتصالات، ولكن منع HOL على TCP ممكن عند فقدان الحزم.
HTTP/3 (QUIC): بث الاستقلال على UDP - عدد أقل من مشاكل HOL، أسرع البايت الأول.

الإعدادات التي تساعد:
  • إبقاء المهلة على قيد الحياة 30-90 (حسب الملف الشخصي)، حد طلبات الاتصال (إعادة التدوير الرشيقة).
  • التدفئة المسبقة (preconce) في بداية العامل.
  • الحد الأقصى من التدفقات في HTTP/2 (على سبيل المثال 100-200).
NGINX (حارس المنبع):
nginx upstream backend {
server app-1:8080;
server app-2:8080;
keepalive 512;
keepalive_requests 1000;
keepalive_timeout 60s;
}
proxy_http_version 1. 1;
proxy_set_header Connection "";
مبعوث (مجموعة HTTP/2):
yaml http2_protocol_options:
max_concurrent_streams: 200 common_http_protocol_options:
idle_timeout: 60s max_connection_duration: 3600s

5) أحواض DB: PgBouncer و HikariCP والسائقون

الهدف هو الحد من المعاملات التنافسية والحفاظ على الاتصال القصير.

5. 1 PgBouncer (PostgreSQL)

الأساليب: 'جلسة '/' معاملة '/' بيان'. بالنسبة لواجهة برمجة التطبيقات - في كثير من الأحيان المعاملة.
المعلمات المهمة هي «pool _ size»، «min _ pool _ size»، «reserve _ pool _ size»، «server _ idle _ timeout'،» query _ wait _ timeout'.

ini
[databases]
appdb = host=pg-primary port=5432 dbname=appdb

[pgbouncer]
pool_mode = transaction max_client_conn = 5000 default_pool_size = 100 min_pool_size = 20 reserve_pool_size = 20 query_wait_timeout = 500ms server_idle_timeout = 60 server_reset_query = DISCARD ALL

5. 2 HikariCP (جافا)

اتصالات صغيرة وسريعة، مهلات صعبة.

properties dataSourceClassName=org. postgresql. ds. PGSimpleDataSource maximumPoolSize=30 minimumIdle=5 connectionTimeout=250 validationTimeout=200 idleTimeout=30000 maxLifetime=1800000 leakDetectionThreshold=5000
القواعد:
  • "maximumPoolSize ≈ RPS × W × headroom'.
  • "connectionTimeout' منازل من مللي ثانية، وليس ثوانٍ.
  • مكّن الكشف عن التسرب.

5. 3 Go/Node/Python - أمثلة

اذهب http. العميل (إعادة الاستخدام + المهلة):
go tr:= &http. Transport{
MaxIdleConns:    512,
MaxIdleConnsPerHost: 128,
IdleConnTimeout:   60 time. Second,
TLSHandshakeTimeout: 2 time. Second,
}
c:= &http. Client{
Transport: tr,
Timeout:  2 time. Second ,//general
}
عقدة. js keep-alive agent:
js const http = require('http');
const agent = new http. Agent({ keepAlive: true, maxSockets: 200, maxFreeSockets: 64, timeout: 60000 });
psycopg/SQLAlchemy (Python):
python engine = create_engine(
url, pool_size=30, max_overflow=10, pool_recycle=1800, pool_pre_ping=True, pool_timeout=0. 25
)

6) طوابير الانتظار وكمون الذيل

تحدث الذيول عندما:
  • المسبح أصغر من «λ × W» → طابور الاتصال ينمو.
  • تفاوت الحمل (رشقات نارية) بدون حاجز وحدود.
  • الطلبات الطويلة تأخذ الاتصال وتنشئ HOL.
التدابير المضادة:
  • مجمعات منفصلة حسب نوع الطلب (سريعة/بطيئة).
  • تنفيذ مهلة جانب العميل. إذا انتهت صلاحيته - NACK سريع.
  • الكشف الخارجي وكسر الدوائر على الطرق (المبعوث، HAProxy).
  • حصص للطرق «الثقيلة»، مجموعة منفصلة للتقارير/الصادرات.
قاطع دائرة المبعوث (مثال):
yaml circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 200 max_pending_requests: 100 max_requests: 1000 max_retries: 2

7) المهلات والتراجع (الترتيب الصحيح)

1. قم بتوصيل المهلة (اختصار: 50-250 مللي ثانية داخل العاصمة).
2. مهلة مصافحة TLS (500-1000 مللي ثانية вне العاصمة).
3. الطلب/اقرأ المهلة (أقرب إلى المسار SLO).
4. إعادة المحاولة: الوقت الأقصى 1، فقط للأساليب الحمقاء ؛ جيتر + تراجع.
5. ميزانية إعادة التدوير: الحد العالمي كنسبة مئوية من RPS (على سبيل المثال، ≤ 10٪).

8) البقاء على قيد الحياة، ناجل، البروتوكولات

عطل Nagle (TCP_NODELAY) للرسائل الصغيرة RPCs.
مكّن HTTP من البقاء على قيد الحياة حيثما أمكن ذلك.
شاهد TIME_WAIT - ضبط «إعادة الاستخدام »/« إعادة التدوير» فقط إذا فهمت العواقب ؛ أفضل - إعادة استخدام الاتصالات، وليس ضبط النواة.
TLS - استئناف الجلسة و ALPN.

9) ضبط نظام التشغيل/Kernel (بحذر)

نت. الأساسية. somaxconn'، 'نت. ipv4. ip_local_port_range'، 'نت. ipv4. tcp_fin_timeout'.
الأوصاف: «nofile» ≥ 64 ألف لكل عملية وكيل.
رصيد IRQ، GRO/LRO - حسب ملف المرور.
الأولوية - الملامح ؛ غالبًا ما يكون الضبط بدون مقاييس ضارًا.

10) إمكانية الملاحظة: ما يجب قياسه

استخدام المجمع: مشغول/إجمالي، p50/p95 اتصال معلق.
الطلبات على متن الطائرة ووقت احتجازها (شرائح الطريق).
ميزانية الخطأ: نسبة التكرارات.
قم بإنشاء/إغلاق الاتصال في الثانية.
TCP/TLS: SYN RTT، مصافحة، إعادة استخدام الجلسة.
Для БД: الاتصالات النشطة، الانتظار، المعاملات الطويلة، الأقفال.

Графики: "RPS vs pool wait'،" توزيع وقت الانتظار "،" نسبة إعادة الاستخدام "،" رحلات الدائرة ".

11) وصفات الحالة

11. 1 بوابة API → الخلفية

HTTP/2 إلى الخلف، «max _ concurrent _ streams = 200».
مجموعة من 20-40 وصلة لكل خدمة لكل عقدة بوابة.
المهلات: توصيل 100 مللي متر، لكل تجربة 300-500 مللي متر، مشاركة 1-2 ثانية، 1 إعادة محاولة مع النفاخ.

11. 2 خدمة → PostgreSQL عبر PgBouncer

'pool _ mode = transaction', 'default _ pool _ size' by formula (RPS × W × 1. 3).
في 'connectionTimeout≤250ms'، معاملات قصيرة (<100 مللي ثانية).
طلبات الإبلاغ الثقيلة - مجموعة منفصلة/نسخة طبق الأصل.

11. 3 gRPC داخلي

قناة واحدة (HTTP/2) لكل مضيف مستهدف بحد خيط 100-200.
الموعد النهائي على RPC على طريق SLO، أعد الدرس فقط.
تتبع عينة RPC الطويلة ومقاييس وقت الاحتفاظ.

12) قائمة التنفيذ المرجعية (0-30 يومًا)

0-7 أيام

قم بقياس «W» (وقت الانتظار) على الطرق/العملاء الرئيسيين.
احسب «N _ min = λ × W» وأضف 30-50٪ من مساحة الرأس.
مكّن من الحفاظ على الحياة وقصر مهلة الاتصال.

8-20 يومًا

مجمعات منفصلة (سريعة/بطيئة/خارجية).
نوع قواطع الدوائر وإعادة الميزانيات.
أضف لوحات القيادة: حمام السباحة انتظر p95، نسبة إعادة الاستخدام، على متن الطائرة.

21-30 يومًا

يجري الحمل مع رشقات نارية، واختبار الفوضى «سقوط الخلف».
تحسين الذيل: عزل الطرق الثقيلة والمخابئ المحلية.
صيغ وحدود المستندات في دفتر التشغيل 'ax.

13) الأنماط المضادة

حجم حمام السباحة «بشكل عشوائي» وبدون مساحة.
مهلة انتظار الاتصال الكبيرة → ذيول طويلة بدلاً من الإخفاقات السريعة.
يتراجع الكثيرون دون رعب وغباء → عاصفة.
تجمع مشترك واحد لجميع أنواع الطلبات.
تحافظ المعاملات الطويلة على الاتصال (DB) → تجويع البقية.
المعاقون الذين يبقون على قيد الحياة أو صغار جدًا من الخمول → يضطربون الحدود ونمو TTFB.

14) مقاييس النضج

بركة الانتظار p95 في برود <10٪ من إجمالي مسار p95.
نسبة إعادة الاستخدام (> 90٪ للـ HTTP الداخلي> 80 في المائة للخارجية).
DB txn time p95 <100-200 ms; النسبة المئوية للمعاملات الطويلة أقل من 1 في المائة.
معدل إعادة التجربة <5٪ (والميزانية ≤)، والأخطاء الناجمة عن المهلات مستقرة ويمكن التنبؤ بها.
تسوية مسبح موثقة لجميع العملاء المهمين.

15)

تجميع الاتصال الفعال هو هندسة قائمة الانتظار + انضباط المهلة. قم بقياس «W»، وقم بحساب حمام السباحة «λ × W» بهامش، وقم بتشغيل keep-alive/HTTP2 +، وفصل المسارات البطيئة، واحتفظ بالمهل القصيرة والحد الأدنى من التراجع مع النفاخ. أضف قابلية الملاحظة وقواطع الدوائر «انتظار المسبح مقابل زمن الانتظار» - وستحصل على TTFB منخفض، وذيل p99 يتم التحكم فيه ومقاومة زيادة دون ارتفاع درجة حرارة الخلف.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.