0
0
Lập trình
Admin Team
Admin Teamtechmely

Giám sát Giao diện Khách hàng AWS: Tối ưu hóa hiệu suất

Đăng vào 3 tháng trước

• 8 phút đọc

Giới thiệu về Chế độ Giám sát Khách hàng AWS (CSM)

Chế độ Giám sát Khách hàng (Client-Side Monitoring - CSM) của AWS là một tính năng mạnh mẽ giúp theo dõi và phân tích hiệu suất của các cuộc gọi SDK AWS. Khi được kích hoạt, nó cung cấp các chỉ số chi tiết về yêu cầu API, thời gian phản hồi và tỷ lệ lỗi, giúp các nhà phát triển hiểu sâu hơn về hành vi của ứng dụng khi tương tác với các dịch vụ AWS. Điều này rất quan trọng cho việc gỡ lỗi, tối ưu hóa hiệu suất và đảm bảo rằng các ứng dụng hoạt động hiệu quả trong môi trường sản xuất.

CSM hoạt động bằng cách thu thập thông tin về các cuộc gọi API của SDK và gửi dữ liệu đó đến một tác nhân giám sát địa phương. Nó giúp bạn:

  • Theo dõi độ trễ của yêu cầu API.
  • Xác định tỷ lệ lỗi cao trong các yêu cầu SDK.
  • Nhận biết các dịch vụ AWS thường được gọi nhất.

Trong bài viết này, chúng ta sẽ khám phá chế độ CSM của AWS một cách chi tiết hơn, xem xét các trường hợp sử dụng phổ biến và cung cấp các đoạn mã Golang để minh họa cách triển khai nó.

Tại sao nên sử dụng Chế độ CSM của AWS?

Khi các ứng dụng ngày càng phụ thuộc vào các dịch vụ đám mây, việc giám sát và tối ưu hóa hiệu suất của các tương tác này trở nên rất quan trọng. Các SDK của AWS được sử dụng rộng rãi để giao tiếp với các dịch vụ AWS như S3, DynamoDB, Lambda và nhiều dịch vụ khác. Tuy nhiên, việc quản lý và theo dõi những tương tác này có thể gặp khó khăn, đặc biệt là khi xác định các vấn đề về độ trễ hoặc các nút thắt trong giao tiếp giữa ứng dụng của bạn và AWS.

CSM cung cấp một cái nhìn chi tiết về cách các yêu cầu SDK hoạt động. Nó cho phép bạn thu thập các chỉ số như:

  • Độ trễ: Thời gian mỗi yêu cầu mất.
  • Lỗi: Dịch vụ AWS nào đang trả về lỗi và lý do tại sao.
  • Tần suất yêu cầu: Dịch vụ nào đang được gọi nhiều nhất.

Dữ liệu này vô cùng quý giá cho việc điều chỉnh hiệu suất, gỡ lỗi và lập kế hoạch năng lực.

Các trường hợp sử dụng phổ biến cho Chế độ CSM của AWS

Tối ưu hóa hiệu suất:

Bằng cách theo dõi độ trễ của các cuộc gọi dịch vụ AWS, bạn có thể xác định các yêu cầu API mất nhiều thời gian nhất để thực hiện. Điều này có thể giúp bạn tối ưu hóa hiệu suất của ứng dụng, cho dù thông qua việc lưu trữ, thử lại, hoặc thực hiện các yêu cầu song song.

Theo dõi lỗi:

Nếu ứng dụng của bạn gặp phải lỗi thường xuyên khi tương tác với các dịch vụ AWS, CSM có thể giúp xác định nguyên nhân gốc rễ. Ví dụ, nếu một dịch vụ AWS cụ thể đang trả về một lượng lớn lỗi 5xx, CSM sẽ ghi lại thông tin này, giúp các nhà phát triển gỡ lỗi nhanh chóng.

Lập kế hoạch năng lực:

Việc theo dõi số lượng yêu cầu gửi đến các dịch vụ AWS có thể giúp dự đoán nhu cầu về năng lực và điều chỉnh tài nguyên cho phù hợp. Ví dụ, nếu bạn đang thực hiện một số lượng lớn yêu cầu đến DynamoDB, có thể đã đến lúc mở rộng khả năng đọc/ghi của bạn.

Gỡ lỗi các vấn đề trong sản xuất:

Khi có điều gì đó sai trong môi trường sản xuất, CSM có thể cung cấp thông tin quan trọng về các dịch vụ AWS hoặc các cuộc gọi API đang gây ra vấn đề, cho phép giải quyết nhanh chóng.

Cài đặt AWS CSM trong Golang

AWS SDK cho Go cung cấp hỗ trợ gốc cho giám sát phía khách hàng. Để kích hoạt CSM, bạn cần cấu hình SDK để gửi dữ liệu đến tác nhân CSM địa phương, tác nhân này sẽ xử lý và chuyển tiếp tới các công cụ giám sát như Amazon CloudWatch.

Bước 1: Cài đặt AWS SDK cho Go

Đầu tiên, bạn cần cài đặt AWS SDK cho Go, nếu bạn chưa làm:

Copy
go get -u github.com/aws/aws-sdk-go

Bước 2: Kích hoạt CSM trong AWS SDK

Để kích hoạt CSM trong AWS SDK cho Go, bạn cần cấu hình các biến môi trường điều khiển hành vi của CSM, hoặc bạn có thể làm điều này theo cách lập trình trong ứng dụng của mình.

Dưới đây là ví dụ cách bạn có thể kích hoạt CSM bằng cách sử dụng biến môi trường:

Copy
export AWS_CSM_ENABLED=true
export AWS_CSM_HOST=127.0.0.1
export AWS_CSM_PORT=31000
export AWS_CSM_CLIENT_ID=my-client-id
  • AWS_CSM_ENABLED: Kích hoạt hoặc vô hiệu hóa CSM.
  • AWS_CSM_HOST: Tên máy chủ nơi tác nhân CSM đang chạy (thường là localhost).
  • AWS_CSM_PORT: Cổng mà tác nhân CSM đang lắng nghe.
  • AWS_CSM_CLIENT_ID: Một định danh khách hàng được sử dụng để phân biệt giữa các khách hàng.

Bước 3: Cấu hình AWS SDK để sử dụng CSM

Trong Golang, bạn cấu hình SDK để sử dụng CSM khi thực hiện các cuộc gọi API AWS. Dưới đây là một ví dụ đơn giản nơi chúng ta tạo một khách hàng S3 và thực hiện một yêu cầu với CSM được kích hoạt.

go Copy
package main

import (
  "fmt"
  "net"
  "time"
)

func listenUDP(port int, ch chan<- []byte) {
  addr := net.UDPAddr{
    Port: port,
    IP:   net.ParseIP("0.0.0.0"),
  }

  conn, err := net.ListenUDP("udp", &addr)
  if err != nil {
    fmt.Println("Lỗi khi lắng nghe trên UDP:", err)
    return
  }
  defer func(conn *net.UDPConn) {
    err := conn.Close()
    if err != nil {
      fmt.Println("Lỗi khi đóng kết nối UDP:", err)
    }
  }(conn)

  buffer := make([]byte, 2048)
  for {
    n, _, err := conn.ReadFromUDP(buffer)
    if err != nil {
      fmt.Println("Lỗi khi đọc từ UDP:", err)
      continue
    }
    // Gửi dữ liệu nhận được đến kênh
    ch <- buffer[:n]
  }
}

func writeToConsole(ch <-chan []byte) {
  for msg := range ch {
    fmt.Println("Nhận từ kênh:", string(msg))
  }
}

func main() {
  byteChannel := make(chan []byte)

  // Goroutine để lắng nghe trên UDP và ghi vào kênh
  go listenUDP(31000, byteChannel)

  // Goroutines để đọc từ kênh
  go writeToConsole(byteChannel)

  // Ngăn chặn hàm chính thoát
  for {
    time.Sleep(1 * time.Second)
  }
}

Bước 4: Gọi API aws cli

Copy
aws s3 ls

Bước 5: aws-client-monitor sẽ hiển thị các cuộc gọi

aws-cli sẽ như thường lệ liệt kê các bucket nhưng đồng thời nó sẽ thực hiện 2 cuộc gọi qua UDP đến máy chủ của chúng ta.

Đối với mỗi cuộc gọi API AWS, có 2 thực thể ApiCallAttemptApiCall, chúng có cấu trúc sau:

Copy
{
  "Version": 1,
  "ClientId": "my-client-id",
  "Type": "ApiCallAttempt",
  "Service": "S3",
  "Api": "ListBuckets",
  "Timestamp": 1728194484982,
  "AttemptLatency": 266,
  "Fqdn": "s3.eu-west-1.amazonaws.com",
  "UserAgent": "aws-cli/1.27.92 md/Botocore#1.31.2 ua/2.0 os/macos#21.6.0 md/arch#x86_64 lang/python#3.10.14 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.2",
  "AccessKey": "ASIAWFOD4FPxxx",
  "Region": "eu-west-1",
  "SessionToken": "IQoJb3JpZxxx=",
  "HttpStatusCode": 200,
  "XAmzRequestId": "8K3P9AWACxxx",
  "XAmzId2": "vZDGgBpIwz6Jfxxx="
}
Copy
{
  "Version": 1,
  "ClientId": "my-client-id",
  "Type": "ApiCall",
  "Service": "S3",
  "Api": "ListBuckets",
  "Timestamp": 1728194484981,
  "AttemptCount": 1,
  "Region": "eu-west-1",
  "UserAgent": "aws-cli/1.27.92 md/Botocore#1.31.2 ua/2.0 os/macos#21.6.0 md/arch#x86_64 lang/python#3.10.14 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.2",
  "FinalHttpStatusCode": 200,
  "Latency": 267,
  "MaxRetriesExceeded": 0
}

Theo dõi lỗi của AWS API

Chúng ta cũng có thể theo dõi lỗi của AWS API, hãy thử tạo một bucket đã tồn tại:

Copy
aws s3api create-bucket --bucket existing-bucket

Một lỗi đã xảy ra (IllegalLocationConstraintException) khi gọi hoạt động CreateBucket: Ràng buộc vị trí không xác định không tương thích với điểm cuối cụ thể của khu vực mà yêu cầu này đã được gửi đến.

Thông điệp lỗi tương tự cũng xuất hiện trong aws-client-monitor:

Copy
{
  "Version": 1,
  "ClientId": "my-client-id",
  "Type": "ApiCallAttempt",
  "Service": "S3",
  "Api": "CreateBucket",
  "Timestamp": 1728195105316,
  "AttemptLatency": 215,
  "Fqdn": "existing-bucket.s3.eu-west-1.amazonaws.com",
  "UserAgent": "aws-cli/1.27.92 md/Botocore#1.31.2 ua/2.0 os/macos#21.6.0 md/arch#x86_64 lang/python#3.10.14 md/pyimpl#CPython cfg/retry-mode#legacy botocore/1.31.2",
  "AccessKey": "ASIAWFODxxx",
  "Region": "eu-west-1",
  "SessionToken": "IQoJxxx=",
  "HttpStatusCode": 400,
  "XAmzRequestId": "FPWTJWZC7114XQJE",
  "XAmzId2": "+G9yOxxx",
  "AwsException": "IllegalLocationConstraintException",
  "AwsExceptionMessage": "Ràng buộc vị trí không xác định không tương thích với điểm cuối cụ thể của khu vực mà yêu cầu này đã được gửi đến."
}

Trích xuất chỉ số

Các chỉ số sau có thể được trích xuất ở phía máy chủ UDP:

  • Thời gian cuộc gọi API (độ trễ)
  • Lịch sử hoạt động ứng dụng với AWS API (tên dịch vụ: hoạt động)
  • Tỷ lệ thành công và thất bại
  • Thông điệp lỗi
  • Khu vực
  • User-agent
  • IP
  • clientName
  • UserAgent
  • AccessKey
  • Kích thước payload yêu cầu.

Chúng ta có thể sử dụng những thông tin này để tinh chỉnh hiệu suất ứng dụng của mình và phát hiện các nút thắt hoặc lỗi tiềm ẩn.

Kết luận

Giám sát Khách hàng AWS (CSM) là một công cụ quý giá để có được cái nhìn sâu sắc về cách ứng dụng của bạn tương tác với các dịch vụ AWS. Nó giúp bạn theo dõi hiệu suất, xác định lỗi và tối ưu hóa việc sử dụng API. Bằng cách tích hợp CSM với AWS SDK cho Go, các nhà phát triển có thể theo dõi các cuộc gọi API và thu thập các chỉ số theo thời gian thực, từ đó cải thiện hiệu suất và độ tin cậy của ứng dụng.

Nếu bạn đang làm việc trong một môi trường sản xuất nơi việc tối ưu hóa hiệu suất và giải quyết vấn đề là rất quan trọng, CSM là một tính năng đáng để kích hoạt. Chỉ với một vài bước cấu hình, bạn có thể truy cập vào một lượng dữ liệu phong phú giúp bạn tinh chỉnh các ứng dụng dựa trên AWS của mình.

Tài liệu tham khảo:

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào