Quản lý lưu lượng Istio với thời gian chờ yêu cầu - ibet1668 game

| May 14, 2025 min read

Ngày 27 tháng 12 năm 2020 - Máy tính

Chúng ta có thể sử dụng Istio để thiết lập thời gian chờ yêu cầu trong các tuyến đường định tuyến. Dưới đây chúng ta sẽ thử nghiệm bằng cách sử dụng ví dụ Bookinfo.

Về việc chuẩn bị môi trường, vui lòng tham khảo tài liệu “Cài đặt và sử dụng Istio”.

Trong bài viết này, chúng ta sẽ sử dụng phiên bản v2 của dịch vụ reviews, sau đó thêm độ trễ phản hồi vào dịch vụ ratings, cuối cùng là sửa đổi thời gian chờ của reviews để quan sát sự thay đổi trên trang productpage.

Trước khi bắt đầu, hãy cấu hình quy tắc đích mặc định trước tiên.

$ cd /usr/local/istio-1.8.1
$ kubectl apply -n istio-demo -f samples/bookinfo/networking/destination-rule-all.yaml

Tiếp theo, chỉ định rằng dịch vụ reviews nên sử dụng phiên bản v2.

$ kubectl apply -n istio-demo -f - <<EOF
heredoc> apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: reviews
spec:
 hosts:
  - reviews
 http:
 - route:
  - destination:
    host: reviews
    subset: v2
heredoc> EOF

Khi mở phần này, bạn sẽ luôn thấy đánh giá năm sao màu đen, điều này cho thấy rằng dịch vụ reviews đã chuyển sang phiên bản v2.

1 Phân tích sơ lược mã nguồn

Chúng ta biết rằng mối quan hệ gọi giữa các dịch vụ productpage, reviews và ratings như sau:

productpage -> reviews -> ratings

Trong bài viết trước “Quản lý lưu lượng Istio với tiêm lỗi”, chúng ta đã xem xét mã nguồn của productpage và reviews. Dịch vụ reviews gọi đến ratings phiên bản v2 với thời gian chờ là 10 giây; trong khi đó, productpage gọi đến reviews với thời gian chờ là 3 giây và sẽ thử lại một lần nếu thất bại.

LibertyRestEndpoint.java#L132

private JsonObject getRatings(String productId, HttpHeaders requestHeaders) { ... Integer timeout = star_color.equals("black") ? 10000 : 2500; ... }

productpage.py#L382

def getProductReviews(product_id, headers):
  # Do not remove. Bug được thêm rõ ràng để minh họa trong tác vụ tiêm lỗi
  for _ in range(2):
    try:
    ...
      res = requests.get(url, headers=headers, timeout=3.0)
    ...
  return status, {'error': 'Xin lỗi, đánh giá sản phẩm hiện đang không khả dụng cho cuốn sách này.'}

nohu52.win 2 Thêm độ trễ phản hồi cho ratings

Dưới đây, chúng ta sẽ thêm độ trễ phản hồi vào dịch vụ ratings, với thời gian độ trễ là 2 giây.

$ kubectl apply -n istio-demo -f - <<EOF
heredoc> apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: ratings
spec:
 hosts:
 - ratings
 http:
 - fault:
   delay:
    percent: 100
    fixedDelay: 2s
  route:
  - destination:
    host: ratings [nohu.com 56](/post/7864/) 
    subset: v1
heredoc> EOF

Khi làm mới trang productpage, bạn sẽ nhận thấy rằng trang trả về sau 2 giây nhưng chức năng vẫn hoạt động bình thường. Điều này xảy ra vì thời gian chờ chưa vượt quá giới hạn đã được cài đặt trong mã (reviews gọi ratings phiên bản v2 với thời gian chờ 10 giây, và productpage gọi reviews với thời gian chờ 3 giây).

Bây giờ, chúng ta sẽ thử sử dụng Istio để thay đổi thời gian chờ khi reviews gọi ratings.

3 Thay đổi thời gian chờ của reviews

Sau đây, chúng ta sẽ sử dụng Istio để thay đổi thời gian chờ của reviews thành 0.5 giây.

$ kubectl edit virtualservice/reviews -n istio-demo
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
 name: reviews
 ...
spec:
 hosts:
 - reviews
 http:
 - route:
  - destination:
    host: reviews
    subset: v2
  timeout: 0.5s # add

Làm mới lại trang productpage, bạn sẽ nhận thấy rằng trang mất khoảng 1 giây để tải và báo lỗi rằng không thể truy cập vào dịch vụ reviews.

Điều này xảy ra vì reviews thực tế cần đến 2 giây để hoàn thành việc gọi đến ratings, nhưng bây giờ nó đã hết thời gian chờ ở mức 0.5 giây. Sau khi nhận được phản hồi hết thời gian chờ, productpage sẽ thử lại một lần nữa, do đó tổng thời gian tải trang productpage là 1 giây.

Cuối cùng, sau khi hoàn thành thử nghiệm, hãy sử dụng lệnh dưới đây để xóa Quy tắc đích và tuyến đường tạm thời.

$ cd /usr/local/istio-1.8.1
$ kubectl delete -n istio-demo -f samples/bookinfo/networking/destination-rule-all.yaml
$ kubectl delete virtualservice/reviews -n istio-demo
$ kubectl delete virtualservice/ratings -n istio-demo

Tóm tắt bài viết, chúng ta đã giới thiệu cách Istio có thể thay đổi thời gian sv388 sv288 com chờ được cài đặt sẵn trong mã nguồn, và sau đó sử dụng ví dụ Bookinfo để kiểm tra đặc tính này.

[1] Thời gian chờ yêu cầu Istio [2] Quản lý lưu lượng Istio ![]( #Mạng dịch vụ #Istio