הגדלת קשרי רשת
(סעיף: מערכת אקולוגית ורשת)
1) תפקידי צומת ולולאות תנועה
אימות/הפקה (קונסנזוס/בלוק/רולופ-רצף): נתיב קריטי של פינליזציה.
Reader/indexer (קריאה בלבד/API/archive): משרת בקשות יישום ואנליטיקה.
ממסר/גשר (cross-domain): העברת הודעות/נכסים בין התחומים.
Gateway/Edge (כניסה/gRPC/WebSocket/QUIC): קבלת בקשות לקוח, מגבלת קצב, מטמון.
Tele metric/observability: אוסף של מדדים/לוגים/עקבות, דגימות סינתטיות.
לכל תפקיד יש SLO משלו, תקציב שגיאות ומדיניות הגדלה.
2) מודלים מדדים
2. סולם מעלה 1
הגדל את המעבד/RAM/SSD/NIC. מהיר לפסגות, אך מוגבל בברזל ויכול להגדיל את העלות ליחידת תנועה.
2. 2 סולם-אאוט
הוספת העתקים מאחורי מאזנים/תורים. דרוש אידאות, מדיניות דביקה, מניין ומטמונים עקביים (או נכותם).
2. 3 מגוון פונקציונלי
הפרדת חובות: צומתי קונצנזוס מבודדים; RPC/API - בנפרד; indexer/archive - בנפרד; גשר/רייר - בנפרד.
2. 4 קנה מידה גיאו
אשכולות אזוריים (EU/US/AP) + anycast/GeoDNS/Latency Aware LB; שכפול עם סיום/איחור ומטמונים מקומיים
2. 5 הדגשה/מחיצה
הפרדה בין מקשים ( ID, שבר, נושא) עבור תורים/מדדים ואחסונות עמודים.
3) נתיב בקשה: איזון, מטמון, QOS
איזון L4/L7: בדיקות בריאות, דביקות על ידי אסימון/זיהוי עקבות, מפסק מעגל, חריגה פליטה.
מטמונים:- על קצה (קצר-TTL עבור לעתים קרובות לקרוא RPCs);
- בתוך המעבד (קריאה דרך, כתיבה מסביב לאינדקסים);
- מטמונים שליליים (לא נמצאו).
- מחלקות QOS: P0 (פינליזציה/ברידג '/תשלומים), P1 (מוצר), P2 (בארכיון).
- תרגיל גב: אסימונים/נקודות זכות, הגבלת בקשות הסכמה, תורים עם DLQ.
- קבלה: טרום-סינון (auth, limits, geo/sorgs), דחייה מוקדמת של בקשות ”יקרות”.
4) ניהול מצב: תמונות, גיזום, ארכיון
מלא/שזיף: קשרי גיזום עבור RPC; ארכיון - לשאילתות רטרוספקטיבה בבריכה נפרדת.
תמונות/סינכרון מהיר: תמונות רגילות, סטריפ מהיר של העתקים חדשים.
אחסון חם/חם/קר: מצב חם על NVME, בלוקים היסטוריים - S3/object עם מדדים.
Garbadge-לאסוף/compaction: חלונות מתוכננים, לא בפסגות.
חוצץ DA/Batch (עבור L2/גשרים): ערבויות משלוח ותקופת ניקיון עם קבלות הוכחה.
5) תורים והזרמה
Ingress: Kafka/Pulsar/NATS offiction-key = ” Id' shard 'topic”.
קבוצות צרכנים: מדדים על ידי צדדים, מפעיל אידמפוטנט (outbox/inbox).
DLQ ו retrai: גיבוי מעריכי, הסגר רעל-הודעה.
סדר מוסכם: בתוך המפלגה לדטרמיניזם.
6) אופטימיזציות תחבורה ורשת
QUIC/HTTP/2: ריבוי, תיקון ראש השורה.
כוונון TCP: BBR/CUBIC, חוצץ מוגדל, ”SO _ REUSEPORT”.
גרנל/eBPF: ערימת רשת מואצת, חשיש עקבי לאיזון.
NIC פולטים את IRQ NUMA.
GRPC: פרמטרי שמירה/פינג, מגבלות לכל היותר.
שקע אינטרנט: בריכות חיבור, פינג/פונג, הגבילו מנויים ללקוח.
7) אמינות: קורומים, השפלה, מבחני כאוס
קריאת/כתיבת מניין (אם ישים), סיף מוביל.
דרכי השפלה: קריאה, ”רק סופית”, כיבוי שיטות כבדות.
הנדסת כאוס: עיכובים/הפסדים, הפעלה מחדש, כשל דיסק/רשת, תרחישים ”במהירות גבוהה מחדש”.
8) SLI/SLO ומטרות
SLI (דוגמה):- P95 RPC latency by method class;
- אחוזי הצלחה; תור-לג p95;
- Time-to-finality p95 (עבור מסילות/גשרים);
- זמן אתחול Snapshot;
- צמיחה/יום מדינה; רווית מעבד/IO.
- P0 RPC p95, 400 ms; זמינות ב-99. 95%;
- ממסר סופי p95 3min;
- Queue-lag P0 p95 locket 2;
- Bootstrap קורא חדש Latch 30/II (מהיר-סנכרון + snapshot);
- שגיאה בתקציב לשרוף על חלון 2 שעות על 2 ×.
9) יכולת התבוננות והתראה
Metrics: latency (היסטוגרמה), RPS, שגיאות (על ידי class), תור-לג, GC/heap, דיסק-io, עמיתי p2p, שיעור רכילות.
עקבות: trace 'to-end' trace _ id 'דרך הקצה # RPC # indeksator # khraneniye = רוב.
יומנים: מובנים, מתאם על ידי "בקשה _ id'.
התראות: שרפה בקצב P0, תור-לג, ספירת עמיתים מתחת לסף, ריגול-קוצים, סחיפה.
10) דפוסי גלישה אוטומטית
HPA/VPA (K8s): CPU/latency/RPS/תור-לאג; KEDA לכל אורך הנפות.
קפיצת מדרגה: פרופילי שיא יום; ניבוי על ידי ML/עונה.
חימום: העתקים ללא תנועה (קידום חינני).
צילום בטוח: Canary + outlier-ejection + SLO-Everything
11) בטיחות ובידוד
מצמיד MTLS/מפתח; RBAC/ABAC לכל שיטות; מגבלות QOS לכל org/דייר.
מגבלת קצב ומגן DOS: אסימונים, קפצ 'ות עבור RPC ציבורי, אנומליה-זיהוי.
ניהול סודי: אסימונים קצרי ימים, סיבוב.
ארגזי חול: Poules נפרד עבור ארכיון/לקוחות ציבוריים.
12) תצורות התייחסות
12. 1 K8s: שער RPC (סולם החוצה)
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: rpc-gateway }
spec:
replicas: 6 strategy: { type: RollingUpdate, rollingUpdate: { maxSurge: 2, maxUnavailable: 0 } }
selector: { matchLabels: { app: rpc-gateway } }
template:
metadata: { labels: { app: rpc-gateway, qos: P0 } }
spec:
containers:
- name: gateway image: org/rpc-gateway:2. 4. 1 ports: [{ containerPort: 443 }]
resources:
requests: { cpu: "1", memory: "2Gi" }
limits: { cpu: "4", memory: "6Gi" }
env:
- { name: MAX_CONCURRENCY, value: "400" }
- { name: CACHE_TTL_MS, value: "200" }
readinessProbe: { httpGet: { path: /healthz, port: 443 }, initialDelaySeconds: 5, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez, port: 443 }, initialDelaySeconds: 10, periodSeconds: 10 }
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: rpc-gateway-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: rpc-gateway }
minReplicas: 6 maxReplicas: 36 metrics:
- type: Pods pods:
metric:
name: request_latency_p95_ms target:
type: AverageValue averageValue: 350m # 350 мс
12. 2 שליח: עדיפות ופליטה חיצונית
yaml clusters:
- name: readers type: EDS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 2s base_ejection_time: 30s circuit_breakers:
thresholds:
- priority: DEFAULT max_connections: 20000 max_pending_requests: 5000 max_requests: 20000 health_checks:
- timeout: 1s interval: 3s http_health_check: { path: /healthz }
route_config:
request_headers_to_add:
- header: { key: x-trace-id, value: "%REQ(X-TRACE-ID)%" }
weighted_clusters:
clusters:
- name: readers weight: 100
12. 3 קפקא: חלוקה לפי תחום
yaml topic: "rpc. events"
partitions: 48 replicationFactor: 3 config:
retention. ms: 604800000 # 7 days max. message. bytes: 1048576 min. insync. replicas: 2 cleanup. policy: delete
12. 4 מדיניות QOS ומגבלות
yaml qos:
P0:
rps_limit_per_org: 1500 queue_lag_p95_ms: 2000 retry: { attempts: 3, backoff_ms: [100,400,800] }
P1:
rps_limit_per_org: 800
P2:
rps_limit_per_org: 200 admissions:
denylist_methods: ["eth_getLogs(>10k blocks)"]
heavy_query_guard: { max_range_blocks: 5000, require_token: true }
13) תרשימי נתונים ושאילתות לדוגמה
13. 1 node metrics (ספרייה)
sql
CREATE TABLE node_metrics (
ts TIMESTAMPTZ,
node_id TEXT, role TEXT, region TEXT,
rps INT, latency_p95_ms INT, errors_5xx INT,
queue_lag_ms INT, cpu NUMERIC, mem NUMERIC, io_wait NUMERIC
);
13. 2 SLO שליטה וקצב צריבה
sql
SELECT date_trunc('hour', ts) AS h, role,
AVG(latency_p95_ms) AS p95,
100. 0 SUM(CASE WHEN latency_p95_ms <= 400 THEN 1 ELSE 0 END)/COUNT() AS slo_hit_pct
FROM node_metrics
WHERE ts >= now() - INTERVAL '24 hours'
GROUP BY 1,2;
13. 3 תכנון טעינה
sql
SELECT region, role,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY rps) AS rps_p95,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY queue_lag_ms) AS lag_p95
FROM node_metrics
WHERE ts >= now() - INTERVAL '7 days'
GROUP BY region, role;
14) תקנות הפעלה
יומי: דו "ח SLO, capacy delta, סטטוס תמונות, בריאות עמיתים.
שבועי: תיקון גבולות/QOS, מבחן DR (אתחול מצילום), בדיקת גיזום ומדחס.
לפני השחרור: rollout קנרית, שערי SLO ו Metrics נצפה, תכנית rollback.
חשבונאות עלות: CTS לכל 1k בקשות, TPS_per_$ (יעילות לדולר).
15) תקריות משחק
איי. אר. פי. סי
1. אפשר דגימה P2-throttle ונמוכה יותר; 2) הגדלת העתקי שער/קורא;
2. להעביר קצת תנועה למטמון בלבד. 4) לפתוח בניתוח שיטות חמות, במידת הצורך - כללי הכחשה.
ב. תור-לג באוטובוס> SLO
1. צרכנים אוטוסקליים (KEDA), 2) מחלקים מחדש את המפלגות, 3) באופן זמני.
ירידה בספירת העמיתים במתן תוקף/ממסר
1. Restart p2p modules, 2) שינוי מושבים, 3) בדיקת רשת ACL/NAT, 4) הגנת החלפה.
ד. נעילת מגפיים ארוכה, העתק חדש
1. עבור לצילום טרי, 2) להעלות רוחב פס IO, 3) להסיר באופן זמני אינדקסים ארכיון.
אי. ספייק אירגן מחדש עיכובים בגשר
1. הגדל K-הכרה/חלון, 2) אפשר מצב ”סופי בלבד”, 3) ליידע את הצרכנים.
16) רשימת מימושים
1. הגדר תפקידי אתר ותקציבי SLOs/שגיאה שלהם.
2. לשאת פונקציות: קונצנזוס/RPC/indexer/archive/bridge/edge.
3. אפשר איזון, QOS, תרמיל גב ותור עם DLQ.
4. הגדרת תצלומים/מהיר סנכרון, גיזום וטיפ.
5. חיבור מדדים/שבילים/יומנים, לוחות מחוונים והתראות קצב צריבה.
6. הגדרה אוטומטית (HPA/KEDA) ושחרור כנרית.
7. עריכת מבחני כאוס ותרגילי ד "ר רגילים.
8. הצג תקנות הפעלה ופיקוח עלויות.
17) גלוסרי
תרמיל גב - מנגנונים לשליטה בזרימת קלט בעת עומס יתר.
DLQ - ”תור מת” להודעות בעיה.
גיזום - מחק את המצב ההיסטורי מחוץ לחלון הנוכחי.
Snapshot הוא דרך מואצת לסנכרן העתק חדש.
הדרה של מקרים מושחתים מהבריכה.
שיעור צריכת תקציב שרפה-שגיאה ביחס ל-SLO.
שורה תחתונה: הגדלת צמתים ברשת אינה רק ”הוספת העתקים”, אלא גם דיסציפלינת המערכת של ארכיטקטורה, QOS, ניהול מדינה והקפדה תפעולית. על ידי הפעלת מסגרת זו (הפרדת תפקידים, תורים, מטמונים, אוטוסקלה, יכולת תצפית ו-SLOS ברורים), המערכת האקולוגית משיגה ביצועים צפויים, עמידות שיא ועלות שליטה ליחידת תנועה.