MageTower 信息平台架构 –开篇
多年以来,我一直在构想一种信息系统,正如我现在用Word可以随心所欲地处理文字,这种信息系统可以随心所欲地处理我们日常业务中的各种信息。其实,这也是成千上万IT精英孜孜以求的梦想,于是我们就有了各种技术和架构如滔滔江水连绵不绝、如黄河泛滥一发不可收拾般地不断涌现。但本人因目力有限,总觉得似乎还有些东西其味不够,所以在这发大水的年代,也想再多灌一瓢。
关于体系结构。一般总是在系统下面划分模块,模块下面划分功能,对应功能的就是具体程序了。我觉得不够,在功能下面应该是策略,而且可以有很多策略。也就是说,为了实现同一个功能,可以有很多不同的方式、方案(策略)来实现,这些策略各有其自身的应用条件,而且条件可以是简单的,也可以是复杂的。系统从功能中挑选出满足条件的策略,来实现其任务。注意,这种方式与给某些功能设定几个开关或参数是不同的。
在现实世界中,人类处理业务时,一般都会有一个机构,这对应我们的系统;机构下面有部门,这对应我们的模块;部门下面有科室,这对应我们的功能。一般机构是相对稳定的,但科室在处理业务时的政策却是经常改变的,或是有各种不同的、经常变动的条件,来决定业务处理的方式。我设定策略,就是模拟和应对这样的情况。
关于系统控制。工作流是一种好东西,可以实现流程的灵活控制。可是我们的大部分信息系统要么不用,要么仅仅在部分功能中实现工作流的控制。很少看到将工作流引擎作为系统主要甚至全部控制手段的,工作流引擎供应商提供的Demo不算。也许我少见,汗,但至少这个不流行。
我设想的系统,就是从头至尾都利用类似或者就是工作流的方式来控制几乎全部的流程,也就是说,几乎每一个功能都用。我在这里把它叫做“策略”,所谓策略,就是开头干什么,接下来干什么,这个条件干什么,而那个条件又干什么。策略放在策略文件中,由策略驱动引擎来解读和执行。整个系统平台可以说几乎就是一个大的策略驱动引擎,不断地读取策略文件,然后按照其中指定的策略执行。要开发一个新的系统业务,主要或绝大多数工作就是编制策略文件。要修改系统,也主要是修改策略。
可以用企业运营方式,来理解“策略驱动”的软件系统的运行方式。在企业开办之初,一般会有一套初期的运营管理规则,随着企业的发展以及内外环境的变化,其行为方式以及运营规则也会相应改变。企业领导人一般是通过修改、调整已有的管理规定,或发布新的管理规则/策略来改变他所领导的企业,以迎接新的挑战和机遇。而且,这种改变/更新,是在企业运营过程中发生的。
我们的软件系统与此类似,实际上是对上述企业运营方式的一种模拟。我们可以在软件运行过程中,根据需要来改变或增添前述的策略文件,让软件系统按照我们设想的方式改变运行方向。
用一个更形象的比喻,软件平台就是一辆汽车,而策略正是这辆汽车的驾驶员,他决定了软件平台这部车将如何行驶。
策略是可以根据需要随时改变的,甚至是可以由用户自行调整或改变的。
关于信息关联。信息系统中处理信息,必然要涉及信息之间的关联,不能处理关联,必是死水一潭,毫无用处。我们现在使用的软件系统大多是使用关系型数据库来描述信息之间的关系(即:关联)。但这些“关联”或“关系”不管其多么复杂,一般在软件系统的设计阶段就固定下来。软件系统开发完成交付使用后,用户只能在这“有限”的关系中对信息进行处理和分析。一旦用户要求修改或增加信息关系,就意味着对原有设计的改变,也就意味着修改软件。如果原有设计未充分考虑到未来变化,这种修改有时甚至会导致原先系统的混乱或整个系统要推倒重来。其耗时、耗力、耗经费的情况自毋庸多言。
那么,用户要求修改/增加信息关系的情况很多吗?可以
肯定的说,对企业甚至政府机关来说,这种情况非常普遍。原因很简单:这世界变化快!上升到更高的理论来说,《时间简史》的作者、著名物理学家霍金指出:空间与时间,以及存在其中的事物总是在相互影响着。可见,现实系统中事物的联系是无限的,因此软件系统中的信息之间的关联也应该是无限的。至少,当我们发现这些联系,并且觉得它们是重要的时候,软件系统应该能及时处理它们。
举个例子,我们在进行促销决策时,一般多考虑优惠、降价、赠礼品等措施对客户购买意向的影响。但有一天,我们可能发现,我们的客户群对某种时尚文化的关注,也会影响到我们的销售,比如对歌星、影星、体育明星的好恶感。于是要求我们作一次抽样调查,看看客户对某些明星的好恶感是如何影响产品销售的。这就涉及到“人与人”或“人与事”之间在“好恶感”方面的关联情况。你所使用的软件,如果不是针对这个方面做了设计,则肯定要对此进行修改,并且这种修改非一天两天能够完成的。
我设想一种“无限关联技术”,可以让系统中任意两个独立的信息,在任意概念上发生联系。基于此项技术来处理信息之间的相互关系,可以在数分钟之内完成上述例子中的关联扩展和修改,并且是在系统运行不停机的情况下实现的。
使用 “无限关联技术”,你在建造一个新的应用系统时,不必要求把整个系统方方面面的关系考虑完善后,再进行开发。你可以“想到哪,做到哪”,甚至在系统交付使用后,如果发现有
新的关联要求,那你就径直把它加进去就行了。
关于信息分类。“分类”是人们思考问题的一种基本方式。现实世界中的事物本无所谓类别之分,但人们为了思考的有效性,通过归纳、总结的方法,对事物进行了归类。“分类”也是人们从不同角度去看待事物的结果,所谓:“横看成岭侧成峰,远近高低各不同”。人们看待事物的角度不同,对事物的分类方式就会不同。
软件是人类大脑的延伸,是帮助人们思考的工具,因此软件中的信息都会是经过“分类”的。但能否实现“横看成岭侧成峰”的境界,则只能是各显其能了。有3种分类策略:
1、
固定类别:比如对客户所属区域的划分,软件中固定了要按照“华东”、“华南”、“华北”….等方式分类,你不能对此有任何改变的想法。这是一种低级而又霸道的分类措施。
2、
灵活分类法:这是一种较为人性的做法。在上述例子中,它允许用户将区域划分改变为按省、市、县、甚至街道或村庄的方式,或按国家、洲的形式。目前大多数成熟软件均可做到这一点。但是,这尽管分类灵活,分类的角度却是不能改变的,也就是你不能拒绝按“区域”进行分类,也不能突发奇想,要求按照客户的“高矮胖瘦”来进行新的分类。因此,这类软件虽然有其灵活性,但还是限制了人们看问题的角度。
3、
万能分类法:此技术是对第2种方法的革新,它允许你任意变换/增添角度来重新审视问题。你甚至可以突发奇想,按照客户的老婆/老公是否漂亮/英俊,来对客户进行新的归类。说不定你会发现:凡是老婆漂亮的客户都会时不时做出一些怪异的购买行为。
第3项正是我所设想来处理信息分类的方法。要能在十分钟之内完成上述例子中的分类变化,并且是在系统运行不停机的情况下实现的。
关于信息的权限控制。信息系统本来就是网络的或多人共享的,所以哪些信息允许哪些人看和改,就是一个基本问题。我们一般是按信息类别来进行权限控制的,比如财务凭证,如果允许你看,那你就能看所有的凭证。能否限制某笔业务的凭证不让某个人看?在现实世界中可以做到,比如,经理在这张单据的右上角粘上一个小纸条,写道:不要让张三这小子看到。这样,当张三向财务要此单据时,财务就说:尽管你是销售部主管,有权看所有财务单据,但这张单据确实不在我这儿,你去问问其他人知不知道。
冷冰冰的软件能否像上面这位财务那样精明?我试图解决这个问题。方法很简单:让每一条信息均附带一个权限标签(就像上面的小纸条),当这条信息生成时,你可以在其权限标签上注明特别的权限。如果不注明,就按它本来所属类别的权限进行控制。这就是让权限控制具体到一个个独立的信息实体上。
另外,权限的种类应该可以是有个性的,不能仅仅是查看、修改、删除这些尽管常用却毫无创意的。谁能审批,谁能评价,谁能统计,谁看了就变成面目全非的东西。也许一个凭证涉及到你的小金库,于是你不想将它统计到一些报表中去。当然,如果这涉及到违法,你可要自己担着。最好能允许用户在某些时候自己改变权限的种类,正像只许贪馆包二奶,不许百性看A片一样,用户的权限政策经常会改变的。
以上是我想在自己的系统中实现的。但在实际做的时候,你要充分利用当今科学的伟大成果,比如界面分离、事务服务、安全认证、CORBA之流等等。但这不是我要讨论的地方。
也许对很多IT人士而言,上面这些都不是问题,但对我而言,这是否能让我的软件理想登上更高一层的庙堂呢?就让我开始这一心灵之旅吧。
对了,为什么叫MageTower?没有多想,也许是希望能带来一些意想不到的力量吧。
待续……