个人家庭私有云计划-10

 嗯,上午调试程序,作发布前定稿,还挺忙的。程序员

下午来接着说。web

刚才登录了一下家里的小服务器,中国大百科24CD已经所有下完了,正在解压到图书馆里面,呵呵,下了快1个月了,8G。数据库

午餐前有个朋友问到ATOM性能很差的话题,其实这段时间讨论这个的朋友已经有点多了,我作个统一回答算了。安全

首先声明,我没打算只买一台计算机的,我但愿的是这个云里面有多台计算机,有负责存储的,有负责性能计算的,有负责打酱油的,呵呵,就是作程序试验什么的。服务器

其次,除了这台存储服务器,我为了节约电,其余的计算机恐怕不会7*24小时开机,只有用的时候开。网络

关于计算性能优先,有些朋友建议我考虑i3什么的,我确实没考虑,由于我没打算打游戏为主,儿子之后打游戏呢,我可能单独给他配一台游戏机,那是另外的话题,属于终端设备,不归入这个私有云服务器集群考虑。socket

我预测我之后性能主要的需求是PS照片处理和录像剪辑处理,由于虽然我作的是高性能数据库,但个人数据库搁家庭来讲,确实没什么用,我也不会傻到在家里部署一套数据库,高压力长时间测试,这个电钱太吓人,仍是单位负担比较好。我这边只考虑家庭需求。所以,家庭的高性能计算需求我预测只有照片和录像。至少目前我尚未看到其余需求,固然,你们能够提啊,我能够归入一体化考虑。ide

因此个人潜在采购目标是淘宝上,3k多的8核图形工做站,而不是用什么i三、i7这类民用CPU配出来的一台家用机,这是下一步计划,呵呵,先说出来,省得你们等急了。函数

目前搭建的主要是私有云的存储中心,数据仓库,暂时尚未考虑到而已。就这儿我都先后忙了差很少大半年时间呢。性能

因此咱们慢慢来,呵呵,不急。

嗯,既然说了,就多说一点图形工做站,这个工做站确定要买的,由于不止处理图像和视频,我对nVidia的CUDA一直很向往,我认为这是目前家庭能够得到的最廉价的并行计算物理平台了,一直想作这方面的实验。

可是民用显卡我认为基本上都是打酱油,我期待的是采购工做站的时候,精选一下显卡,最好是专业级的,我除了功能测试,还能在上面作点性能指标的测试,这是个人核心目的。

因此,既然有这个目标在后面压着,我天然能够忽视其余服务器的计算性能。

再讲一点我对服务器的认知啊,我是从38六、486时代过来的人,那个年代的服务器要说CPU,连如今的手机都不如,可是,就是那样,我是亲眼看见过当时的服务器作了多少事情的,因此我一直不认为如今的服务器才叫服务器,当年其实已经能作事了。

换而言之呢,我其实以为ATOM的1.6G主频,已经能作服务了,尤为是仍是双核的状况下,服务器性能好坏,不看机器看应用,应用要求高性能了,没话讲,花钱搞定,可是实际生活中呢,又有多少高性能服务需求?你们去想。

因此我才在这个计划里面细分需求,试图经过多个服务器的精细搭配,以知足家庭需求为目标,实现一个家庭信息化中心这么一个私有云,是否是云不重要了,我认为最重要的是,家庭买得起,用得上,这才有意义。

还有一个很重要的设计思路是,个人方案应该不强调专业性,普通家庭用户,看了这篇文章,照方子抓药就够了,不必什么都本身来,因此我尽可能采用低版本的操做系统,客户端操做系统好比Win7来搭配服务器,由于毕竟普通家庭用户得到Windows Server版的可能性不大,会配置Server版复杂的组策略的更很少,所以没有实用价值。

虽然我如今使用的是2008R2,可是我不排除之后再换回Win7去,由于我以为那个实验结果更有意义一点。

你们以为呢?

好,言归正传,不少朋友都急于想看下文,我猜想,你们可能胃口吊最高的就是如何跨越内网实现安全的管理操做和高密级的信息流传递。

这个事情实际上是我考虑的重点。今天上午还看了51cto一个帖子,讲用的是SoftEther来作***,解决跨越内网访问的问题,嗯,这是个法子,虽然我没用。随后我就作了实验,在小服务器上安装,但很遗憾,这个软件被2008R2拒绝安装了,虚拟网卡安装失败,多是没有被微软认证致使,我在服务器上采用的是严厉策略,因此拒绝安装。

不过这不重要,由于我实际上没有使用这个法子。我找了新的解决方案,并且还很简单,普通家庭用户均可以用。

嗯,怎么说呢,这一讲起来又要作科普,我试着讲讲吧,讲不清楚呢,也别怪我,内容太多了。昨天我说了的,真要讲清楚,一本书呢。

