是这样的, 我最近打算给冷笑话网站写一个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比较便宜。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/48724
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.