12-Factor App: Operations (Part 3)
12-omilli ilova: operatsion masalalar (3-qism)
Yaxshi mehmon xonasini tasavvur qiling: mehmon kelganda tez joylashadi (tez boshlanish), ketganda hech qanday iz qoldirmaydi (tez, toza tugash), va har doim bir xil holatda kutib oladi (bashorat qilinadigan). 12-Factor'ning yakuniy qoidalari ilovaning "operatsion xulq-atvori"ga oid: Disposability (tez boshlash/to'xtash), Dev/prod parity (dasturchi kompyuteri va production imkon qadar bir xil), Logs (loglar oddiy oqim, fayl emas).
package main
import (
"fmt"
"os"
)
// LOGS AS EVENT STREAMS: loglar STDOUT'ga yoziladi, fayl BOSHQARILMAYDI.
// Fayl bilan qayerga, qanday rotatsiya bilan yozishni ILOVANING O'ZI emas,
// atrofdagi infratuzilma (Docker, Kubernetes, log aggregator) hal qiladi.
func logEvent(event string) {
fmt.Fprintln(os.Stdout, event) // fayl EMAS, stdout
}
func main() {
logEvent("dastur ishga tushdi")
logEvent("so'rov qabul qilindi")
}"Logs" qoidasi ayniqsa muhim: ilova hech qachon o'zi log fayllarini boshqarishi (qayerga yozish, qachon aylantirish/rotatsiya qilish) SHART EMAS. Buning o'rniga u shunchaki os.Stdoutga yozadi — "Logging with slog" kursida ko'rgan barcha misollar aynan shu tamoyilga amal qilgan edi. Konteyner muhitida ("Docker for Go Developers" kursida ko'rgan docker logs) bu oqim avtomatik yig'ib olinadi va log aggregator tizimiga ("Build a Log Aggregator" loyihasida quradigan turdagi tizimga) yuboriladi.
"Disposability" — ilova tez boshlanishi va tez, muloyimlik bilan to'xtashi kerak ("Graceful Shutdown" darsida chuqurroq ko'ramiz). Bu — Kubernetes kabi orkestratsiya tizimlari ilovani istalgan vaqtda o'ldirib, qayta ishga tushirishi mumkinligi uchun muhim: agar ilova sekin boshlansa yoki noto'g'ri to'xtasa, bu butun tizimning barqarorligiga ta'sir qiladi.
>_ Exercise
Log yozuvchi funksiyani "event stream" tamoyiliga moslang.
- •logRequest(method, path string) yozing: fmt.Fprintf(os.Stdout, ...) bilan "%s %s\n" formatida yozsin
- •logRequest("GET", "/health") va logRequest("POST", "/orders") ni chaqiring
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Ilova loglarni oddiy oqim (stdout) sifatida chiqaradi, tez boshlanadi va muloyim to'xtaydi, va dasturchi muhiti bilan production imkon qadar bir xil bo'lishi kerak — bularning barchasi ilovani "bulutda ishonchli" qiladi.
NEXT UP
Configuration Management: Loading Config (Part 1)
$ go run main.go
Kodingizni ishga tushiring