P2P你们都知道吧,可是原理呢?我估计知道人很少了。

互联网用的是TCP协议,它底下还有UDP协议,其实咱们目前的互联网应用,大多数就是这两个协议的组合,不排除有其余协议啊,但主要是这俩。

通常说来,TCP协议比较严谨,要求有握手过程,就是说我明确说明,要和哪一个IP地址通信,那么,网络协议栈层,中间路由设备会根据个人链接请求,找到目标,通过三次握手什么的,最后创建链接,OK。

实际上像http、https这类web应用,底层的链接协议基本上都是TCP的,这就带来一个问题,咱们内网的计算机访问外网,好比我在家里,访问51CTO,我在内网,51CTO的服务器在公网,没问题,大多数路由器都容许这种链接形式,由于在公网上,咱们的路由器WAN端口其实和51CTO的端口是差很少的,算是邻居关系,你们彼此很容易看见,目标明确,链接就成功。

可是,若是反过来,51CTO有台计算机想要链接我家里的计算机,麻烦了,我家里有好几台机器呢,请问你连哪台?51CTO毕竟不是我家里的蛔虫,确定不知道啦,这目标说不清楚,就链接不成功了。

这就是说,我单位的笔记本在单位内网,个人小服务器在我家里的内网,是没有办法直接作TCP链接的,很艰难。必须在路由器上作端口映射。就是我指定外网的一台计算机,若是访问我路由器的80端口,路由器把它转移到内网的小服务器的80端口来,就行了。

但这又有一个问题,我家里的路由器是我在控制,我能够随便配,可是我单位的可不是,人家不可能在外网给我开辟这种端口映射服务,那人人映射,还不乱了?因此,端口映射可行,可是大多数场景不靠谱,由于技术可行,人不会容许。

因此我才在前面回应网友说,端口映射不行,我没有用这个办法。

注意哦,若是我仅仅要求我单位计算机访问家里小服务器,在家里小路由器上作端口映射就能够了,我心还要大一点,有时候我在家里,想看看单位的实验结果,还想从家里登录到单位计算机,进一步登录到咱们内网服务器集群里面去看东西的,因此我要求的是“彻底”双向链接。

事实上我如今就是这么作的,在单位登录家里,在家里登录单位,我甚至有时候在外面,还会先登录到家里,再经过家里登录到单位作点事情,甚至远程安排他们俩作点传输试验什么的。我认为这才叫全球可用。

这怎么办呢?这得用到P2P技术里面的一个分支,就是UDP打洞技术。

所谓“洞”的意思是这样的,内网计算机链接外网计算机,其实并非真实的直连,而是内网计算机首先链接路由器,两者创建一个链接,再由路由器本身主动发起链接,向外网目标链接,这在路由器看来,就是两个socket,而这两个socket之间有关联关系,a来的数据,路由器要转到b,反过来,b来的数据,要转到a,路由器其实就是专门干这件事情的计算机啦。

路由器工做的时候,老是响应内网的某个TCP链接请求,采集信息,而后发起外网链接,转发两个socket之间的数据,直到某一方拆除socket,可能你们把它理解成电话的程控交换机比较好一点。

好,如今问题来了,TCP是有一个链接过程的,这期间路由器资料很明确,内网a要链接外网的b,嗯,容许,开始转发服务。

可是,还有个UDP协议呢,路由器不可能不支持UDP的,不然卖不掉。但UDP有个问题,它是无链接协议的,一般的状况是,内网a说了,老子这有个报文,路由器,你把它转到外网b的某个端口上去。嗯,它要有回应,你给我转回来。

这下路由器麻烦了,你这一笔交易没问题,我转出去,知道大家两个socket有关联关系,它回来的我给你转回来。

可是大家两个的UDP协议,不但没有创建链接的动做,连拆除链接的动做也没有,我咋直到大家何时通信结束?路由器创建两个socket的映射关系是有很大代价的,起码得有个转发线程来伺服吧,若是每次UDP传输都这样只管创建无论拆除,那路由器死定了,几分钟以内资源就要耗尽,而后挂死。

因此传输上超时很重要,全部路由器在实施的过程当中,都是设定一个超时,必定时间内,几百个毫秒内,我给你转,而且,若是大家俩一直连续通讯,我就一直给大家转,可是,若是几百个毫秒大家都没动做了,那对不起,我拆了大家。这就是超时拆除。

拆除其实对于内网a来时,影响不大,它知道它的目标的,下次它发出通信报文时,链接会自动再次创建。不要紧。

但对于外网b来讲,问题就很大了,由于它发的报文到达路由器时,路由器已经拆除链接了,不知道你发到我当前某个端口的报文应该转发给内网哪台计算机,所以传输就中断了。

