项目理念 |分布式下载系统
项目名称:分布式下载系统
简介:在一个下载数据限制在几百 Mb 或几 Gbs 的组织中工作?猜猜你需要什么来下载一个软件,它的大小是一天数据限制的两倍、三倍或四倍。您认为您可以等待 2、3 或 4 天来下载软件吗?哈哈。
想要通过更快的速度下载文件来欺骗您的组织,其中速度是恒定的(比如 FUP 速度 -> 2mbps )给所有用户?是的!你没听错。结交 2 个朋友,以 2 倍的速度完成工作。找n个朋友一起做n次
概念框架
上面提到的是我们项目的几个基本用例。现在让我们谈谈我们的项目。
我们项目的想法是为用户提供一个平台,可以在更短的时间内下载大文件。这是通过以特定数量的分区的形式促进文件下载来完成的。下载完所有分区后,可以使用应用程序合并它们以获得原始文件。该项目包括两部分:
1. 服务器:在 Node 上实现的服务器,从客户端接收请求。此请求包括用户必须下载的文件的 URL 以及必须下载文件的分区数(假设分区数为 n)。服务器作为响应发送 n 个唯一密钥。现在文件被下载到服务器并分成 n 部分(每个块的大小 = OrignalFileSize/n)。一旦文件被分割,每个数据块都会用一个唯一的键进行散列。 {这个key是将下载的u_id加上chunk的序号生成的}。现在当服务器收到一个块的下载请求时。服务器发送原始数据块。
需要发送到服务器的 JSON 对象必须如下所示:
{
url : 'http://something.com/somename.ext',
parts : '20'
}
If no error in url link or no internal error then a response as such is sent back
{
"__v": 0,
"name": "somename",
"ext" : ".ext"
"partCount": 3,
"_id": "58c522831a3a1919a103c863",
"reason": "none",
"parts": [],
"createdOn": "2017-03-12T10:27:15.827Z",
"status": "downloading"
}
If some error is occurred then err is return with a status code of 500.
To initiate downloading parts send a POST request to localhost:3000/retrieve/status.
The response looks like this.
{
"_id": "58c52387f4e3e81a0ccaa1cd",
"name": "somename",
"ext": ".ext",
"partCount": 3,
"__v": 1,
"reason": "none",
"createdOn": "2017-03-12T10:31:35.037Z",
"status": "done"
}
2. Android 客户端:一个 android 应用程序,它允许用户发出初始下载请求{发出此请求的用户将被标记为此特定文件的管理员}。如前所述,此请求具有 URL 和将下载文件的编号。客户端收到 n 个服务密钥。每个密钥都将与管理员一起存储。现在管理员将这 n 个密钥发送给她的 n 个朋友。他们每个人都下载文件并将其发送回管理员。
使用的工具:首先,服务器是基于节点的。该应用程序是使用 Android Studio 创建的。编码是使用Java完成的,而 UI 是使用 XML 设计的。应用程序的本地数据库(用于管理下载)已使用 SQLite 创建。与 API 的交互是使用 Android 的 Volley 库完成的,该库支持应用程序的快速联网,并且以 JSON 对象的形式向服务器发出请求。
应用:该项目有很多现实生活中的应用。其中两个证明其实用性的是:
- 更快的下载:这可以通过将文件的分区并行下载到不同的设备然后合并它们来实现。例如,如果要下载 5 GB 大小的文件,则可以由五个不同的人在他们的设备上下载,然后将他们的部分发送到一台设备并合并它们。这将下载时间减少到下载整个文件所需时间的 1/5 左右。
- 批量下载:如果一个人每天从他的 ISP 获得固定数量的数据,他可以每天下载文件的不同部分,直到他拥有所有部分。例如,在我们的旅馆中,我们每天获得 1GB 的数据,这些数据会在午夜更新。如果不需要非常紧急的文件,学生可以等待至少 5 天,每天下载一个 1 GB 的分区并最终合并它们。
地位:
该项目正在开发中。下面给出了到服务器存储库和 android 客户端存储库的 GitHub 链接。项目目前的状态是服务端拿到请求,下载文件,分成n个部分(用户发送){这个请求显然是从android客户端发送的}。 android 客户端还不能在收到所有文件后进行合并。此外,当前的用户体验有点滞后。但是,开发人员正在寻找方法来完成该项目并将其作为合适的产品投放市场。
应用程序:https://github.com/DravitLochan/DistributedDownloading-android
服务器:https://github.com/priyansh1161/distributed-downloading
未来的计划:
1. 为 iOS 客户端获取 iOS 开发人员。
2. 开发桌面客户端,去除空间依赖。 {手机比PC/笔记本电脑空间小}
3. 为喜欢发号施令的人开发一个基于终端的系统。
团队成员:
1. 阿维纳什·夏尔马
2. Dravit Lochan Gupta
3. 普里扬什·古普塔
4. Prabhat Shukla