我前面说了流量的概念,流量是使用网络时经常要考虑的一个因素--如何才能更快的使用流量,如何才能节省流量使用的成本,对于这样的问题,你可能要了解一下什么是cdn,什么是p2p。

(1)cdn是什么

cdn是一个基于已有的internet网络而进行扩展的网络系统,叫作内容分发网络,content delivery network。

搭建cdn网络的思路,是在网络边缘,也就是接入网络的设备(用户)的地方,增加服务结点,再通过各种策略,把用户划分到不同的cdn结点,并让用户能在最短的时间获取到数据。

为什么可以更快拿到数据?我可以更简单地解释:在没有cdn之前,你需要到经过一个很曲折的小路去看电影,而有了cdn后,cdn直接把电影缓存过来了,而且,cdn就在你面前,你直接看电影就好了,这个道理,跟“就近救援”或“就近配送”是一个道理。所以,cdn的根本就是缓存(而它跟源服务间是高速公路,数据很快就传过来),让用户就近取数据,而不是走长长的小路去取数据--极端一点,每个用户都配一台缓存服务器。

cdn的基本意图,是让用户更快更稳地取得数据。cdn最基本的作用是加速,但随着时代的发展,cdn提供的服务已经远不仅加速的功能,还有预缓存、支持https等诸多功能。

为了提升服务体验,以及其它考虑,很多公司都接入了cdn,或自建cdn。

cdn服务商有很少,比如阿里云cdn、百度、腾讯、七牛、网宿等。

这时,不可避免要考虑一个问题,cdn的使用,是占用带宽的(当然,不使用cdn而使用缓存服务器,也一样占用带宽),而这个带宽的使用,相当使用了运营商修建的道路,是要给钱的。一般来说,按带宽的使用来计费(具体可能按月的带宽峰值,也可能按实际使用来分摊到月,等等。),而在某些场景,比如直播、视频播放等,在客户端从cdn或缓存服务器获取数据时,服务器占用了很大的带宽。

加一个题外话,怎么从流量换算出带宽?一般来说,很容易统计到文件下载(或被试听)的次数,根据文件的大小与一天的下载的次数,就可以算出一天产生的流量,比如小程的服务器的一个语音文件是250kB,如果一天有100次播放,那一天的流量就是(250*100)=25000kB。再把流量分摊到每一秒,就是带宽(bps):25000*1024*8/(24*60*60)=204800000/86400=2370bps,也就是一天占用的带宽是2.3k左右。这是一天的带宽,一般来说,一个月内会产生峰值(比如活动日或周末等),这时的带宽可能是正常的几倍,比如3倍,那就是6.9k。然后,根据这个6.9k来计算要给多少钱(先问一下运营商或cdn服务商,1m带宽要多少钱)。

那么,有没有办法,减少服务器带宽的占用,从而节省费用的开销呢?

(2)p2p是什么

p2p,peer to peer,是点到点的数据交换的网络技术。

对比cdn跟p2p的网络结构,很容易看出它们的差别。对于cdn,客户端之间的数据交换,需要经过cdn服务器来转发,因此,服务器带宽成本是一个问题(如上所述)。对于p2p,客户端之间可以直接交换数据而不经cdn服务器,所以理论上可以大幅节省带宽成本。注意,客户端间直接交换数据,会使用用户的流量,但一般是在wifi或带宽网络下才使用流量,而带宽网络一般是以带宽或速度来收费的,也就是这时使用多少流量并不需要用户来买单。

所以,如果为了节省cdn的带宽成本,p2p是一个可以考虑的技术。

一个简单的p2p应用的结构图是这样的:


