问题描述
其实我以前也混了很长的CSDNASP.NET版,当时MVP项目还没启动呢.但是各个大牛(思归,孟子,数不尽)对我的帮助真的很大.后来因工作保密的原因,也很少来混CSDN了,逐渐连老账号都忘记了.一转眼,10年就过了.但CSDN仍然是中国第一程序员社区.牛!CSDN占据楼主在技术社区生涯的90%的时间!所以在这里首发一个开源项目,希望大家海涵.aspnetcdn,顾名思义,就是用Asp.Net来做CDN服务器.因为这算是一个教学项目,无论大家对CDN关心不关心,也建议大家去了解一下.虽然v0.1版只有800行代码(其中真正需阅读的不到400行),却包含了一些思想:1-如何基于OOP的override的方式去实现扩展.2-如何拦截ASP.NET的请求和对浏览器做出回应.3-如何用纯Socket去连接http服务器,发送请求和分析请求,处理chunked数据4-理解为什么DNS允许一个域名有多个IP和如何处理多个IP5-理解为什么需要X-Forwarded-For来转告IP地址.细节:为什么我不用HttpWebRequest来访问目标服务器?因为HttpWebRequest无法同时制定IP和HOST头.以下为我博客写的内容,但CSDN审核要延迟,我就先发出来,让大家看看.--------------------------------开源项目aspnetcdn在2014年11月启动.今天完成了最基础的版本v0.1关于CDN是什么,可以看百科http://baike.so.com/doc/5369544.html为什么要做aspnetcdn?为教学而生目前世界上最流行的CDN软件是大名鼎鼎的nginx它几乎集一切强大的优点于一身.那为什么还要做一个aspnetcdn?因为虽然很多cdn软件很强大.但是代码也相对复杂.aspnetcdn的目标并不是要实现强大的cdn软件,而仅仅是出于教学的目的.aspnetcdn到底有多简单?它直接搭建在Asp.Net上,已经免去了很多重复的工作,最初的版本v0.1,仅仅只有5个cs文件,共800行不到的代码.执行的顺序非常简单直接.是新手学习的最佳材料.如何下载和测试aspnetcdn?这是一个基于ApacheLicense,Version2.0授权的项目.最新下载地址:http://homehttp.com/downloads/redirect.aspx?type=aspnetcdn需要ASP.NET2.0或以上的版本,不支持IIS的Classic经典模式.(请设置成集成管道模式)这是一个VS2012的项目.如果你没有VS2012,没关系,把'aspnetcdn-web'的内容部署到IIS上也可以运行.手动把代码提取出来然后重新整理项目和编译很容易.aspnetcdn是如何实现逻辑上的扩展的?可以说,aspnetcdn是一个远程的URLREWRITER开发人员,根据当前请求的Request.Url,QueryString,Cookies,ServerVeriables等属性的判断,然后允许指定目标服务器,修改URL,修改HOST名字,最终实现让aspnetcdn当前所部署的网站,分别从任意个服务器外去获取内容.是否有典型的业务模型?模型1:一个网站'/'下有一个子程序'/console/',但子程序收到网站根目录下/web.config的影响而无法部署.这个时候可以把/console/部署为http://127.0.0.2/console/,在网站'/'上安装aspnetcdn,检测如果请求路径包含/console/的话,就重定向到http://127.0.0.2/console/上去模型2:一个云OA服务,有很多台WEB服务器.但是服务器的缓存非常占空间而且低效.原因是客户A的多个用户访问服务的时候,经常被负载平衡分配到不同的服务器上去.导致几乎所有服务器,都包含了客户A的缓存数据.解决办法:通过用aspnetcdn做转发,探测COOKIE,如果CustID=A,那么就固定转向到服务器1上.其他客户如此类推.这样每个服务器都会运行特定的客户群,互不干扰.性能得到大大地提升.aspnetcdn是否可以拿来真用?完全没问题的.但是要注意前期版本功能少,兼容性差.即使做到后期,由于基于Asp.Net的模型,性能也不会好到哪里去.但它的扩展方案的确是很容易学习和编程.所以如果你重视的是业务模型,而不是只考虑用最省的方法去搭建CDN,那么aspnetcdn是合用的
解决方案
本帖最后由 homehttp 于 2014-11-16 14:27:29 编辑
解决方案二:
关注下,感谢分享
解决方案三:
这基本上是拿出一点“http反向代理”程序来说的,扣了一个“cdn”的帽子而已。我们一般人能够看到的cdn,是另外的情形,而跟反向代理其实关系不大。例如1.如果在不同省份去ping那些大网站,你会看到不同的ip地址。而从同一个地方访问这些ip地址,你都能访问到这个大网站的网页。只不过响应速度不同。2.很明显,大网站可以自动化地把网站应用程序和数据,在许多许多服务器之间进行大规模自动分发。
解决方案四:
进行大规模自动分发-->进行大规模自动分发和复制
解决方案五:
学习了,感谢分享!
解决方案六:
@wyumening@myceolzy谢谢关注@sp1234这玩意用来搭建CDN一点问题都没.找不到比aspnetcdn更好的项目名称了.博客地址http://blog.csdn.net/homehttp/article/details/41172173下一个版本先把文件缓存加上.
解决方案七:
为什么要搭在asp.net上?这本身就把简单的事情搞复杂了。anyway,感谢分享。
解决方案八:
anyway,感谢分享。
解决方案九:
开发一年的飘过,看不是这么懂
解决方案十:
该回复于2014-12-19 23:29:57被版主删除
解决方案十一:
windows+nginx+asp.net???????
解决方案十二:
引用6楼caozhy的回复:
为什么要搭在asp.net上?这本身就把简单的事情搞复杂了。anyway,感谢分享。
写socket监听的话代码更难读.而且不利于一台电脑上同时部署IIS.这个方案的侧重点是业务上的可扩展编程.引用10楼diaodiaop的回复:
windows+nginx+asp.net???????
没有用nginx呀.可用在IIS,IISExpress,或其他类型的ASP.NET的宿主程序上.
解决方案十三:
分享类文章先顶后看
解决方案十四:
兄弟,你保密工作干多了吧?世界已经不一样啦,醒醒吧!在http这个级别上,用个handler拦截一下请求,改个头,转个发,这也只能叫为教学了本来是webserver该干的事,你叫httpd,nginx,iis情何以堪!你赶脚你的代码不复杂,那是因为你站在asp.net这个巨人的肩膀上!nginx的代码其实真的不复杂...
解决方案十五:
引用13楼micropentium6的回复:
兄弟,你保密工作干多了吧?世界已经不一样啦,醒醒吧!在http这个级别上,用个handler拦截一下请求,改个头,转个发,这也只能叫为教学了本来是webserver该干的事,你叫httpd,nginx,iis情何以堪!你赶脚你的代码不复杂,那是因为你站在asp.net这个巨人的肩膀上!nginx的代码其实真的不复杂...
你这种说法太罔顾现状了.就如说小学不用办的一样.是否用ASP.NET是基于某种角度上的考虑.虽然我这个项目刚起步,但我会在CSDN博客里一点一滴地记录下来,以用于以后翻查.事实上用SOCKET直接监听80端口的版本我也有.只不过我不会对这部分开源而已.用IIS承载的也不是一无是处.因为我已经完成了一个商用的版本.
其他方案:
引用14楼homehttp的回复:
Quote: 引用13楼micropentium6的回复:
兄弟,你保密工作干多了吧?世界已经不一样啦,醒醒吧!在http这个级别上,用个handler拦截一下请求,改个头,转个发,这也只能叫为教学了本来是webserver该干的事,你叫httpd,nginx,iis情何以堪!你赶脚你的代码不复杂,那是因为你站在asp.net这个巨人的肩膀上!nginx的代码其实真的不复杂...你这种说法太罔顾现状了.就如说小学不用办的一样.是否用ASP.NET是基于某种角度上的考虑.虽然我这个项目刚起步,但我会在CSDN博客里一点一滴地记录下来,以用于以后翻查.事实上用SOCKET直接监听80端口的版本我也有.只不过我不会对这部分开源而已.用IIS承载的也不是一无是处.因为我已经完成了一个商用的版本.
罔顾现状的是你!现在asp.net的“小学”教程有的是!既然是“小学”教程就要通俗易懂。你这个就像是用粒子加速器给小学生讲原子结构一样。有这个必要吗?你干脆用asp.net写一个编译器吧,然后用它做你的小学教材?tcp/socket的你就孤芳自赏的自己玩儿吧!tcptunnel,portforwarding现在也算不上什么新技术了...这些跟asp.net真的没啥关系啊!
其他方案:
引用15楼micropentium6的回复:
Quote: 引用14楼homehttp的回复:
Quote: 引用13楼micropentium6的回复:
兄弟,你保密工作干多了吧?世界已经不一样啦,醒醒吧!在http这个级别上,用个handler拦截一下请求,改个头,转个发,这也只能叫为教学了本来是webserver该干的事,你叫httpd,nginx,iis情何以堪!你赶脚你的代码不复杂,那是因为你站在asp.net这个巨人的肩膀上!nginx的代码其实真的不复杂...你这种说法太罔顾现状了.就如说小学不用办的一样.是否用ASP.NET是基于某种角度上的考虑.虽然我这个项目刚起步,但我会在CSDN博客里一点一滴地记录下来,以用于以后翻查.事实上用SOCKET直接监听80端口的版本我也有.只不过我不会对这部分开源而已.用IIS承载的也不是一无是处.因为我已经完成了一个商用的版本.
罔顾现状的是你!现在asp.net的“小学”教程有的是!既然是“小学”教程就要通俗易懂。你这个就像是用粒子加速器给小学生讲原子结构一样。有这个必要吗?你干脆用asp.net写一个编译器吧,然后用它做你的小学教材?tcp/socket的你就孤芳自赏的自己玩儿吧!tcptunnel,portforwarding现在也算不上什么新技术了...这些跟asp.net真的没啥关系啊!
你已经被别的产品固化了你的思维了,以至于你只能以山寨的角度去思考问题.所举的比喻也是胡扯一通,所以我也不和你说啥了.
其他方案:
引用16楼homehttp的回复:
Quote: 引用15楼micropentium6的回复:
Quote: 引用14楼homehttp的回复:
Quote: 引用13楼micropentium6的回复:
兄弟,你保密工作干多了吧?世界已经不一样啦,醒醒吧!在http这个级别上,用个handler拦截一下请求,改个头,转个发,这也只能叫为教学了本来是webserver该干的事,你叫httpd,nginx,iis情何以堪!你赶脚你的代码不复杂,那是因为你站在asp.net这个巨人的肩膀上!nginx的代码其实真的不复杂...你这种说法太罔顾现状了.就如说小学不用办的一样.是否用ASP.NET是基于某种角度上的考虑.虽然我这个项目刚起步,但我会在CSDN博客里一点一滴地记录下来,以用于以后翻查.事实上用SOCKET直接监听80端口的版本我也有.只不过我不会对这部分开源而已.用IIS承载的也不是一无是处.因为我已经完成了一个商用的版本.
罔顾现状的是你!现在asp.net的“小学”教程有的是!既然是“小学”教程就要通俗易懂。你这个就像是用粒子加速器给小学生讲原子结构一样。有这个必要吗?你干脆用asp.net写一个编译器吧,然后用它做你的小学教材?tcp/socket的你就孤芳自赏的自己玩儿吧!tcptunnel,portforwarding现在也算不上什么新技术了...这些跟asp.net真的没啥关系啊!
你已经被别的产品固化了你的思维了,以至于你只能以山寨的角度去思考问题.所举的比喻也是胡扯一通,所以我也不和你说啥了.
想在这个论坛吹嘘,先把你的级别混够了再说!你就算是神州计划的程序员我也不吊你啊山寨?你做的这个四不像才叫山寨呢!
其他方案:
历史实践反复证明:朋友比领导重要,健康比业绩重要,情商比智商重要,节日比平时重要,问候比送礼重要。往来一点就到,看望朋友无须机票
其他方案:
其他方案:
感觉显摆的成分大过教学。不过有人愿意学,了解下CDN原理,还是一些现实意义的。
其他方案:
个人理解CDN重点在于内容的分发和复制。