这要形象点看呢,比如路由器就是一层泡沫薄膜,它上面能够开不少个洞,洞只能由内网计算机来开,这个洞呢,若是里面一直有东西钻来钻去,就一直开着,没有了,一下子就自动愈合了。愈合之后呢,外面过来的东西被挡在外面,里面的呢,能够经过开新洞出来。就这么个意思啦。

嗯,这个时候带来一个问题,若是一个洞口在打开的时候,若是有第三方,就是其余一台计算机,送了点小礼物过来,能不能从这个洞口飞进去呢,最终到达里面的计算机手中?

答案是不必定,路由器有四种,最后面,也就是最严厉的一种,是不容许的。其余三种都容许。嗯,这个太专业了,不讲了。你们只要知道,大多数咱们见过的路由器,均可以容许洞口打开的时候,第三方能够塞东西进去就行了。

嗯,说到这里,估计已经至关一批观众已经陷入晕厥了,呵呵,当年我看到这儿的时候,也晕过去了。

而后,我就问了一句你们可能如今最想问的话,这TNND有什么用?

用处大了,要知道,第三方可能也在一个内网里面,它前面也有这层膜。

故事的发生是这样的,公网有台服务器,专门用于给你们握手服务,内网的客户端每时每刻都会主动和公网这台服务器发UDP报文,前面说了,只要有流量,洞口就会持续打开,不关的。

公网服务器呢,固然知道目前哪一个客户端如今和本身通信的洞口是什么,就是IP+Port的一个组合了,当有a、b两个客户端想直接通信的时候,怎么办呢?公网服务器把a的洞口告诉b,把b的洞口告诉a,而后,注意哦,a就是第三方,试图塞东西进b的洞口,进去了,b一样,也试图塞点东西到a的洞口里面。好了,链接创建了。两者发生直连。通信正式开始。

这就是大名鼎鼎的P2P的握手过程,BT、迅雷、电驴、电骡、PPStream、PPLive...等等,都是这么来的。嗯,还有大名鼎鼎的Skype,网络语音电话。QQ你们知道吧?它是怎么传送的?猜猜看。呵呵。

这和***不同,***是一台公网服务器负责转发,a的数据过来,转给b,b的转给a,注意,公网服务器很贵的,静态IP地址不说了,还有流量,这些流量都是部署服务器的企业花钱向电信买的,通常一个月就100M,多了可就贵了。因此P2P出现之前,公网转发服务,***很是昂贵,不多有人能用得起。

可是P2P出现后,状况不同了,一旦ab知道对方的洞口,开始创建链路通信,嗯,你们发现什么没有?公网服务器没什么事儿了。这俩哥们本身聊好了,公网服务器就是负责这个握手过程,带宽极低,因此成本很是便宜,几乎能够忽略不计。这就是为啥QQ、Skype、PP什么软件能够免费运营的由来,没有这个技术,他们赔死去。都给电信局打流量工了。

OK,既然上述理论能够成立,那么,咱们在UDP上来本身实现一套TCP协议栈还难吗?原本TCP就是在UDP的基础上二次开发成的。呵呵。

那是否是说,只要底层咱们修改一下协议,使用P2P技术,那么,咱们能够本身构建一套TCP协议栈,这协议栈也是程序啦,别人能写,为啥咱们不能本身写?

事实上我08年就干过这种事儿,呵呵,我本身实现过socket的,写过select、connect、close、send、recv之类的函数,嗯,朋友知道是什么吗?伯克利SocketAPI,查查去。

固然,网上有不少现成的P2P开源库,我当时被迫本身写是由于还有其余需求,就是穿越防火墙,一个防火墙,只能浏览网页,也就是说,只容许80端口的穿越访问,个人任务是要利用这个仅有的条件,打网络语音电话,还要保证报文的QoS质量,嗯,就是这么简单一件事儿。

后来呢,应该是如今尚未拦得住个人防火墙,呵呵,由于没人给我报bug。

那些说不要本身重复造轮子的朋友,这种轮子你哪找去?要不要本身造?

这算是数据传输领域近年来新出现的一个冷门专业啊,其实也不冷门,由于它正在变成大热门,建议有兴趣的程序员朋友研究一下,这个行业能赚钱的。

关键是太有用了,你们发现没?

固然,这个原理我知道,代码也有,不过,最终我没有用我本身的,由于个人东东没有通过商业化包装,对于普通用户来讲门槛有点高,我找了半天,呵呵,其实就是花生壳,也已经开发出相似的东东了。

这就是向日葵。

嗯,写了很多了,休息一下。

预知后事如何,且听下回分解啊,呵呵。

相关文章
相关标签/搜索