Logo GH

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

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

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

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