最近,一个新名词“云计算(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 + 分布式计算) = 软件架构的方向。
云计算成为现实
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 + 分布式计算) = 软件架构的方向。
云计算成为现实