Yêu cầu thg 2 9, 2023 1:20 SA 396 0 2
  • 396 0 2
+2

Cách tìm ra api chạy nhanh nhất

Chia sẻ
  • 396 0 2

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.

thg 2 9, 2023 1:44 SA

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ỉ?

thg 2 9, 2023 2:09 SA

@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.

2 CÂU TRẢ LỜI


Đã trả lời thg 2 9, 2023 4:01 SA
Đã được chấp nhận
+8

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

Chia sẻ
thg 2 9, 2023 4:15 SA

thankiusss rất nhiều

Avatar Quang Nguyễn @quangnv1311
thg 2 9, 2023 4:43 SA

@Linhnef no probs

Avatar Vu Tong @tonghoangvu
thg 2 12, 2023 3:07 SA

@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ử).

Avatar Quang Nguyễn @quangnv1311
thg 2 12, 2023 5:29 SA

@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.

Đã trả lời thg 2 9, 2023 1:32 SA
+2

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

Chia sẻ
Avatar Ashen @Hungpv-ashen
thg 2 9, 2023 9:42 SA

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

thg 2 10, 2023 2:20 SA

@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])

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí