ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีเชื่อมต่อกับฐานข้อมูล Upstash Redis โดยใช้ไคลเอ็นต์ go-redis และตรวจสอบประสิทธิภาพของแอปโดยใช้การติดตามแบบกระจาย
go-redis คืออะไร
go-redis เป็นไคลเอนต์ Redis ยอดนิยมสำหรับ Golang นอกกรอบ รองรับ Redis Server, Sentinel และ Cluster
ในการเชื่อมต่อกับฐานข้อมูล Upstash Redis ให้ใช้รหัสต่อไปนี้:
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
ctx := context.Background()
opt, _ := redis.ParseURL("<connection-string-from-Upstash>")
client := redis.NewClient(opt)
if err := client.Set(ctx, "foo", "bar", 0); err != nil {
panic(err)
}
fmt.Println(client.Get(ctx, "foo").Result())
}
ในการรันคำสั่งโดยพลการ คุณสามารถใช้ API ทางเลือก:
val, err := rdb.Do(ctx, "get", "key").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("key does not exists")
return
}
panic(err)
}
คุณสามารถใช้ go-redis เพื่อแคชข้อมูลหรือคำขอจำกัดอัตราไปยัง API ของคุณ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับไคลเอ็นต์ โปรดดูเอกสารประกอบของ Redis Golang
การติดตามแบบกระจายคืออะไร
การติดตามแบบกระจายช่วยให้สามารถสังเกตคำขอขณะที่ส่งผ่านระบบแบบกระจาย โดยเฉพาะอย่างยิ่งคำขอที่สร้างขึ้นโดยใช้สถาปัตยกรรมไมโครเซอร์วิส
การติดตามช่วยให้สามารถติดตามคำขอขณะเดินทางผ่านระบบแบบกระจาย คุณจะได้รับบริบทที่สมบูรณ์ของสิ่งที่แตกต่าง สิ่งที่เสียหาย และบันทึกและข้อผิดพลาดที่เกี่ยวข้อง
OpenTelemetry คืออะไร
OpenTelemetry เป็นมาตรฐานที่เป็นกลางจากผู้ขาย ซึ่งช่วยให้คุณรวบรวมและส่งออกการติดตาม บันทึก และตัววัดได้
Otel ช่วยให้นักพัฒนาสามารถรวบรวมและส่งออกข้อมูลการวัดและส่งข้อมูลทางไกลด้วยวิธีที่ไม่เชื่อเรื่องพระเจ้าของผู้ขาย ด้วย OpenTelemetry คุณสามารถเพิ่มเครื่องมือให้กับแอปพลิเคชันของคุณเพียงครั้งเดียวแล้วเพิ่มหรือเปลี่ยนผู้ให้บริการโดยไม่ต้องเปลี่ยนเครื่องมือ เช่น นี่คือรายการทางเลือก DataDog ยอดนิยมที่รองรับ OpenTelemetry
OpenTelemetry พร้อมใช้งานสำหรับภาษาการเขียนโปรแกรมส่วนใหญ่และให้ความสามารถในการทำงานร่วมกันในภาษาและสภาพแวดล้อมต่างๆ
การติดตามและ go-redis
go-redis มาพร้อมกับเครื่องมือวัด OpenTelemetry ที่เรียกว่า redisotel ซึ่งแจกจ่ายเป็นโมดูลแยกต่างหาก:
go get github.com/go-redis/redis/extra/redisotel/v8
ในเครื่องมือไคลเอ็นต์ Redis คุณต้องเพิ่ม hook ที่ redisotel ให้มา:
import (
"github.com/go-redis/redis/v8"
"github.com/go-redis/redis/extra/redisotel/v8"
)
rdb := redis.NewClient(&redis.Options{...})
rdb.AddHook(redisotel.NewTracingHook())
เพื่อให้การติดตามทำงาน คุณต้องส่งบริบทการติดตามที่ใช้งานอยู่ไปยังคำสั่ง go-redis ตัวอย่างเช่น:
ctx := req.Context()
val, err := rdb.Get(ctx, "key").Result()
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ redisotel โปรดดูที่ Monitoring Go Redis Performance and Errors
อัพเทรซ
Uptrace เป็นคู่แข่งของ DataDog แบบโอเพนซอร์สที่มีเครื่องมือสร้างการสืบค้นที่ใช้งานง่าย แดชบอร์ดที่สมบูรณ์ การแจ้งเตือนอัตโนมัติ และการผสานรวมสำหรับภาษาและเฟรมเวิร์กส่วนใหญ่
คุณสามารถติดตั้ง Uptrace ได้โดยดาวน์โหลดแพ็คเกจ DEB/RPM หรือไบนารีที่คอมไพล์แล้ว
ตามที่คาดไว้ Redisotel จะสร้างช่วงสำหรับคำสั่ง Redis ที่ประมวลผลแล้วและบันทึกข้อผิดพลาดใดๆ ที่เกิดขึ้น นี่คือวิธีการแสดงข้อมูลที่รวบรวมได้ที่ Uptrace:
คุณสามารถหาตัวอย่างที่รันได้ที่ GitHub
ถัดไปคืออะไร
ถัดไป คุณสามารถติดตั้งเครื่องมือวัด OpenTelemetry เพิ่มเติมเพื่อตรวจสอบแง่มุมอื่นๆ ของแอป เช่น Gin หรือ Go gRPC
คุณยังสามารถเรียนรู้เกี่ยวกับ OpenTelemetry Tracing API และ Metrics API เพื่อสร้างเครื่องมือของคุณเองได้