Avatar
1
Shi Shi Beginner
Shi Shi Beginner
giải quyết bài toán file lớn
xin chào mọi người,
  1. em muốn hỏi là thường các big tech khi có bài toán download file dung lượng lớn bị timeout họ sẽ giải quyết theo kiểu nào ạ.
  2. một câu hỏi nữa em muốn hỏi là khi lượng request nhiều cùng call vào api xuất file lớn đó thì giải pháp thường dùng nhất của họ tránh chết hệ thống là gì, mọi người có thể giải thích chi tiết một chút giúp em được không ạ, em cảm ơn.
  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
The Best Answer
1. Sẽ có 2 cách tiếp cận em ạ:

a. Không cho tiếp tục download, cái này người dùng phải tải từ đầu.

b. Cho phép người dùng tiếp tục tải, thì đầu client sẽ phải lưu lại số bytes mà mình đã nhận được và sau đó gửi lại request đến server với header byte range, em có thể tham khảo tại đây: https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests

2. Em tham khảo phương pháp này nhé: https://youngmonkeys.org/ezyhttp/guides/ezyhttp-download-file

  • 0
  • Reply
em cảm ơn ạ, anh cho e hỏi thêm ở câu hỏi một em có tham khảo được 1 cách là để tránh timeout không hoàn thành tải xong file thì có một hướng là tạo 1 thread ngay khi api export đó được call, nghĩa là request ở api đó sẽ hết còn cái thread đó vẫn chạy ngầm bên dưới đảm bảo xuất file thành công, sau khi xuất thành công file đó sẽ được save ở một folder và sẽ thông báo lại với người dùng file đã sẵn sàng được tải thì hướng đó có phải là một giải pháp ổn hay không và nếu ổn thì đó có phải là một hướng mà a liệt kê còn thiếu không ạ, em cảm ơn.  –  Shi Shi 1712588223000
em cảm ơn ạ,

anh cho e hỏi thêm ở câu hỏi một em có tham khảo được 1 cách là để tránh timeout không hoàn thành tải xong file thì có một hướng là tạo 1 thread ngay khi api export đó được call, nghĩa là request ở api đó sẽ hết còn cái thread đó vẫn chạy ngầm bên dưới đảm bảo xuất file thành công, sau khi xuất thành công file đó sẽ được save ở một folder và sẽ thông báo lại với người dùng file đã sẵn sàng được tải thì hướng đó có phải là một giải pháp ổn hay không và nếu ổn thì đó có phải là một hướng mà a liệt kê còn thiếu không ạ, em cảm ơn.

 –  Shi Shi 1712588279000
Không thể làm thế được em ạ, số thread là hữu hạn, cùng lắm đến 1000 thread là cùng, vậy nếu theo cách này thì server chỉ đáp ứng được 1000 người thôi. Mà file đã có sẵn thì tại sao tạo ra 1 thread để lưu file vào chỗ nào đó nữa là sao em nhỉ?  –  tvd12 1712588898000
à không phải file có sẵn mà ý e là call api để api đó export data thành file , rồi file đó sẽ được lưu vào 1 folder để những lần sau cứ vậy vào folder đó dow file đã có về chứ không cần phải thực thi lại quá trình export nữa ạ, với số lượng thread giới hạn 1000 cái này e có thể đọc được ở nguồn nào để hiểu sâu hơn ạ, em cảm ơn.  –  Shi Shi 1712590008000
mục đích e dùng thread để nó pass cái timeout của request ạ tức là file vẫn cứ được download khi api đó đã ngắt do timeout rồi ạ, còn thread đó chạy ngầm bên dưới khi nào export xong thành file thì sẽ lưu file vào folder và sẽ thông báo tới người dùng.  –  Shi Shi 1712590165000
Có vẻ em đang nói đến giải pháp ở phía client em nhỉ? Vậy em có thể tạo 1 thread chạy ngầm để liên tục gọi lên server để tạo lại client và đến khi nào nhận đủ file rồi cũng ok em ạ.  –  tvd12 1712590575000
dạ vâng anh, em còn một thắc mắc nếu em làm như thế như anh nói thì chỉ phục vụ được 1000 user nếu lượng thread hữu hạn là 1000 nhưng đó là trong cùng 1 thời điểm đúng không anh, còn sau khi thread e dùng xong e sẽ giải phóng tài nguyên, vậy thì nếu yêu cầu bài toán chỉ cần trong cùng một thời điểm dùng đến 1000 request là chấp nhận được thì cách đó vẫn ổn chứ ạ, liệu nó còn có nhược điểm gì không ạ, em cảm ơn a.  –  Shi Shi 1712591163000
Nếu giải pháp em vừa nói là dùng cho client thì server không cần sinh thread mới thì ok em ạ. Trên server nó dùng cách như anh đã đề cập trong bài viết này: https://youngmonkeys.org/ezyhttp/guides/ezyhttp-download-file nó sẽ chỉ tạo ra một lượng hữu hạn các thread thôi nên không vấn đề gì em ạ  –  tvd12 1712591699000
Cách anh đề cập (https://youngmonkeys.org/ezyhttp/guides/ezyhttp-download-file)

có giống với việc ở server mình set up 1 task queue để thực thi long-running tasks ko anh ?

 –  Quốc Hưng Hoàng 1713340655000
Đúng rồi em ạ  –  tvd12 1713341071000