0Pricing
Go Academy · Pelajaran

Pemeriksaan Kesehatan dan Penyetelan Produksi

HEALTHCHECK, tini, dan penanganan sinyal dalam container

Pemeriksaan Kesehatan dan Penyetelan Produksi adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Titik akhir pemeriksaan kesehatan

Titik akhir pemeriksaan kesehatan memungkinkan penyeimbang beban dan orkestrator memverifikasi bahwa layanan aktif dan siap menerima lalu lintas. Ada dua jenis umum: keaktifan (apakah layanan sedang berjalan?) dan kesiapan (apakah layanan dapat menangani permintaan?).

Titik akhir keaktifan

Mengembalikan 200 OK jika proses masih aktif. Ini adalah penangan sederhana yang selalu berhasil—proses yang masih berjalan sudah cukup:

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

Titik akhir kesiapan

Mengembalikan 200 hanya ketika layanan siap (basis data terhubung, cache sudah dipanaskan, migrasi selesai). Mengembalikan 503 selama proses dimulai atau saat kondisi layanan menurun:

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)
})

Probe Kubernetes

Konfigurasikan probe keaktifan dan kesiapan dalam spesifikasi Deployment Kubernetes:

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

Penyetelan GOMAXPROCS

Dalam kontainer, GOMAXPROCS secara bawaan menggunakan jumlah CPU host, bukan batas CPU kontainer. Gunakan go.uber.org/automaxprocs untuk menetapkannya dengan benar berdasarkan batas cgroup.

import _ "go.uber.org/automaxprocs"

Batas memori

Tetapkan GOMEMLIMIT (Go 1.19+) ke batas memori kontainer agar pengumpul sampah dapat menggunakan memori secara lebih agresif sebelum penghentian oleh OOM terjadi:

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

Penyetelan pengumpulan sampah

Tetapkan GOGC untuk mengendalikan frekuensi pengumpulan sampah. Nilai bawaannya adalah 100 (pengumpulan sampah dilakukan saat heap menjadi dua kali lipat). Nilai yang lebih rendah mengurangi penggunaan memori dengan konsekuensi pengumpulan sampah yang lebih sering; nilai yang lebih tinggi menukar penggunaan memori yang lebih besar dengan pengumpulan sampah yang lebih jarang.

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

Penyetelan kumpulan koneksi

Tetapkan batas kumpulan koneksi basis data yang sesuai dengan batas sumber daya kontainer dan max_connections pada basis data:

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

Mengekspos metrik

Ekspos metrik Prometheus pada port terpisah (bukan port API utama) untuk mencegah data internal bocor kepada klien eksternal:

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

Penghentian secara anggun di Kubernetes

Tetapkan terminationGracePeriodSeconds dalam spesifikasi pod agar tersedia waktu yang cukup untuk batas waktu penghentian. Segera kembalikan 503 dari probe kesiapan ketika SIGTERM diterima.

Pembuatan profil di produksi

Aktifkan pprof pada port nonpublik dengan autentikasi. Jangan pernah mengeksposnya secara publik—pprof mengungkapkan keadaan internal dan dapat digunakan untuk melakukan DoS terhadap layanan.

Pemeriksaan Singkat

Mengapa GOMAXPROCS harus ditetapkan berdasarkan batas CPU kontainer, bukan CPU host?

Ringkasan: Pemeriksaan Kesehatan dan Penyetelan Produksi

Poin penting:

  • Keaktifan: proses masih aktif; Kesiapan: layanan dapat menangani lalu lintas
  • automaxprocs menetapkan GOMAXPROCS berdasarkan batas CPU kontainer
  • GOMEMLIMIT mencegah penghentian akibat OOM; GOGC menyetel frekuensi pengumpulan sampah
  • Ekspos metrik pada port terpisah yang hanya dapat diakses secara internal

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemeriksaan Kesehatan dan Penyetelan Produksi” gratis?

Ya — teks lengkap “Pemeriksaan Kesehatan dan Penyetelan Produksi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pemeriksaan Kesehatan dan Penyetelan Produksi”?

HEALTHCHECK, tini, dan penanganan sinyal dalam container Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pemeriksaan Kesehatan dan Penyetelan Produksi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Build Docker Multitahap untuk Go
  2. Konfigurasi Lingkungan dan Rahasia
  3. Docker Compose untuk Pengembangan Lokal
  4. Pemeriksaan Kesehatan dan Penyetelan Produksi
← Kembali ke Go Academy