网络应用(3):CDN与P2P的概念的更多相关文章

  1. CDN(Content Distribution Network)概念

    CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节 ...

  2. P2P金融

    P2P金融又叫P2P信贷,是互联网金融(ITFIN)的一种.意思是:点对点. P2P金融指不同的网络节点之间的小额借贷交易(一般指个人),需要借助电子商务专业网络平台帮助借贷双方确立借贷关系并完成相关 ...

  3. 阿里云有对手了!CDN横评:腾讯云优势明显

    如今,云计算产品越来越多,像国内的BAT三大巨头都提供了云主机(腾讯云CVM.阿里云ECS.百度云BCC),另外还有存储.数据库.安全等相关云服务.在这其中,CDN也是一项重要的云服务,CDN指的是内 ...

  4. python练习七—P2P下载

    最近有些事儿比较忙,python的学习就断断续续,这个练习来得比预期的晚,不过还好,不管做什么,我都希望能认真对待,认真做好每一件事. 引入 这个练习原书中称作“使用XML-RPC进行文件共享”,题目 ...

  5. 大直播时代,P2P才是降低成本的必杀技

    在流媒体传输分发领域,CDN和P2P一直是经常被拿来进行对比和讨论的一大热点,虽然不少大型视频企业目前同时使用着CDN和P2P两套分发机制,但相对于CDN,很多人对于P2P技术知之甚少.整体来说,P2 ...

  6. 《c# 实现p2p文件分享与传输系统》 一、 模型

    c#实现P2P文件分享与传输系统 一.模型 P2P的概念大家都不陌生,也就是所谓的“点对点传输”,即不直接通过服务器,在两台或多台客户端之间传输数据,实现信息交流和资源共享.P2P技术已经发展了很多年 ...

  7. 斗鱼 H5 直播原理解析,它是如何省了 80% 的 CDN 流量?

    斗鱼直播相信大家都听说过,打开斗鱼官网就可以直接在浏览器中观看直播.那么斗鱼是如何实现浏览器视频直播的呢?本篇文章就来解析斗鱼是如何实现直播的,以及它是如何节省 80% 的 CDN 流量,要知道视频直 ...

  8. Web 应用架构基础课(转载)

    Web 应用架构基础课 初级 web 应用开发者必学的基础网络架构概念 web 应用主流架构概览 上图便是我司(Storyblocks)网络架构的很好展现.如果你还没成为经验老道的 web 工程师,可 ...

  9. iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全

    一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...

随机推荐

  1. codevs1199 开车旅行

    [问题描述]小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为H i ,城市 ...

  2. NULL 与空字符串

    空字符串 '' 不占内存空间; NULL占一个字节的空间; 空字符串 的判断用 == <> NULL值用 is null ifnull();

  3. Linux课程---2、Linux下最常用命令(查看帮助命令)

    Linux课程---2.Linux下最常用命令(查看帮助命令) 一.总结 一句话总结: man 1.显示文件? ls:ls带其它参数详情可以man ls man ls:比如 ls -a显示隐藏文件,l ...

  4. 给GridView删除列添加删除提示

         首先设置CommandField,把ShowEditButton.ShowDeleteButton属性都设置为true,也可以只设置ShowDeleteButton属性,那样下面的代码你要修 ...

  5. django admin扩展user表password验证及set_password

    一般如果扩展了django user内置表,在admin后台创建新用户的时候密码将会变成明文,故而导致登录不成功.所以我们在admin.py可以通过form自定义进行对password进行操作,可以双 ...

  6. js修改css时如何考虑兼容性问题es5+es6

    es5的写法 var elementStyle = document.createElement('div').style var vendor = (function(){ let transfor ...

  7. Python中如何开发一个注册接口小实例

    import flask from flask import request #想获取到请求参数的话,就得用这个 server = flask.Flask(__name__) #吧这个python文件 ...

  8. Python基础-list,tuple,dict,set常用方法及区别

    1,列表list 列表定义方式 lis1=[1,2,3,4]#一维数组 lis2=[1,2,3,[4,5,6]]#二维数组 依次多有多维数据,套几层就是几维数组 列表的取值可以通过下标来,下标都是从0 ...

  9. 表达式计算-----------eval()运算符

    1.java的eval()方法(或称之为运算符)可以将字符串解析成可以运行的javaScript代码,例如 eval()只有一个参数.如果传入的参数不是一个字符串,那么它会直接返回这个参数.如果传入的 ...

  10. Qt Quick之TableView的使用

    本博只是简单的展示TableView的基本使用(TableView.style:TableViewStyle.headerDelegate.rowDelegate.itemDelegate.Table ...