
CPRA هو نظام مراقبة بنية تحتية عالي الأداء مصمم لفرق المنصات التي تدير بنى الخدمات المصغرة واسعة النطاق. مبني على بنية الكيان-المكوّن-النظام (Entity-Component-System — ECS) ومبادئ نظرية الطوابير، يتعامل CPRA مع أكثر من 1,000,000 فحص صحة متزامن مع توسيع تلقائي لتجمع العمال (worker pool) لتحقيق أهداف SLO.
راقب ملايين الخدمات بشكل متزامن مع التصحيح التلقائي والتوسع الديناميكي للعاملين.
CPRA هو نظام مراقبة بنية تحتية عالي الأداء مصمم لفرق المنصة التي تدير بنيات الخدمات المصغرة واسعة النطاق. مبني على بنية نظام المكونات-الكيانات (ECS) ومبادئ نظرية الطوابير، يعالج CPRA 1,000,000+ فحص صحي متزامن مع توسيع تلقائي لتجمّع العاملين لتلبية أهداف مستوى الخدمة (SLO).
استخدم CPRA عندما تحتاج إلى:
| المقياس | القيمة |
|---|---|
| أقصى عدد من المراقبين المتزامنين | 1,000,000+ |
| الإنتاجية | 10,000+ فحص/ثانية/خط أنابيب |
| زمن الاستجابة (P95) | < 100 مللي ثانية (قابل للتكوين عبر SLO) |
| الذاكرة لكل مراقب | ~100 بايت |
| إجمالي الذاكرة (1 مليون مراقب) | ~100 ميجابايت + تحميل مجموعة العاملين |
| توسع العاملين | ديناميكي (يعتمد على M/M/c) |
اطلع على نظرة عامة على البنية للحصول على معايير وتحليلات مفصلة.
يستخدم CPRA بنية ثلاثية خطوط الأنابيب مبنية على مبادئ نظام المكونات-الكيانات:


يعمل كل خط أنابيب بشكل مستقل مع طابوره الخاص ومجموعة العاملين الموسعة ديناميكيًا، مما يتيح:

تطبيقات الطوابير:
مجموعات العاملين الديناميكية:
للحصول على شرح شامل للبنية، راجع نظرة عامة على البنية.
# المتطلبات الأساسية: Go 1.25 أو أحدث
go version # يجب أن يظهر go1.25 أو أعلى
# البناء من المصدر
git clone https://github.com/ziad/cpra.git
cd cpra
go build .
# التشغيل مع إعدادات مثال
./cpra --yaml mock-servers/test_10k.yaml
المخرجات المتوقعة:
Starting CPRA Optimized Controller for 1M Monitors
Profiling server listening at http://localhost:6060/debug/pprof/
Loading monitors from mock-servers/test_10k.yaml...
Monitor loading completed in 1.2s
[INFO] Controller started successfully
[INFO] Pulse pipeline processing 10,000 monitors
[INFO] Worker pool scaled to 143 workers (target SLO: 100ms)
استنساخ المستودع:
git clone https://github.com/ziad/cpra.git
cd cpra
تنزيل التبعيات:
go mod download
بناء التطبيق:
go build .
التحقق من التثبيت:
./cpra --help
بناء صورة Docker:
docker build -f docker/Dockerfile -t cpra:latest .
تشغيل الحاوية:
docker run -it --rm \
-v $(pwd)/my-monitors.yaml:/app/monitors.yaml \
cpra:latest \
./cpra --yaml monitors.yaml
أنشئ ملف monitors.yaml لتحديد فحوصات الصحة:
monitors:
- name: "my-service-health-check"
pulse_check:
type: http
interval: 30s
timeout: 5s
max_failures: 3
config:
method: GET
url: http://my-service.example.com/health
retries: 2
intervention:
action: docker
config:
container: my-service-container
action: restart
codes:
red:
dispatch: true
notify: pagerduty
config:
url: https://events.pagerduty.com/v2/enqueue
yellow:
dispatch: true
notify: log
config:
file: /var/log/cpra-alerts.log
توليد إعدادات الاختبار:
استخدم mock-servers/generate_monitors.py لتوليد إعدادات اختبار بأي عدد من المراقبين.
قم بتكوين سلوك CPRA برمجيًا:
package main
import (
"cpra/internal/controller"
)
func main() {
config := controller.DefaultConfig()
// وضع التصحيح
config.Debug = true
// إعدادات مجموعة العاملين (تنطبق على خطوط الأنابيب الثلاثة)
config.WorkerConfig.MinWorkers = 10
config.WorkerConfig.MaxWorkers = 500
// إعدادات الطابور
config.QueueCapacity = 131072 // يجب أن يكون قوة 2
// ضبط الأداء
config.BatchSize = 2000
config.SizingServiceTime = 20 * time.Millisecond // متوسط مدة المهمة
config.SizingSLO = 100 * time.Millisecond // زمن الاستجابة المستهدف
config.SizingHeadroomPct = 0.15 // 15% حماية أمان
ctrl := controller.NewController(config)
// ... باقي التهيئة
}
راجع مرجع API للحصول على خيارات الإعدادات الكاملة.
./cpra [OPTIONS]
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
--yaml | string | internal/loader/replicated_test.yaml | مسار ملف YAML للمراقبين |
--config | string | - | مسار ملف الإعدادات (اختياري) |
--debug | bool | false | تفعيل التسجيل على مستوى التصحيح |
--pprof | bool | true | تفعيل خادم ملف تعريف pprof |
--pprof.addr | string | localhost:6060 | عنوان استماع خادم pprof |
أمثلة:
# التشغيل مع تسجيل التصحيح
./cpra --yaml monitors.yaml --debug
# التشغيل مع منفذ pprof مخصص
./cpra --yaml monitors.yaml --pprof.addr localhost:8080
# تعطيل ملف التعريف
./cpra --yaml monitors.yaml --pprof=false
المشكلة: YAML file not found
Warning: YAML file monitors.yaml not found, starting without loading monitors
الحل: تحقق من صحة مسار الملف. استخدم مسارات مطلقة أو مسارات نسبية بالنسبة لمكان تشغيل الثنائي:
./cpra --yaml $(pwd)/monitors.yaml
المشكلة: Build fails with Go version error
go.mod requires go >= 1.25
الحل: قم بترقية Go إلى الإصدار 1.25 أو أحدث:
go version # تحقق من الإصدار الحالي
# تنزيل Go 1.25+ من https://go.dev/dl/
المشكلة: High memory usage
الحل: تحقق من استخدام الذاكرة باستخدام pprof:
# أثناء تشغيل CPRA، ادخل إلى pprof
go tool pprof http://localhost:6060/debug/pprof/heap
# عرض أكبر مستهلكي الذاكرة
(pprof) top
قم بضبط حدود الذاكرة في الإعدادات:
config.WorkerConfig.MaxWorkers = 200 // تقليل الحد الأقصى للعاملين
config.QueueCapacity = 65536 // تقليل حجم الطابور
المشكلة: Worker pool not scaling
الحل: قم بتفعيل تسجيل التصحيح لرؤية قرارات التوسع:
./cpra --yaml monitors.yaml --debug
تحقق من معاملات نظرية الطوابير:
config.SizingServiceTime = 50 * time.Millisecond // زده إذا استغرقت المهام وقتًا أطول
config.SizingSLO = 200 * time.Millisecond // خفف SLO إذا لزم الأمر
المشكلة: Monitors not executing
الحل: تحقق من تنسيق إعدادات المراقب واطلع على السجلات:
./cpra --yaml monitors.yaml --debug 2>&1 | grep ERROR
تحقق من صحة بناء YAML:
# استخدم مدقق YAML
python -m yaml monitors.yaml
--debug)نرحب بمساهمات المجتمع! CPRA هو مشروع مفتوح المصدر ونقدر:
بدء المساهمة:
good first issueموارد التطوير:
هذا المشروع مرخص بموجب رخصة MIT - راجع ملف LICENSE للحصول على التفاصيل.
CPRA مبني على مكتبات مفتوحة المصدر ممتازة: