`
cx732cx
  • 浏览: 18741 次
社区版块
存档分类
最新评论

谈谈我对未来的想法吧

阅读更多

  来总行珠海研发中心近半年的时间了,大部分的时间其实都在学习。我很珍惜这次机会,所以平时的工作还很用心,不过还好,我们组长也比较喜欢我,经常鼓励我,我也经常和他一起聊天,讨论未来技术发展的方向。o(∩_∩)o...。然后平时有空就打乒乓球,然后编程。顺便和公司方的技术人员聊天,了解最新技术动向。 
  以前还没有毕业的时候,在学校DIC信息中心呆着觉得无聊就做一个论坛,也是为了学ASP边学边用。后来毕业了就没怎么管它了。工作后,觉得有继续学下去的必要,然后就在论坛中加了个相册的模块,大部分用JS写的,觉得功能不够,就仿照126写了个邮箱模块,还是觉得功能不够,想整个能进行实时沟通的工具,却发现了ASP的技术瓶颈:不能进行页面实时交互式的异步通信。因此又学AJAX。在学完AJAX后发现自己有能力搞定异步通信了,于是就在论坛中添加了个聊天模块,然后发现自己写的用户登录和注册页面现在看来实在太寒碜,就仿照现在的网络论坛的功能重新写了一个。在和公司方合作的近半年中,我们深入到了公司方实地开发的内部,帮助他们写JUNIT单元测试脚本,对代码进行走查。在这个过程中,我逐渐接触到并了解到了一些新的技术和架构。对自己的学习有一定的启迪。但更多的是深入的思考,包括对未来网络发展及技术走向的一些思考,下面听我慢慢道来。或许我的这些思考有些过于肤浅,有些过于理想和幼稚,但我毕竟努力去思考它,接着打算一步步去实现它。 
  首先介绍两大主流架构:1是J2EE的架构,这个架构具有平台的通用性,由SUN公司推出。与之对应的是.NET架构,这个架构只能在WINDOWS上运行,要在其他系统中如UNIX或LINUX中运行得安装组件支持。我们公司方采用的是J2EE的架构,因此我们经常听到的就是他们夸自己的产品跨平台、兼容性好。o(∩_∩)o...,其实对也不对。因为所谓的跨平台支持还是会遇到很多的问题,例如服务器版本问题,可能以前开发J2EE的时候用TOMCAT做服务器开发得好好的,在测试的时候服务器上换成WEBLOGIC就老是挂掉。可能以前用IE6.0浏览器JS能够正常运行,换成火狐FIRFOX或NETSCAPE或者苹果的SAFARI不仅页面布局出问题,页面端JS程序还老是报错。结果最后的尴尬就成了:建议使用IE6.0版本以上的浏览器。。。。呵呵,扯远了,只是想说明一点,未必所谓的兼容就是好的。 
  J2EE跨平台的确是它的优势,然而,如果因为这个去学J2EE,未免有点小题大做了。因为我已经会ASP了,同样可以跑程序。"不管白猫黑猫,逮住耗子就是好猫"。不管ASP还是JSP,搞定用户需求就是好程序。呵呵。那么,J2EE真正有哪些优势呢?这对我用ASP也是一种启迪啊! 
  首先,J2EE实现的分层次的MVC架构。这也是JSP和ASP最本质的区别。M-model,V-view,C-contro。模型-视图-控制。JSP把数据库,服务器端程序(运算与控制),用户展现页面分别化成相对独立的清晰的层次。a.数据库叫持久层,b.服务器端运算叫业务逻辑层(JAVAbean实现),c.服务器端控制叫控制层(servlet实现),d.用户展现叫表现层(applet+css+js实现)。这样,程序结构一目了然,实现了层与层之间松耦合和向下兼容的关系。相对于ASP把服务器端运算、控制、客户端展现都揉进一个页面中,的确是一种进步。但是,高级ASP程序员也能够做到MVC架构:a.数据库持久层:将数据库连接提出来单独作为一个文件配置,需要的地方进行引用;b.业务逻辑层:由VBSCRIPT封装成的INC文件,同样是页面引用,(达到简单JAVABEAN的类封装后台运算的目的)。c.控制层:服务器端语言VBSCRIPT实现,d.表现层:css+js,js封装成js文件,由页面引用。 
  再进一步来说,实际上,通过ajax,mvc架构还可以封装的更为彻底,此时,asp,jsp或php的差别就不是那么重要了:a.表现层:页面表现完全采用DHTML完成,这样,在用户浏览网页的时候根本看不出你用的是ASP,JSP,还是PHP,他/她只看到HTML网页。(目前很多大型门户网站就是这样做的,而且HTML网页执行效率更高)b.控制层:通过html中的ajax使用xhr调用服务器页面(asp.jsp或php)完成异步通信操作,实际上就是服务器端控制层所进行的工作。c.业务逻辑层和数据库持久层同上。 
  然而,j2ee更大的优势在于:开源框架。这是asp无法比拟的。比如,实现上述MVC架构只是初级JAVA程序员的水平,到了中高级JAVA程序员,MVC就变成了:a.持久层:HIBERNATE框架,对数据库对象进行封装建模。b.业务逻辑层:spring轻量级开源框架(相对于高级JAVA程序员的EJB-EnterpriseJavaBean)c.控制层:servlet,d.表现层:structs框架。通过框架进行开发,好处在于:1.更完美的封装,比类对象的封装更进一步。框架本身就是代码高内聚低耦合的极致。2.完全面向接口式的编程。如果改变一个类的功能可能要改动很多的代码,改框架更轻松。3.代码复用效率高。举个例子,如果你用框架写一个东西和用ASP写一个东西,你把这个东西应用到其他的地方,用ASP可能要调试三天,或者重写代码(时间更多),而框架技术只需要3分钟不到(引用,调试好接口,复用它,搞定)。4.开源的优势。上述框架都是开源框架,能够应用于企业级别的开发而不担心版权和付费问题。而相比较起来,到了这个层次,ASP几乎只能通过扩展组件来支持,而现在支持ASP的扩展组件一是应用范围局限性,二不是开源产品,因此当实际开发中遇到这样的问题时,常常找不到对应的组件。而如果每个"车轮"都自造,是多么痛苦的一件事情!(.net相对较多,但仍然不开源) 
  另外,J2EE正是基于上述框架模型,逻辑代码与数据完全分开,使其安全性和稳定性都超过了ASP和PHP,PHP还好,至少效率上很占优势,它部署的大型架构可以支持同时数亿个在线连接(如现在很火的开心农场就是基于PHP架构的,支持数亿在线连接),而ASP呢?和PHP相比速度慢、效率不高,和JSP(一般用于通信系统和银行系统)比稳定性不好、安全性不好、而且还不开源,这也是ASP最终没落的原因吧。 
  那么,J2EE的架构优势我们基本上已经明了了。现在,我们可以看出,不到大型企业级应用的话,ASP是能够搞定的。那么,再聊聊未来web的发展趋势吧。同时也看看还有啥好东西值得咱学习的。 
  首先可以肯定一点:B/S系统必将取代C/S系统成为未来web发展的主流。为什么?因为B/S系统有如下几点优势是C/S系统所不能及的:1、c/s系统存在客户端安装与部署问题,如果是一个大型应用,必须到每一台客户端计算机上安装客户端软件,一旦程序新版本发布,更新,升级,都必须在相应客户端进行升级。如果涉及到几十万上百万用户,这是一个不小的工作量;2、对于没有升级的用户版本存在不一致的问题,存在系统漏洞的风险;3、B/S直接在服务器端升级,与用户无关。同时B/S只需要浏览器即可访问,而80%的用户默认内置IE浏览器。从这种意义上来说,在用户端不用安装任何软件,也不用任何的升级过程即可享受B/S系统带来的应用和服务。 
  您能够想象一下吗?未来我们的互联网将是什么样子的?五年?或者十年以后? 
  我们大胆想象一下,未来web发展可以分为三步:1.b/s完全取代c/s实现桌面客户端应用需求;2.把上述范围拓展到手机和pda上(可能以后和电脑都叫智能终端);3.通过云计算实现共享处理和存储能力,从而实现智能终端的超级应用。 
  想象一下,如果你打开手机(智能终端),能够一边打魔兽世界,一边和在大洋彼岸的朋友聊天,是多么惬意而疯狂的一件事情!这在现在看来难以想象的事情,实际上在技术上是完全有可能实现的!首先,就第一步而言,将BS的应用扩展至CS上,这是目前企业级开发追求的共同目标。现在的系统开发,我们已经很少看到使用CS做的系统了,每个公司进行宣传的时候都声称自己的系统是基于XX(.net或j2ee)架构的BS系统,以炫耀其先进性。的确,BS系统的优越性我们在之前已经讨论过。然而,目前的瘦客户端技术相较于CS的胖客户端技术来说,存在着以下几个方面的缺陷:1.瘦客户端技术的客户端展现能力还处于十分落后的地步:基于传统的提交网页的形式无法做到与服务器的实时交互,还好AJAX的出现解决了这个问题。然而,相较于传统的CS强大的客户端表现能力和丰富的用户交互体验来说,目前的网页技术还做得很不够,与CS还存在着一定的距离。2.目前基于瘦客户端的网络通信协议尚有待改进。例如要做到安装QQ客户端的语音、视频聊天,不仅仅是客户端表现的问题,还涉及到底层的通信协议。而AJAX技术目前也无法满足这个要求的。相应的,会催生出更多的技术和底层通信协议来实现上述目标。而一旦上述目标得以实现,可以说,网页QQ取代客户端QQ的时代就已经不远了。(基于RIA的FLEX技术不仅兼容了很多框架,而且支持SOCKET套接字,为通信专门开辟一条通道,有可能实现上述目标。)推而广之,相应涌现出来更多的技术一旦解决了BS前进道路上的种种困难(一旦成为网络发展的趋势,看似不可解决的这些困难也就微不足道了),那么,BS取代CS的时代也就不远了。 
  那么,RIA可以把我们的互联网大大地向前推进一步,然而,这和我们之前提到的目标差距还很远。差距在哪里呢?例如:此时如果我想在一台性能很差的计算机上跑魔兽世界(假设此时的魔兽世界已经推出BS的版本),对于对硬件要求如此高的应用来说,这个目标在目前实际上是无法达到的。为什么,内存不够,显卡太差,CPU跑不起来,等等。那么,就目前的技术而言,有什么解决办法没有?答案是:有。B/S系统在设计的时候就把运算分为了两种,一种是在本地浏览器端运行的,例如JS脚本,另一种是在服务器端运行的,例如JAVA,VBSCRIPT,C#等。那么,如果我将页面呈现的内容交给浏览器端,而把所有运算的内容,包括显卡GPU进行高质量画质渲染所进行的计算量(可以想像这加起来计算量是多么的庞大,因此对带宽也有很大的要求,然而让我们仅仅对未来网络的发展基于乐观主义者的角度来考虑上述情况),统统交给服务器端来完成,最终仅仅把运算结果的数据阵列(一种可能的假设)以二进制流的形式传送给需要它的用户,那么,从理论上说,只要服务器的数据处理能力够强大,大到能够对所有这样的用户数据进行实时的并行的处理,那么上述应用是完全能够实现的。然而,就现在情况而言,一个好的架构师要求我们在设计程序的时候尽量在浏览器端完成一些服务器端不是非常迫切或必要的计算内容(例如页面验证等等,当然,出于安全考虑,服务器端也应有一个对应验证),以减少服务器端的压力。为什么呢?究其根本原因,还是服务器的处理能力的限制导致的。就目前服务器的处理能力而言,根本无法想象我们刚才提出的那种处理要求。就是把所有的数据处理都写成runat=server它都吃不消,更甭想帮你消化GPU的处理能力了。那么,我们的问题是:1.刚才提出的假设有可能实现吗?2.怎样实现? 
  答案是:云计算。或许很多人对这个词的概念还很陌生。不过,请诸位去百度一下,或者去大公司网站对架构是或者总体设计师的要求看看,或许你会发现赫然写着一栏:熟悉网格计算,分布式计算,云计算。。。。。。,为什么我说云计算能够解决上述问题呢?现在我就介绍一下云计算的内容,理解简单一点,实际上它就是一种分布式运算。何谓分布式运算?即把本该由一台服务器(计算机)处理的内容切割成许多快,由一套看似独立的却又有彼此联系(网络连接)的计算机系统来共同并行完成上述内容。通过算法对每个子服务器进行负载均衡的资源分配,将一个大型的运算任务(本来有时间顺序,通过某种算法优化)切割成无时间顺序并发进行的小块,(【类似原理】:IBM的DATASTAGE的企业版本和服务器版本相比较,企业版有类似于通过某种算法对串行处理的数据进行切割且并行处理的能力)。然后通过集群管理汇总得到最终运算结果,这样,实际上我们从逻辑上可以把这个系统看成一台超级服务器,事实上,他们可能是许多能够共享处理能力的计算机集合。他们可能不处于同一个地方?对!这就是分布式的概念!可能这个集合中的一台计算机在中国,而其他的计算机分布于世界各地,他们之间通过INTERNET连接起来。这样,必须有一种协议,比如怎样进行协作?怎样共享处理能力?等等。这样,这个集合中可能有超级计算机的存在,也可能是一群落后的计算机的集合,然而,一旦通过某种优化的算法进行优化配置,这一群计算机的整体性能可能大于各台性能累加之和!(这也是哲学资源优化配置的内涵啊!:-)),试想,这样做一方面可以完全利用计算机资源(不必淘汰落后产品),另一方面只要这个计算机集群足够大,它的性能可能超越目前实际上最优秀的大型计算机!(事实上,很多科幻小说中已经描述了这样的一个情况的可能,整个互联网就是一台超级计算机!或许,人工智能也必须复杂到这样的一个程度,每一台电脑模拟一个神经元,几十亿个神经元的有序集合才能催生人工智能吧),而这所有的一切,都必须建立在共享处理能力的基础上!即分布式计算-云计算。当然,实现这一目标距离我们的现实依然很遥远,然而,就近一点的来说,对我们开头提到的问题,云计算有什么帮助呢?聪明的你可能已经想到了--既然分布式计算的目的就是共享处理能力,那么刚才的技术瓶颈不就是服务器处理能力的瓶颈吗?一旦云计算真正应用于互联网,实际上,用户集群的本身就是一个超级服务器,每个节点都可以动态贡献自己的处理能力和存储能力,按实际需求索取相应的处理和存储能力,而收费就像用电一样简单,用多少给多少。 
  嗯,的确是个不错的想法。不过问题也多多啊!首先,病毒的问题。处理和存储的共享使病毒传播速度可以瞬间遍及整个网络。可能以后DOWN机不是一台两台,也不是一个两个局域网挂掉的问题了,是整个互联网的安全问题!其次,共享带来的对立面是隐私,如何更好地保护隐私?一旦共享,对于黑客的防范就变得更加困难(他总能找到你意想不到的后门在你毫无防备的时候偷偷进入)。如何更好地保护个人隐私?如何保证商业机密甚至军事机密?可能未来云计算面临的不仅仅是技术上的问题,还面临道德和法律的问题。 
  但是,不能因为上述问题的存在而阻碍历史前进的步伐,首先,这是我们的一个梦,几代人的一个梦,自从我们小时候看阿童木那神奇的电子腕表就被那光炫迷人的未来科幻世界所深深吸引,我想,很多的IT精英们做着和我同样的一个梦,一旦这个梦想存在,就有人为这个梦想而努力!其次,这个技术的本身就是由计算机领域内的专家提出来的,它的出现,就是为解决我们当前所遇到的问题。因此我完全有理由相信,上述的梦想终有一天会成为现实,而我们的使命,就是把梦想实现!如果在实现梦想的过程中,能够抓住机遇,成就自己的一番事业,是多么美好的一件事情啊! 
  呵呵。这个梦可能很幼稚,诸位看过了,笑过了,想想就好! 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics