Cách tìm ra api chạy nhanh nhất
Hi mọi người mình có câu hỏi chưa biết cách giải quyết, có 3 API giống nhau chạy chạy trên 3 servers khác nhau, sử dụng javascript, react. cách để tìm ra api chạy nhanh nhất và lấy response từ api đó. mong các sư phụ giải đáp.
2 ANSWERS
Bạn sử dụng
Promise.race([promise1, promise2, promiseN])
Hàm này sẽ nhận vào danh sách các promise thằng nào resolved nhanh nhất thì sẽ lấy giá trị của thằng đó nhé. Như vậy là bạn có thể call cả 3 API cùng lúc rồi add nó vào 1 array chứa rồi dùng Promise.race. Cách hoạt động giống như đua xe đó. Xem thêm tại https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
thankiusss rất nhiều
@Linhnef no probs
@quangnv1311 nếu dùng race như vậy thì thay vì 1 request đến 1 server thì nó sẽ request tới all server, làm tăng tải cả 3 không cần thiết.
Vấn đề của chủ thớt mình nghĩ nên tìm hiểu thêm về load balancing xem sao (mình chưa thử).
@tonghoangvu Bài toán của author theo mình thấy là khác với LB. LB thì đơn giản hơn. Có thể có 3 resource cung cấp cùng 1 thông tin và có thể thời gian request mất nhiều thời gian, nên muốn agent nào trả ra kết quả nhanh nhất thì lấy thằng đó. Nếu có kinh nghiệm hơn thì dùng Rxjs trong case này sẽ xử lý được cả cancel request đã sent.
hướng giải quyết của mình là sẽ call 3 api đó lần đầu để xác định cái nào nhanh nhất. rồi apply từ lần 2. không biết có lần nào hay hơn không
mình nghĩ không giải quyết đc vấn đề, vì tốc độ chạy của 1 request sẽ phụ thuộc vào nhiều yếu tố như băng thông, cache, ... và không bất biến. Ví dụ server A lấy dữ liệu xong cache lại, lần đầu chậm nhưng các lần sau sẽ nhanh, kiểu vậy
@Hungpv-ashen vâng mình nghĩ các của mình không tối ưu và đang dùng cách của bạn bên trên ạ :
Promise.race([promise1, promise2, promiseN])
3 cái service API kia của bạn là cùng một source code hay là 3 source code khác nhau thế nhỉ?
@huukimit 3API này call trong cùng 1 source nhưng ở khác server thôi á bạn. tức là 3 api này sẽ giống nhau. và tìm cái nhanh nhất để chạy á bạn.