Computer >> Máy Tính >  >> Lập trình >> Redis

Theo dõi phân tán với go-redis, Upstash và OpenTelemetry

Trong hướng dẫn này, bạn sẽ học cách kết nối với cơ sở dữ liệu Upstash Redis bằng ứng dụng khách go-redis và theo dõi hiệu suất của ứng dụng của bạn bằng cách sử dụng tính năng theo dõi phân tán.

go-redis là gì?

go-redis là một ứng dụng Redis phổ biến cho Golang. Ngoài ra, nó hỗ trợ Redis Server, Sentinel và Cluster.

Để kết nối với cơ sở dữ liệu Upstash Redis, hãy sử dụng mã sau:

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

Để thực hiện các lệnh tùy ý, bạn cũng có thể sử dụng một API thay thế:

val, err := rdb.Do(ctx, "get", "key").Result()
if err != nil {
	if err == redis.Nil {
		fmt.Println("key does not exists")
		return
	}
	panic(err)
}

Bạn có thể sử dụng go-redis để lưu dữ liệu vào bộ nhớ cache hoặc các yêu cầu giới hạn tốc độ đối với API của mình. Để tìm hiểu thêm về ứng dụng khách, hãy xem tài liệu Redis Golang.

Theo dõi phân tán là gì?

Theo dõi phân tán cho phép quan sát các yêu cầu khi chúng truyền qua các hệ thống phân tán, đặc biệt là những hệ thống được xây dựng bằng kiến ​​trúc microservices.

Truy tìm cho phép thực hiện theo các yêu cầu khi chúng di chuyển qua các hệ thống phân tán. Bạn sẽ có được bối cảnh đầy đủ về những gì khác biệt, những gì bị hỏng và những nhật ký &lỗi nào có liên quan.

Theo dõi phân tán với go-redis, Upstash và OpenTelemetry

OpenTelemetry là gì?

OpenTelemetry là một tiêu chuẩn trung lập với nhà cung cấp cho phép bạn thu thập và xuất dấu vết, nhật ký và số liệu.

Otel cho phép các nhà phát triển thu thập và xuất dữ liệu đo từ xa theo cách bất khả tri của nhà cung cấp. Với OpenTelemetry, bạn có thể thiết bị ứng dụng của mình một lần và sau đó thêm hoặc thay đổi nhà cung cấp mà không cần thay đổi thiết bị, ví dụ:đây là danh sách các lựa chọn thay thế DataDog phổ biến hỗ trợ OpenTelemetry.

OpenTelemetry có sẵn cho hầu hết các ngôn ngữ lập trình và cung cấp khả năng tương tác trên các ngôn ngữ và môi trường khác nhau.

Theo dõi và go-redis

go-redis đi kèm với một thiết bị đo lường OpenTelemetry được gọi là redisotel được phân phối dưới dạng một mô-đun riêng biệt:

go get github.com/go-redis/redis/extra/redisotel/v8

Đối với ứng dụng khách Redis, bạn cần thêm hook do redisotel cung cấp:

import (
    "github.com/go-redis/redis/v8"
    "github.com/go-redis/redis/extra/redisotel/v8"
)

rdb := redis.NewClient(&redis.Options{...})

rdb.AddHook(redisotel.NewTracingHook())

Để thực hiện công việc theo dõi, bạn phải chuyển ngữ cảnh theo dõi hoạt động cho các lệnh go-redis, ví dụ:

ctx := req.Context()
val, err := rdb.Get(ctx, "key").Result()

Để tìm hiểu thêm về redisotel, hãy xem phần Giám sát hiệu suất và lỗi của Go Redis.

Uptrace

Uptrace là đối thủ cạnh tranh của DataDog mã nguồn mở với trình tạo truy vấn trực quan, trang tổng quan phong phú, cảnh báo tự động và tích hợp cho hầu hết các ngôn ngữ và khuôn khổ.

Bạn có thể cài đặt Uptrace bằng cách tải xuống gói DEB / RPM hoặc tệp nhị phân được biên dịch trước.

Như mong đợi, redisotel tạo các khoảng thời gian cho các lệnh Redis đã xử lý và ghi lại bất kỳ lỗi nào khi chúng xảy ra. Đây là cách thông tin thu thập được hiển thị tại Uptrace:

Theo dõi phân tán với go-redis, Upstash và OpenTelemetry

Bạn có thể tìm thấy một ví dụ có thể chạy được tại GitHub.

Tiếp theo là gì?

Tiếp theo, bạn có thể cài đặt thêm các công cụ OpenTelemetry để theo dõi các khía cạnh khác của ứng dụng, ví dụ:Gin hoặc Go gRPC.

Bạn cũng có thể tìm hiểu về API theo dõi OpenTelemetry và API chỉ số để tạo thiết bị đo của riêng bạn.