Internet Download Manager Use-case
هنتكلم في الورقة دي عن الـ Internet Download Manager وهنشوف ازاي ممكن نبنيه بشكل بسيط وهنشوف ايه الأجزاء الرئيسية اللي ممكن يتكون منها.
المقدمة
هنتكلم في الورقة دي عن الـ Internet Download Manager وهنشوف ازاي ممكن نبنيه بشكل بسيط وهنشوف ايه الأجزاء الرئيسية اللي ممكن يتكون منها.

Message Queues
بيتم استعمال ال Messaging Queues عشان ال Executer services تقدر انها ت submit tasks بعدد محدد مسبقا من ال threads او ال workers اللي حيعملوا processing لل task ديه.
Task Schema (Data Model)
كل تاسك عبارة عن url بنقرأ منه عن طريق protocol مناسب زي ال http والـ ftp وهنا بيجي دور ال factory pattern
فاحنا ممكن نعمل factory ي generate download task حسب كل url مثﻼ واحد للـ httpDownloadTask وواحد للـ ftp.
Separate Tasks
بعد كده كل تاسك بيتم تقسيمها ﻻجزاء متساوية حسب ال task size يعني لو بعتنا initial request ب http ممكن نعرف ال file size وساعتها ممكن نقسمه علي العدد الي احنا عايزينه من ال workers الي بيقوموا بعمل download لكل part.
Example & Code Repository
فبطريقة بسيطة لو عندي two workers وحجم ال file مثلا 100 يبقي الworker اﻻول حيبدأ
انه يعمل download من 0 —> 50 والتاني من 50 —> 100
وال protocols زي الHTTP بتوفر range download يعني احنا ممكن نضيف في الـ headers بتاعة الـ http request الـ range اللي عاوزينه.
فمثلا ممكن للـ worker الاول : 50=range:start=0,end
واخيرًا بنعمل Create للـ File في الـ Path اللي كان في الـ task اللي عملنا منها parts وقسمناها لاجزاء ، وبنكتب الـ byte stream من جزء ال start لحد ال end.


Discussion