ducgiang99
Junior Member
Em chào mọi người ạ, em có một thắc mắc về xử lý async như sau ạ:
Em có đang làm một cái API để cung cấp service cho enduser. Khi user call cái api đấy thì sẽ có một chương trình, chương trình sẽ execute một tiến trình (job) dưới backend và job này có thể thực hiện mất từ 10' đến vài giờ tùy vào request body của user. Trong quá trình thực thi job đó thì chương trình sẽ tracking liên tục trạng thái của job để update trạng thái của job vào database ( để cung cấp thêm một API nữa cho enduser có thể theo dõi trạng thái job của họ dựa trên việc query vào database).
Mọi người cho e hỏi giả sử ở thời điểm tải cao ( có thể tầm 200-300 request trong một thời điểm, 1000 request trong một giờ ) thì chương trình có thể thực hiện async đc ko ạ (nghĩa là chương trình có thể theo dõi được trạng thái của nhiều job cùng một lúc). Em có tìm hiểu thì thấy @Async với @EvenListenner trong Spring boot có hỗ trợ việc async, nhưng chưa rõ với tải cao như thế có việc handle tracking có vấn đề gì không. Còn Kafka thì có vẻ hỗ trợ xử lý song song, nhưng mỗi request của user thì sẽ public một ID cho consumer, tuy nhiên khi nhiều request thì sẽ sinh ra quá nhiều partition (do mỗi request sẽ sinh ra một ID để dựa vào id đấy track state).
Vậy mình có thể tối ưu trường hợp này ko ạ , mong được anh chị giải đáp ạ. Em cảm ơn mn.
Em có đang làm một cái API để cung cấp service cho enduser. Khi user call cái api đấy thì sẽ có một chương trình, chương trình sẽ execute một tiến trình (job) dưới backend và job này có thể thực hiện mất từ 10' đến vài giờ tùy vào request body của user. Trong quá trình thực thi job đó thì chương trình sẽ tracking liên tục trạng thái của job để update trạng thái của job vào database ( để cung cấp thêm một API nữa cho enduser có thể theo dõi trạng thái job của họ dựa trên việc query vào database).
Mọi người cho e hỏi giả sử ở thời điểm tải cao ( có thể tầm 200-300 request trong một thời điểm, 1000 request trong một giờ ) thì chương trình có thể thực hiện async đc ko ạ (nghĩa là chương trình có thể theo dõi được trạng thái của nhiều job cùng một lúc). Em có tìm hiểu thì thấy @Async với @EvenListenner trong Spring boot có hỗ trợ việc async, nhưng chưa rõ với tải cao như thế có việc handle tracking có vấn đề gì không. Còn Kafka thì có vẻ hỗ trợ xử lý song song, nhưng mỗi request của user thì sẽ public một ID cho consumer, tuy nhiên khi nhiều request thì sẽ sinh ra quá nhiều partition (do mỗi request sẽ sinh ra một ID để dựa vào id đấy track state).
Vậy mình có thể tối ưu trường hợp này ko ạ , mong được anh chị giải đáp ạ. Em cảm ơn mn.