以图像托管服务为例。为了减少带宽/您提供图像的次数,是否可以让一个刚刚查看图像的客户然后将相同的图像文件(或该文件的片段)提供给希望查看相同页面的另一个客户/图片?是否存在阻止这种情况发生的安全相关问题,或者是我对技术缺乏了解,导致我看不到明显的原因为什么这不起作用..
如果每个客户端提供的数据量相同,则 Web 服务器只需提供一次任何给定文件,其余带宽将由客户端获取。
编辑:我知道 P2P 和 bittorrents。我在问,为什么不把这个概念应用到一般的网上冲浪活动中呢?
您描述的模型是 P2P 模型,这正是某些协议(例如BitTorrent的工作方式)的方式。
如果你问为什么这种协议不用于网站或一般用途的实习,可能有两个主要原因:
总而言之,我认为没有人会认真考虑尝试做这样的事情,主要是出于我上面概述的两个原因。
要“提供”这样的数据,每个客户端都必须在其计算机上安装一个服务器,并且可以让全世界访问(当您在 NAT、代理、企业网络或其他任何东西后面时,这并不总是那么容易)。
有一些协议可以做到这一点(例如,许多点对点协议——但我想说,这些协议对大文件比对小图像更有效),但这不是 Web 的工作方式。
此外,数据从哪里来对用户来说并不重要,只要到达即可;这是您的问题,作为网站管理员/管理员。
我应该补充一点,使用像您正在考虑的分布式进程,存在安全风险:如果一个用户决定发送与实际请求不同的东西怎么办?说一些“不好”的图像而不是真实的图像?还是病毒?或者有什么不好的东西吗?
由于保持给定文件同步的复杂性,点对点网络仅适用于静态内容。
有几个原因:
P2P 在其他答案中得到了很好的介绍,但另一个问题是当前的基础设施。对于消费类 Internet 访问(电缆、DSL 等),传出带宽通常只是传入带宽的一小部分。例如,有线下载速度通常为 5-6 Mbps,但上传速度通常在 400K 范围内或更低。
互联网运营商以这种方式设计系统,因为大多数人在浏览器或其他应用程序中下载内容并生成较少量的内容。
它被称为P2P。最成功的使用是bittorrent。它非常适合大文件(Linux 发行版、开放式办公室等)。对于小文件效率不高。
魔兽世界补丁也由类似的系统提供。
从用户的角度来看,只要数据快速、可预测且安全地到达,他们从哪里获取数据是无关紧要的。
P2P 分发模型当然是可行的,但与客户端-服务器相比,P2P 更难满足这三个要求。
您必须在某人的计算机上在后台运行某些东西才能提供其他人请求的任何内容。当每个客户不得不说“是的,我有那个”或“不,我没有那个”时,您将如何绕过垃圾邮件的可能性,这可能会产生一些流量。
没有提到的另一点是,有些网站不想让他们的图像公开,例如色情网站,所以不是每个人都想要这个。
借助一点 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
对于大多数 Internet 应用程序,网络中最慢的部分是到用户机器的最终链接。所以客户端 P2P 有一些用途——那些服务器带宽/用户数量比最后一英里带宽差的情况——但不一定适用于其他情况。
Van Jacobson有一个关于避免在路由器中重复信息的技术的有趣讲座,它使用 TCP/IP 中的另一个级别的参考。