0Pricing
Go Academy · درس

فحوصات الصحة والضبط للإنتاج

‏HEALTHCHECK وtini ومعالجة الإشارات في الحاويات

فحوصات الصحة والضبط للإنتاج درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

نقاط نهاية فحص الصحة

تتيح نقطة نهاية فحص الصحة لموازنات التحميل والمنسّقات التحقق من أن الخدمة تعمل وجاهزة لمعالجة حركة المرور. النوعان الشائعان هما: الحيوية (هل تعمل؟) والجاهزية (هل يمكنها معالجة الطلبات؟).

نقطة نهاية الحيوية

تعيد 200 OK إذا كانت العملية قيد التشغيل. يكون المعالج البسيط ناجحًا دائمًا — إذ يكفي أن تكون العملية قيد التشغيل:

mux.HandleFunc("/healthz/live", func(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
})

نقطة نهاية الجاهزية

تعيد 200 فقط عندما تكون الخدمة جاهزة (متصلة بقاعدة البيانات، وذاكرة التخزين المؤقت مهيّأة، وعمليات الترحيل مكتملة). وتعيد 503 أثناء بدء التشغيل أو في حالة التدهور:

mux.HandleFunc("/healthz/ready", func(w http.ResponseWriter, r *http.Request) {
    if err := db.PingContext(r.Context()); err != nil {
        w.WriteHeader(http.StatusServiceUnavailable); return
    }
    w.WriteHeader(http.StatusOK)
})

فحوصات Kubernetes

اضبط فحوصات الحيوية والجاهزية في مواصفات Kubernetes Deployment:

livenessProbe:
  httpGet: { path: /healthz/live, port: 8080 }
  initialDelaySeconds: 5
  periodSeconds: 10
readinessProbe:
  httpGet: { path: /healthz/ready, port: 8080 }
  initialDelaySeconds: 3
  periodSeconds: 5

ضبط GOMAXPROCS

في الحاويات، تكون القيمة الافتراضية لـ GOMAXPROCS مبنية على عدد وحدات المعالجة المركزية في المضيف، لا على حد وحدة المعالجة المركزية للحاوية. استخدم go.uber.org/automaxprocs لتعيينها بشكل صحيح استنادًا إلى حدود cgroup.

import _ "go.uber.org/automaxprocs"

حدود الذاكرة

عيّن GOMEMLIMIT (في Go 1.19 والإصدارات الأحدث) إلى حد ذاكرة الحاوية، للسماح لجامع القمامة باستخدام الذاكرة بكثافة أكبر قبل تشغيل قاتل نفاد الذاكرة:

import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024) // 512 MiB

ضبط GC

عيّن GOGC للتحكم في تكرار GC. القيمة الافتراضية هي 100 (يعمل GC عندما تتضاعف الكومة). تقلل القيم المنخفضة الذاكرة على حساب زيادة تكرار GC؛ بينما تستبدل القيم المرتفعة مزيدًا من الذاكرة بتقليل تكرار GC.

os.Setenv("GOGC", "200") // allow heap to grow 2× before GC

ضبط مجموعة الاتصالات

عيّن حدود مجموعة اتصالات قاعدة البيانات بما يتناسب مع حدود موارد الحاوية وقيمة max_connections في قاعدة البيانات:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(5 * time.Minute)

إتاحة المقاييس

اعرض مقاييس Prometheus على منفذ منفصل (وليس منفذ API الرئيسي) لتجنب تسريب البيانات الداخلية إلى العملاء الخارجيين:

go func() {
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":9090", nil)
}()

الإيقاف السلس في Kubernetes

عيّن terminationGracePeriodSeconds في مواصفات الـ pod لإتاحة وقت كافٍ لمهلة الإيقاف. أعد 503 من فحص الجاهزية فور تلقي SIGTERM.

التنميط في الإنتاج

فعّل pprof على منفذ غير عام مع المصادقة. لا تعرضه للعامة مطلقًا — فهو يكشف الحالة الداخلية ويمكن استخدامه لتنفيذ حجب الخدمة على الخدمة.

تحقق سريع

لماذا ينبغي تعيين GOMAXPROCS استنادًا إلى حدود وحدات المعالجة المركزية للحاوية بدلًا من وحدات المعالجة المركزية في المضيف؟

مراجعة: فحوصات الصحة وضبط الإنتاج

النقاط الأساسية:

  • الحيوية: العملية قيد التشغيل؛ الجاهزية: الخدمة قادرة على معالجة حركة المرور
  • يعيّن automaxprocs قيمة GOMAXPROCS استنادًا إلى حدود وحدات المعالجة المركزية للحاوية
  • يمنع GOMEMLIMIT عمليات القتل بسبب نفاد الذاكرة؛ ويضبط GOGC تكرار GC
  • اعرض المقاييس على منفذ منفصل داخلي فقط

الأسئلة الشائعة

هل درس «فحوصات الصحة والضبط للإنتاج» مجاني؟

نعم — نص درس «فحوصات الصحة والضبط للإنتاج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «فحوصات الصحة والضبط للإنتاج»؟

‏HEALTHCHECK وtini ومعالجة الإشارات في الحاويات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «فحوصات الصحة والضبط للإنتاج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بناء Docker متعدد المراحل لـ Go
  2. إعدادات البيئة والأسرار
  3. ‏Docker Compose للتطوير المحلي
  4. فحوصات الصحة والضبط للإنتاج
← العودة إلى Go Academy