1

以图像托管服务为例。为了减少带宽/您提供图像的次数,是否可以让一个刚刚查看图像的客户然后将相同的图像文件(或该文件的片段)提供给希望查看相同页面的另一个客户/图片?是否存在阻止这种情况发生的安全相关问题,或者是我对技术缺乏了解,导致我看不到明显的原因为什么这不起作用..

如果每个客户端提供的数据量相同,则 Web 服务器只需提供一次任何给定文件,其余带宽将由客户端获取。

编辑:我知道 P2P 和 bittorrents。我在问,为什么不把这个概念应用到一般的网上冲浪活动中呢?

4

10 回答 10

5

您描述的模型是 P2P 模型,这正是某些协议(例如BitTorrent的工作方式)的方式。

如果你问为什么这种协议不用于网站或一般用途的实习,可能有两个主要原因:

  1. 从技术上讲,这可能很难做到:您必须能够以一种智能的方式将客户端相互重定向,您必须能够让客户端实际发送文件(这需要访问他们的系统,您通常没有的东西),您可能必须考虑每个客户端的速度(即您不希望有人在旧的、非常慢的连接上提供图像,因为您的网站会看起来很慢)。还有很多原因,这些只是我能想到的最直接的问题,我想不到。
  2. 对人们来说会很糟糕:即使假设你想出办法做到这一点,这种事情也可能不会被你网站的用户很好地接受。用户通常不想“共享”他们的计算机空间/带宽/等。大多数时候,公司将“间谍软件”或其他类似隐藏的东西放在某人的计算机上,他们得到了非常糟糕的宣传。

总而言之,我认为没有人会认真考虑尝试做这样的事情,主要是出于我上面概述的两个原因。

于 2009-09-26T21:35:26.837 回答
3

要“提供”这样的数据,每个客户端都必须在其计算机上安装一个服务器,并且可以让全世界访问(当您在 NAT、代理、企业网络或其他任何东西后面时,这并不总是那么容易)

有一些协议可以做到这一点(例如,许多点对点协议——但我想说,这些协议对大文件比对小图像更有效),但这不是 Web 的工作方式。

此外,数据从哪里来对用户来说并不重要,只要到达即可;这是您的问题,作为网站管理员/管理员。

我应该补充一点,使用像您正在考虑的分布式进程,存在安全风险:如果一个用户决定发送与实际请求不同的东西怎么办?说一些“不好”的图像而不是真实的图像?还是病毒?或者有什么不好的东西吗?

于 2009-09-26T21:34:33.480 回答
2

由于保持给定文件同步的复杂性,点对点网络仅适用于静态内容。

于 2009-09-26T21:36:11.733 回答
2

有几个原因:

  • 客户端往往位于 NAT 之后,它禁止直接向其他客户端提供数据。
  • 客户端的连接性往往比服务器差。
  • 您不能依赖具有合适可用带宽的给定客户端,或者实际提供他们声称的服务。如果您关心您的用户如何体验您的网站,您希望确保快速提供内容,而不是随手抓拍。
  • 您需要一种方法来验证您获取的数据没有被您从中获取数据的客户端(或他们从中获取数据的客户端等等)修改 - 这将需要数字签名,这意味着所有与 SSL 相同的问题和麻烦。
  • 它需要对 HTTP 进行重大改造(如果不是彻底的重新设计)来支持这一点。客户支持充其量是参差不齐的,尤其是客户支持它的动机很少。
于 2009-09-26T23:21:30.860 回答
1

P2P 在其他答案中得到了很好的介绍,但另一个问题是当前的基础设施。对于消费类 Internet 访问(电缆、DSL 等),传出带宽通常只是传入带宽的一小部分。例如,有线下载速度通常为 5-6 Mbps,但上传速度通常在 400K 范围内或更低。

互联网运营商以这种方式设计系统,因为大多数人在浏览器或其他应用程序中下载内容并生成较少量的内容。

于 2009-09-26T21:46:29.477 回答
1

它被称为P2P。最成功的使用是bittorrent。它非常适合大文件(Linux 发行版、开放式办公室等)。对于小文件效率不高。

魔兽世界补丁也由类似的系统提供。

于 2009-09-26T21:31:07.447 回答
1

从用户的角度来看,只要数据快速可预测安全地到达,他们从哪里获取数据是无关紧要的。

P2P 分发模型当然是可行的,但与客户端-服务器相比,P2P 更难满足这三个要求。

于 2009-09-26T21:32:20.440 回答
0

您必须在某人的计算机上在后台运行某些东西才能提供其他人请求的任何内容。当每个客户不得不说“是的,我有那个”或“不,我没有那个”时,您将如何绕过垃圾邮件的可能性,这可能会产生一些流量。

没有提到的另一点是,有些网站不想让他们的图像公开,例如色情网站,所以不是每个人都想要这个。

于 2009-09-26T23:40:13.663 回答
0

借助一点 UDP 魔法,Adobe Flash Player 现在能够与 ad hoc P2P 网络中的其他客户端捆绑在一起。它使用一些相当有趣的网络聊天来通过 NAT 设置打孔。

http://labs.adobe.com/wiki/index.php/Stratus:FAQ

http://en.wikipedia.org/wiki/Real_Time_Media_Flow_Protocol

http://www.adobe.com/devnet/flashplayer/articles/rtmfp_stratus_app.html

http://www.flashrealtime.com/tuts/p2p-in-flash.html

于 2009-09-26T23:41:49.570 回答
0

对于大多数 Internet 应用程序,网络中最慢的部分是到用户机器的最终链接。所以客户端 P2P 有一些用途——那些服务器带宽/用户数量比最后一英里带宽差的情况——但不一定适用于其他情况。

Van Jacobson有一个关于避免在路由器中重复信息的技术的有趣讲座,它使用 TCP/IP 中的另一个级别的参考。

于 2009-09-27T17:23:15.703 回答