探讨一下想使用cdn又不想浪费钱的方案?

2012-09-26 00:54:50 +08:00
 sdjl
是这样的, 我最近打算给冷笑话网站写一个cdn的程序, 冷笑话在推广的时候会在一两个小时内有大量的pv, 然后我们的带宽就不够用了, 所有我们买了upyun的服务。

但是upyun并不是真正的cdn, 他不能根据图片地址自动来我们网站抓取文件, 而必须要我用api去上传到他们的服务器。

然后我们毕竟是有60M的独享带宽的, 如果平时也开启cdn的话那这个带宽费就白交了, 因此我希望能够根据网卡最近5秒的带宽流量来自动开启和关闭cdn, 一来可以保证访问速度, 二来充分利用现有带宽。

我是打算通过修改文件的访问host来开启或关闭使用cdn, 比如 /img/** 是不适用cdn的情况, 而 http:// img.lengxiaohua.com/*** 是使用cdn的情况。

然后问题来了, 起初我是想直接修改nginx配置, 使用跳转到upyun的办法, 那么存在下面三个问题:
1 nginx转发次数太多, 我们高峰时10分钟就有1w多个pv,每个pv又会有几十个文件请求,而我们的服务器仅是42区的一个8G内存的VPS。 因此这种跳转的量应该还是比较大的吧?
2 我不知道怎么在nginx中判断最近5秒钟的网卡流量, 算能够自动开启cdn, 那么还需要做一个缓存的处理。 对nginx编程不熟悉, 所以感觉这个方案比较困难。
3 我之前提到,upyun需要先上传后访问, 而nginx在判断是否开启cdn时并不知道文件是否已经上传到upyun。

因此我觉得只能在python程序中来判断是否开启cdn, 若开启, 就把对应的js css img文件地址改为upyun的host。 然后又有以下一些问题需要解决:
1 需要先判断文件是否已经上传到upyun, 如果成功上传则修改host, 否则先上传文件, 这一步倒是好说。
2 各种文件太多, 有固定存在的js css img, 也有用户上传的img。 有html内嵌的文件, 也有js css中动态调用的文件。 要分别针对不同的文件修改host。(使用正则)
3 cdn开启时, 也要修改api中的文件host,因为api返回的结果不是html的, 可能是json的, 也可能是纯文本的, 工作量增大。
4 为了达到能够让用户快速打开页面, 要针对静态文件(写程序时加到代码库里面的,比如css,logo等)和 动态文件(用户上传的)分别有不同的管理策略, 比如可能需要一直开启静态文件的cdn, 而动态文件根据浏览判断是否使用cdn。


可能是我没有想到更好的办法, 因此在这两种方案中想来想去也不知道怎么做更好, 前者理解起来比较简单, 但是问题2 3不知怎么解决。 后者虽然基本能解决需求, 但是解决方案过于复杂。


然后, 我还在想,upyun这个是不是可以自动调换成免费的新浪图床? 优先使用新浪图床且可以一键切换到upyun?

各位有经验的朋友是怎么解决这类问题的? 请给点思路, 谢了

顺便打个广告,我们是sparker5互联网圈内外包团队, http://lengxiaohua.com 是我们接的一个活, 经过不断的优化得到一个经验,只要有一个42区2G内存的vps, 像冷兔这种网站日100w pv的压力不成问题, 关键是带宽。。。 各位同学买vps还是朝着便宜的考虑吧。。。

附带42区vps广告连接 :)
http://vps.42qu.com/by/10021174


对了, 有想买upyun的朋友注意了, upyun不能自动抓取文件, 必须你自己上传, 因此他不算是cdn吧, 之前买的时候我没考虑到这点, 不过upyun比较便宜。
8733 次点击
所在节点    CDN
35 条回复
lamengao
2012-09-27 20:42:27 +08:00
CDN 可以试试 http://www.webluker.com 按流量收费。
然后配合 dnspod 的 api 使用,这样的搭配方案不用更改文件的url。
huobazi
2012-09-27 23:19:29 +08:00
@mingxing 拭目以待啊
lfeng
2012-09-27 23:34:28 +08:00
又拍云的CDN空间已经在内部测试了,预计国庆后上线
sdjl
2012-09-28 11:31:25 +08:00
@lamengao 这个比upyun贵多了, 我们当时买的是5000元11000G, 这个估计11000G要1w块了

@lfeng
@mingxing 你们早点上线我就不用这么纠结了~~~ 上线之后是不是可以自动抓取我的文件? 不需要我主动上传?
mingxing
2012-09-28 11:35:19 +08:00
@sdjl 哈哈,当时还在开发过程嘛~上线之后,如果选择使用静态CDN功能,会自动抓取你的文件,不需要上传啦~
sdjl
2012-09-28 14:58:40 +08:00
@mingxing 收费是一样的吗?
mingxing
2012-09-28 17:08:38 +08:00
@sdjl 收费模式还是按照实际使用的流量收费的~
fatlei
2012-10-01 05:38:46 +08:00
告诉楼主一个比较蛋疼的办法,自己在电脑旁边看,看流量差不多了,手动切换到又拍云.
bombless
2012-10-01 09:16:37 +08:00
不是有cloudflare么。根据朋友那个5万PV的网站的小站的反响,它的免费服务就已经不错了。
ipconfiger
2012-10-01 11:49:54 +08:00
话说.....找个按流量算的CDN不就ok了。
或者干脆不想花钱的话,可以试试我这个小玩意儿 https://github.com/ipconfiger/pyImageServer
conis
2012-10-01 19:59:26 +08:00
1.先要搞清楚你网站流量是被谁占用了,你的网站大致可以分为三部分,网页/静态文件/UGC。
2.通常来说,80%的流量是被20%的内容耗费的。

我觉得还是重点来处理静态文件吧,因为静态文件一般改动不大,所占流量也比较多,资源类网站除外。
1.将静态文件分发到云上,当然有不花钱的方案是分发到各免费云上,反正不花钱,申请多几个。
2.网页生成静态页面,一般来说,高峰是可以预期的。如果不可以预期,可以用程序检测。当发生高访问量的时候,修改js和css的指向
3.如果访问量比较大,可以根据不同的ip段或者时间分发不同的静态文件,也可以由客户端JS自动选择。例如:你有10个静态服务器,你就把重点网页生成10份html,然后读取到内存,根据不同条件分发不同的html
4.对于UGC,可以把访问量高的也做到静态服务器。

最后,你还也借助DNSPod的API,将不同地区的请求解析到不同的服务器。我的原则,是花最少钱办最多事,不花钱最好,当然,这会麻烦一些。
优点:你可以控制什么时候用静态服务器,当访问量下去后,重新生成静态页。比如说你用到阿里云,按需付费,这样节省成本。如果你不是特别在意速度的话,完全可以用免费云,这样可以节省很多成本。
缺点:技术有一定要求,如果你静态文件特别多的话,重新生成会占一定资源,但我觉得常访问的内容没这么多吧。
conis
2012-10-01 20:05:31 +08:00
唉,看了一下楼主提供的网站,你这个网站优化还真不行啊,先把优化做好,再来说什么CDN吧。提你几个建议:
1.JS和CSS没有去注释和压缩
2.JS太多,完全不合理,至不超过4个,CSS合并到1个
3.图片我没太看,也应该有合并的空间

先把这几个做了,你的带宽占用和速度都会有改善
bigdude
2012-10-18 20:47:10 +08:00
我咋觉着图床带宽的钱可以省出来的,有免费的可外链的超大流量图床的阿
sdjl
2012-10-18 22:18:38 +08:00
@conis 嗯 谢谢, 这几天这在处理, 因为事情太多忙不过来。。。

@bigdude 新浪?
hornet
2012-11-10 00:58:10 +08:00
网站设计的时候定义几个域名变量,比如UGC_M_SERVER, IMG_SERVER, JS_SERVER, CSS_SERVER... 分别对应不同的资源类型
域名设置里面比如S1.abc.com, S2.abc.com S1可能是CDN,S2则是你自己的机器。

可以根据来访IP,来动态映射域名变量到S1或S2

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/48724

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX