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