[CSDN首发]CSDN人回馈CSDN社区. 发布开源项目 aspnetcdn 第一个版本源代码. (ASP.NET做的CDN,为教学而生)

问题描述

其实我以前也混了很长的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重点在于内容的分发和复制。

时间: 2024-11-03 13:53:16

[CSDN首发]CSDN人回馈CSDN社区. 发布开源项目 aspnetcdn 第一个版本源代码. (ASP.NET做的CDN,为教学而生)的相关文章

Facebook 尝试新的方法来发布开源项目

上周,Facebook发布了Create React App,这个新项目旨在帮助React开发者快速上手其新项目.Create React App这个新项目只是一个开始,它也成为了Facebook在GitHub上的孵化器的首个项目. Facebook孵化器是Facebook用于发布开源项目的新流程,用于确保这些开源项目能够长久平稳地运行.我们可以将其看作是Facebook新的开源项目的Beta阶段或是试验场. Facebook开源负责人James Pearce说,Facebook孵化器的想法在于

Facebook尝试新的方法来发布开源项目

上周,Facebook发布了Create React App,这个新项目旨在帮助React开发者快速上手其新项目.Create React App这个新项目只是一个开始,它也成为了Facebook在GitHub上的孵化器的首个项目. Facebook孵化器是Facebook用于发布开源项目的新流程,用于确保这些开源项目能够长久平稳地运行.我们可以将其看作是Facebook新的开源项目的Beta阶段或是试验场. Facebook开源负责人James Pearce说,Facebook孵化器的想法在于

VMware顺容器之势而为,发布开源项目Lightwave和Photon

本文讲的是VMware顺容器之势而为,发布开源项目Lightwave和Photon,[编者的话]VMware是老牌的虚拟化技术提供商,但Docker等容器技术对其核心业务造成了不小的冲击,为了应付这种冲击,并顺应潮流,VMware发布了两个新的开源项目,Project Lightwave和Project Photon,这两个项目都是致力于提高云应用以及企业架构的扩展性. 最近从VMware发布的一系列开源项目的新闻来看,他们希望自身能在新型的企业级应用变革中占有重要的地位.花一些时间介绍一下当下

"Goole项目托管"及"CodePlex发布开源项目"要点

一.google项目托管相对比较容易 http://code.google.com/ 先注册一个gmail邮箱,然后参考孟子的这篇文章http://blog.csdn.net/net_lover/archive/2009/04/08/4056916.aspx 二.CodePlex开源项目--这个相对麻烦一点 http://www.codeplex.com/ 得先注册一个帐号,然后创建项目,默认情况下项目是未发布状态,得先上传源代码并选择License后才能publish,关键是Source Co

VMware发布开源项目Lightwave和Photon 提高云应用扩展性

VMware是老牌的虚拟化技术提供商,但Docker等容器技术对其核心业务造成了不小的冲击,为了应付这种冲击,并顺应潮流,VMware发布了两个新的开源项目,Project Lightwave和Project Photon,这两个项目都是致力于提高云应用以及企业架构的扩展性. 最近从VMware发布的一系列开源项目的新闻来看,他们希望自身能在新型的企业级应用变革中占有重要的地位.花一些时间介绍一下当下应用程序与以前发生了那些本质的变化是值得的. 传统的企业级信息化建设都是使用整体(monolit

重回CSDN,分享我的两个开源项目ENode、EQueue,希望以后重新融入CSDN

问题描述 真的很久没来CSDN了.看了下之前发的贴,是在我刚大学毕业候参加工作第一年时的07年6月18日.时间好快,没想到已经差不多8年了.这8年时间里,我提高了很多,也在博客园写了不少的技术文章.今天突然想到CSDN(这个我曾经一直活跃的中国技术第一社区)看看现在这个社区怎么样了:同时,也希望向大家分享一下最近几年积累的作品.最近几年,我一直专注于DDD领域驱动设计方面的学习,积累了一些知识和心得.同时也开发了自己的两个开源作品:ENode和EQueue.ENode是一个基于DDD+CQRS+

TIOBE社区发布2013年10月编程语言排行榜

TIOBE社区发布了关于2013年10月的编程语言排行榜,其中,轻量级的Java语言Groovy在本期榜单中排在第18位,可谓取得了历史性突破,这是Groovy首次闯入了排行榜前二十.但是,排行榜前五名内并没有太大的变化,C语言第一名的位置岿然不动,Java也是紧随其后.而和上月相比,只有排在第三位的C++和排在第四位的Objective-C换了位置,看来小编之前的猜测貌似是应验了.而上次排行榜的黑马Transact-SQL下降一位,不过势头依然十分迅猛,和去年的同月相比提高了14位. Groo

不少人喜欢在网上发布信息

不少人喜欢在网上发布信息.一些信息,如一时冲动写下的不恰当评论或拍摄的不雅照片,日后可能给发布者带来麻烦.德国一名信息技术专家设想开发一种技术,让人们今后在互联网上发布信息时能给信息设置一个在网上留存的期限,超过期限,信息就会自动从网上消失. 办法 即使经常去删除发布在网上的文字和图片仍难以消除痕迹,因为搜索引擎会自动"梳理"网络,记下上面发布的一切信息. 德国萨尔州大学信息安全和密码系统专家迈克尔·贝克说,要想彻底清除所发布信息,"需要阻止数据自动存储". 德新社

Teradata天睿公司发布开源Kylo软件

Teradata天睿公司(Teradata Corporation)宣布,推出全新数据湖管理软件平台Kylo.该平台运用Apache Hadoop.Apache Spark.Apache NiFi等最新开源框架搭建,帮助企业以前所未有的效率打造数据湖,为开源社区做出重要贡献.Kylo是由Teradata天睿公司赞助的开源项目,将在Apache 2.0许可下交付.Teradata子公司Think Big Analytics从成功部署的数据湖项目中采集代码,推动Kylo不断演进,并将为Kylo提供专