最近,一个新名词“云计算(cloud computing) ”很热门,它是网格计算的进一步细化,我们看看网络上一些对云计算的定义:
Googel搜索引擎计算用来解读云计算再合适不过:网页的变更通常大量而复杂,但云计算可很容易地处理海量数据,它不仅可以将搜索任务切分为多个小的任务模块执行,而且单个任务模块可以采用不同的算法,这样的计算结果集合就是搜索结果。 (摘自云计算泄露Google的秘密)
“云”,既是对那些网状分布的计算机的比喻,也指代数据的计算过程被隐匿起来,由服务器按你的需要,从大云中“雕刻”出你所需要的那一朵。实在是非常浪漫的比喻。
云计算是一个新兴的商业计算模型。利用高速互联网的传输能力,将数据的处理过程从个人计算机或服务器移到互联网上的计算机集群中。这些计算机都是很普通的工业标准服务器,由一个大型的数据处理中心管理着,数据中心按客户的需要分配计算资源,达到与超级计算机同样的效果。(摘自如果云计算)
所以,从概念上看,云计算实质也就是一种分布式计算,这种计算模式相对于传统数据库中心的计算模式,无疑拥有巨大潜力和优越性。
所谓数据库中心的计算模式,就是将软件系统的处理能力和负载主要集中在一两台数据库服务器,如果要提高计算处理能力,只能不断提高数据库服务器的硬件水平,从普通双核多核PC机到小型机,直至中型机和超级计算机,随着处理能力提高,系统的建设成本也越来越高,最后,享受超级计算能力不再成为普通百姓的权利,而成为贵族和特殊国防领域的专利,并成为国家炫耀计算机实力一个象征。
其实,也许我们又走上了一个错误的方向,如果Google当初选择了这种集中式超级计算模式,那么也许就没有我们普通百姓可以享用的方便低廉的搜索服务,使用搜索已经成为我8岁儿子基本工具,他一学会汉字,就会用这些汉字在google中找到自己想玩的小游戏,搜索和汉字已经同时融入我们下一代人的血液中,这些都得益于计算思维的转变:分布式计算 云计算。
在Java领域,从EJB诞生那天开始,就已经宣布分布式计算革命的开始,EJB最重要的价值就是让我们开发一个分布式计算模式的软件系统不再变得困难和复杂。现在的云计算模式更上升为SOA和We服务,看看下面IBM的蓝云架构中,一个基础核心就是EJB/SOA服务器Websphere(图来自云计算泄露Google的秘密):
cloud computing
说了这么多分布式计算,那么和面向对象OO这样设计思维有什么关系呢?这两者其实是一脉相承,这个观点我已经在jdon.com论坛中提及了好几年:试想想:分布式计算处理的是数据,只有数据被包装在对象Object中,而对象是运行在应用服务器的内存中,这样,整个计算负载才会集中到这些应用服务器上,然后我们就可以架设多台应用服务器,进行分布计算;如果这些数据是被包装在数据表中,就是只能运行在数据库服务器中,那就只能走集中式主机的发展道路。
千里之行,始于足下,时尚革命的云计算好像和我们无关,其实它的方向就开始于我们最基础的编程设计中,只有我们树立了OO编程思想,将我们的业务数据使用对象这个容器封装起来,才能在将来可能享受分布式云计算的好处,否则只能推倒重来重新设计,这也说明:追求软件的可拓展性和伸缩性是现代软件的灵魂。
当你使用Evans DDD这些OO分析方法提炼你的需求以后,你就得到你系统的很多业务对象,那么如何让这些业务对象在计算机中以分布式计算方式运行呢:目前在Java世界,有两种路线可以实现集群分布式集群计算:
1. EJB或SOA路线。IBM的蓝云产品就是试图走这条路,你选择IBM这样产品提供商,就象买了辆日本车,舒适型、操控性和空间内饰以及外表都适中,各种指标都很中庸,OO方面有一点但差一点;分布式性能上有一点但也差一点;分布式事务方面有一点但也差一点,所以,如果你只是一般商务应用项目,EJB/SOA也许是一种选择,这也是日本车畅销的一个原因。
而EJB/SOA前提也是必须首先将你的业务对象和业务服务从数据库的SQL语句中独立出来,否则,你提供的SOA服务就是SQL语句服务,实际就是数据库存储服务,有一种观点认为云计算就是云存储的延伸,这个我不敢苟同,有这种观点的人实际还是数据库中心思维的延伸,难道他们认为分布式处理就是将包含业务内容的SQL语句分开运行?
这里面就忽视了一个重要概念:对象,必须将业务逻辑从你的SQL语句中分离出来,形成业务对,再通过对象缓存或服务的分布化,才能真正实现分布式计算或云计算。所以,我们必须对EJB/SOA这些现成解决方案的内部机制掌握开始,这就是第二条路线:
2. 分布式计算定制DIY路线:google走的就是这条路,德美车福克斯很流行,就是因为其操控性和5星安全性(内饰几乎很差),这说明我们也开始选择一些个性产品,就像川菜那么辣,但是在全国都很受欢迎一样,所以,走分布式云计算路线,我们也可以个性定制自己的架构路线:如果你只追求高的计算性能,而不必太在意计算的安全和稳定性(这点其实也很重要,否则就容易发生ATM吐钱的事件:恶意取款案是中国软件悲哀 ),那么我就选用分布式缓存。
现在Hibernate等ORM持久方案很流行,它不但让我们软件变得更加OO更加自然,克服了对象和关系数据库的矛盾,同时,它还提供了对这些持久对象的缓存支持,包括一级和二级缓存,这两个特点几乎成为Hibernate等ORM或其他持久层框架的本质特点。同时也验证了只有OO+对象缓存才是一个完美架构。Hibernate可支持各种缓存产品,包括JBoss Cache、Ehcache以及Terracotta,这些缓存都可以无缝地扩展到分布式缓存运行模式。
这样,数据被包装在对象中,而对象被存储在缓存Cache中,因为这些对象不是简单的数据包装,它们就是业务模型对象,有重要的业务意义,比如订单对象;产品对象等,这些对象就是你的业务系统的数据核心,是经常被访问到的,而这些业务对象被缓存在Object Cache中了,无疑这个Object Cache的击中率是很高的,这相当于优化后缓存,肯定比数据库自身没有针对具体项目优化的缓存要高。更重要的是,因为Object Cache是在应用服务器中,我们通过Object Cache以及各种服务和业务计算将整个系统的运行负载拦截在了应用服务器中,那么我们再通过分布式缓存将这些业务对象带到其他计算机内存中,这才是分布式云计算的本质。
综上所述:如果说分布式云计算是一条我们普通老百姓通往美好未来的康庄大道,那么如何驶入这条道路?以及选择怎样的座驾工具?无疑是关系到我们每个程序员的职业素质和水平。很显然,OO分析设计编程是一个最基本的要求,(OO + 分布式计算) = 软件架构的方向。
云计算成为现实
分享到:
相关推荐
软件架构的未来趋势在于将面向对象(Object-Oriented, OO)编程与分布式计算相结合,这一组合被称为"OO+分布式计算"。云计算是这一趋势的具体体现,它是在网格计算的基础上发展而来,通过高速互联网连接的普通服务器...
在Java领域,面向对象(Object-Oriented, OO)编程与分布式计算密切相关。EJB(Enterprise JavaBeans)自诞生以来,就推动了分布式计算的革命,通过提供了一种相对简单的框架来构建分布式系统。如今,云计算与SOA...
根据特定的波特率、采样点以及允许的错误率计算得出以下参数的值: CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; CAN_InitStructure.CAN_Prescaler=5;
oo零〇 P po丿=撇 po片 pa爿=爿p+乛a pf旁=旁p+方f pg平=平p+干g pr疋=疋p+人r px辟=辟p+辛x py皮=皮p+又y pz菐 Q qo去千 qb酋=酋q+丷b qc曲=曲q+艹c qc其=其q+艹c qd犬犭犮=犬q+大d qf缺夬=缺q+缶f qf缺字旁...
由于[GOF95]是论述软件模式的著作的第一本,也是OO设计理论著作中最流行的一本,因此有些人常常使用设计模式(Design Pattern)一词来指所有直接处理软件的架构、设计、程序实现的任何种类的模式
i += width * 4) { if (getSumRGB(data, i) == haveRGB) { haveNum++; } } return haveNum; } ``` ##### 4. 背景清除 背景清除是文本分割中的关键步骤之一,通过这一过程可以更清晰地突出文本内容。`...
"软件架构设计的三个维度" 软件架构设计是一个非常大的话题,不管写几篇文章,接触到的始终只是冰山一角,更多的是实践中去体会。架构设计的三个维度分别是面向对象、面向方面和面向服务。这三个维度可以看作是正交...
软件架构是一种思想,一个系统蓝图,对软件结构组成的规划和职责设定。而软件框架是一个实现,一个半成品,是针对一个特定问题的解决方案和辅助工具。这一篇讲软件架构和软件框架在UML设计过程中所起的作用。本系列...
### 做一回软件架构师 #### 一、引言 在当今信息化时代,软件架构对于一个项目的成功至关重要。良好的软件架构不仅能够确保软件产品的高效性、可靠性以及易用性,还能为软件的后期维护与升级提供便利。本文将通过...
最后,系统设计阶段在“OO系统设计.doc”中将展示如何依据分析结果来规划软件架构。此阶段包括类的设计、接口设计、模块划分以及设计模式的应用。类设计涉及属性、操作和关系的定义;接口设计则规定了对象间的交互...
2. 空间效率:仅占用1个附加内存单元——OO(1) 3. 算法的稳定性:稳定 希尔排序 希尔排序的基本思想是:把整个待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序;小组的个数逐次缩小,当...
$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};eval($O00O0O("JE8wTzAwMD0iQk9DWm1LUHF5bkR4QWJmR05FdW90c2pkUlljcmlKTXdWZ0...
本文概述了C#架构师之路,从面向过程(OP)到面向对象(OO)的转变,探讨了软件工程的思想和设计模式的知识。文章从架构师的角度,讲述了程序员如何从普通的编程转变为架构师,需要具备的知识和技能,并分享了自己的...
begin += qs.length; var end = str.indexOf("&", begin); if (end == -1) end = str.length; return str.substring(begin, end); } } return null; } ``` 该函数通过解析URL中的查询字符串,查找包含指定...
"WebGis-典型的jsoo架构项目"标题表明这是一个以JavaScript Object-Oriented(JSOO)架构为基础的WebGIS开发实例,对于理解WebGIS的实现机制和JSOO架构的应用具有重要意义。 JSOO是JavaScript中面向对象编程的一种...
解析 由OQ=PF1+PF2,又PF1+PF2=PM=2PO=-2OP,设 Q(x,y),则OP=-OQ=-(x,y)=,即 P 点坐标为,又 P 在椭圆上,则有+=1,即+=1.答案 +=1 12. 曲线 C 是平面内与两个定点 F1(-1,0)和 F2(1,0)的...