Tại sao trình tải xuống thi thoảng lại bị kẹt ở mức 99%?
Sau một tuần làm việc vất vả, bạn quyết định thưởng cho mình một buổi tối cuối tuần xem phim hành động hai người của Nhật Bản, bộ phim khá hay 9/10, xứng đáng tranh cử Oscar. Bạn quyết định tải bộ phim đó xuống để sau này xem lại, khi tiến trình đạt đến 99%, bạn quyết định đi lấy cốc nước, nhưng khi quay lại nó vẫn dừng ở mức 99%. Bạn thử mở các trang web khác nhưng nó vẫn rất nhanh, còn tiến trình tải xuống vẫn chỉ ở mức 99%. Tại sao chứ??
Đừng tuyệt vọng, bấm vào từng hình để tôi giải thích cho bạn nguyên nhân tại sao nhé.
Thanh tiến trình mà bạn đang thấy thực chất là giả

Ví dụ, có hai chương trình tải xuống, cả hai đều mất 100 giây để hoàn tất. Tiến trình A hiện thị 99% trong 10 giây, với 1% cuối cùng mất 90 giây. Tiến trình B chạy đều đặn với tốc độ không đổi, mỗi giây đều chạy 1%. Bạn nghĩ chương trình nào nhanh hơn? Tất nhiên là A rồi.
Các trang web đã khai thác tâm lý con người, tuy tốc độ thực tế là như nhau, nhưng A lại cho chúng ta cảm giác nhanh hơn, khiến chúng ta có xu hướng nán lại chờ đợi. Bạn có thể tham khảo hai bài viết này, link tôi để cuối bài viết


Mô hình máy khách - máy chủ (Client-Server)

Khi bạn download tài nguyên trên Google drive, Fshare,.. thì bạn đang sử dụng phương thức này.
Hãy tượng tượng bạn (Client) vào một nhà hàng, bạn gọi người phục vụ (Network) đến và bắt đầu gọi món, người phục vụ sẽ đưa yêu cầu của bạn đến nhà bếp (Server), nhà bếp sẽ làm món ăn, sau đó đưa cho người phục vụ và cuối cùng bạn sẽ nhận được món ăn.
Quá trình download diễn ra như thế nào?
Giả sử bạn muốn tải filefile yuamikami.mov từ một trang web nào đó
Bước 1: Client gửi Yêu cầu (Request) Bạn bấm vào nút "Tải về" (Download). Ngay lập tức, trình duyệt của bạn (Client) gửi một thông điệp (gọi là HTTP Request) đến máy chủ (Server) đang lưu trữ file đó. Thông điệp có nội dung đại khái là: "Này Server, tôi muốn lấy file yuamikami.mov."
Bước 2: Server Xử lý và Phản hồi (Response) Server nhận được yêu cầu. Nó sẽ kiểm tra vài thứ:
- File này có tồn tại không? (Có)
- Người này (bạn) có được phép tải không? (Ví dụ: Bạn đã đăng nhập chưa? File này có phải là file riêng tư không?)
- Nếu mọi thứ ổn, Server sẽ phản hồi lại: "OK, tôi sẽ gửi file cho bạn đây."
Bước 3: Truyền dữ liệu (Data Transfer) Đây là phần "download" mà bạn thấy:
- Server "đọc" file
baocao.pdftừ ổ cứng của nó và bắt đầu gửi đi như một luồng dữ liệu (data stream) liên tục, từ đầu file đến cuối file. - Trình duyệt của bạn (Client) nhận luồng dữ liệu này và ghi nó vào ổ cứng của bạn (thường là một file tạm như
.crdownloadhoặc.tmp).
Bước 4: Hoàn tất Khi Server gửi xong 100% dữ liệu, nó sẽ báo: "Hết rồi nhé." Trình duyệt của bạn nhận được tín hiệu này, kiểm tra file (quét virus, xác minh), và đổi tên file tạm thành yuamikami.mov hoàn chỉnh. Quá trình hoàn tất.
Khi bạn sử dụng phương thức này, bạn sẽ được tải file trực tiếp từ nguồn chính gốc, bạn biết chắc chắn 100% file bạn tải về là file gốc, không bị người khác chỉnh sửa.
Nhưng mô hình này cũng có vài điểm yếu:
- Một nguồn duy nhất: Tốc độ tải của bạn sẽ bị giới hạn hoàn tải bởi tốc độ upload của server
- Chia sẻ băng thông: Nếu server có băng thông upload là 1000 Mbps, nhưng có 1000 người cùng tải file, về lý thuyết mỗi người sẽ chỉ được 1 Mbps. Càng đông người tải, bạn tải càng chậm.
Nhưng hiện nay, các công ty lớn đã giải quyết vấn đề tắc nghẽn băng thông bằng cách sử dụng CDN (Content Delivery Network), thay vì 1 server ở Mỹ, họ sẽ đặt hàng trăm bản sao của file đó trên các server khác trên khắp thể giới (Singapore, Nhật Bản, Việt Nam,…). Khi bạn bấm “Download”, hệ thống sẽ tự động điều hướng bạn đến server gần nhất (ví dụ: Singapore). Kết quả bạn sẽ tải nhanh hơn rất nhiều và các server khác cũng không bị quá tải.
Mô hình P2P (Peer-to-Peer)

Bạn có thể tượng tượng bạn đến một bữa tiệc, bạn và những người khác sẽ mang món ăn đến và chia sẻ món ăn với người khác, mọi người đều “ngang hàng” với nhau. Bạn sẽ gặp phương thức này khi tải các file torrent.
Khi bạn tải xuống một tệp tin, bạn sẽ lấy nó từ hàng nghìn người dùng đã tải xuống tệpp đó, đồng thời tải xuống các phần nhỏ khác nhau của tệp. Sau khi tải xuống hoàn tất, các phần nhỏ sẽ được ghép lại để tạo thành tệp hoàn chỉnh.
Quá trình download diễn ra như thế nào?
Trước khi bắt đầu, chúng ta hãy làm quen với các thuật ngữ cơ bản:
- Torrent: Tệp Torrent là một tệp chứa thông tin về tệp mà bạn muốn tải xuống, bao gồm tên tệp, kích thước và các máy chủ tracker. Tệp Torrent thường có đuôi .Torrent và thường có nhiều tệp rất nhỏ.
- Tracker: Tracker là một máy chủ hoặc dịch vụ trung gian giúp theo dõi, quản lý các máy tính tham gia vào việc tải, chia sẻ dữ liệu trong mạng Torrent, ghi nhận hoạt động của bạn và giúp kết nối để trao đổi dữ liệu.
- Seed: Người seed (hoặc seeders) là những người đã tải hoàn toàn một tệp Torrent và vẫn giữ nó để chia sẻ cho người khác. Họ đóng góp vào tốc độ tải xuống của người khác bằng cách đồng ý chia sẻ dữ liệu.
- Swarm: Swarm là tập hợp của tất cả các seeder và leecher đang tham gia vào việc tải, chia sẻ một tệp Torrent cụ thể.
- Client: Client là ứng dụng máy tính hoặc phần mềm mà bạn sử dụng để tải và chia sẻ tệp Torrent, ví dụ: uTorrent, BitTorrent, qBitTorrent,…
Ví dụ bạn sử dụng BitTorrent để tải một file 10GB.
Bước 0: "Tấm bản đồ" (File .torrent) Khi bạn bấm "tải torrent", bạn không tải file 10GB đó ngay. Bạn tải một file rất nhỏ (chỉ vài KB) có đuôi là .torrent. File này giống như một "tấm bản đồ". Nó chứa 2 thông tin:
- Thông tin về file: Tên file, kích thước, và quan trọng nhất là file 10GB này được chia thành 10.000 mảnh nhỏ (gọi là "pieces"), mỗi mảnh 1MB.
- Địa chỉ của "Người điều phối" (Tracker): Đây là một Server đặc biệt.
Bước 1: Liên lạc với Tracker (Người điều phối) Phần mềm của bạn (ví dụ: uTorrent, qBittorrent) đọc file .torrent, và liên lạc với Tracker. Nó nói: "Chào Tracker, tôi muốn tải file 10GB này. Hãy cho tôi danh sách những người khác cũng đang tải hoặc đang có file này."
Lưu ý: Tracker không có file 10GB đó. Nó chỉ như một cuốn sổ điện thoại, biết ai đang ở trong "bữa tiệc" và họ đang có những "món ăn" (mảnh file) nào.
Bước 2: Gia nhập "Bầy đàn" (The Swarm) Tracker trả về cho bạn một danh sách các địa chỉ IP của những người khác (gọi là Peer - những người ngang hàng). Tất cả những người này gộp lại gọi là một Swarm (Bầy đàn).
Bước 3: "Mọi người vì tôi" (Downloading) Phần mềm của bạn bắt đầu kết nối trực tiếp với hàng chục, hàng trăm người trong danh sách đó và "hỏi" (request):
- Hỏi Người A: "Bạn có mảnh số 1 không? Gửi cho tôi."
- Hỏi Người B: "Bạn có mảnh số 2 không? Gửi cho tôi."
- Hỏi Người C: "Bạn có mảnh số 100 không? Gửi cho tôi."
Bạn đang tải về các mảnh file từ rất nhiều người cùng một lúc. Đây là lý do tốc độ tải P2P có thể cực kỳ nhanh, vì bạn đang cộng gộp tốc độ upload của nhiều người khác.
Bước 4: "Tôi vì mọi người" (Uploading) Ngay khi bạn tải xong mảnh số 1 từ Người A, bạn không giữ nó cho riêng mình. Ngay lập tức, bạn "quảng cáo" cho bầy đàn: "Này mọi người, tôi có mảnh số 1 đây!"
Lúc này, Người D (cũng mới tham gia) có thể sẽ kết nối với bạn để tải mảnh số 1. Quan trọng: Bạn bắt đầu upload (chia sẻ) ngay cả khi bạn chưa tải xong 100%. Bạn vừa download mảnh 100, vừa upload mảnh 1.
Quá trình này cứ thế tiếp diễn, các mảnh nhỏ được trao đổi lung tung trong bầy đàn cho đến khi bạn có đủ 10.000 mảnh. Phần mềm sẽ tự động ghép chúng lại thành file 10GB hoàn chỉnh.
Tốc độ tải của P2P so với Client-Server có thể là rất là nhanh, càng nhiều người tải thì thời gian bạn nhận được file càng ngắn. Nhưng cũng có những vấn đề với P2P khi bạn tải các thành phần con từ những người khác, sẽ có trường hợp người dùng đó bị mất kết nối hoặc dữ liệu đã bị mất, lúc này phần mềm sẽ loại bỏ thành phần đó và thử tải xuống lại từ người khác.
P2P cũng có vài điểm yếu như:
- Khi bạn lấy một thành phần từ người dùng có tốc độ upload “rùa bò” thì thời gian bạn lấy được thành phần đó là rất lâu.
- Nếu file có ít người tải thì tốc độ tảu sẽ cực chậm, hoặc không thể tải được.
- Địa chỉ IP của bạn sẽ bị phơi bày với tất cả những người trong mạng, file tải về cũng có thể sẽ bị nhiễm virus.
Lời kết:

Sẽ có nhiều nguyên nhân dẫn đến việc tiến trình tải xuống bị treo ở 99% tùy thuộc vào phương thức mà trang web bạn tải tài nguyên sử dụng. Ví dụ như người nắm giữ những thành phần nhỏ cuối cùng bạn cần lại có tốc độ mạng của những năm 2000, trình duyệt hoặc hệ điều hành đang ghép file hoặc đang quét virus,…
Hãy nhớ thanh tiến trình không phải lúc nào cũng đúng, vì vậy lần sau khi thấy thanh tiến trình 99% thì đừng vội, hãy nghỉ ngơi và đợi quá trình hoàn tất 100% nhé.
Tham khảo:
https://www.newscientist.com/article/dn18754-visual-tricks-can-make-downloads-seem-quicker/