随笔-40  评论-377  文章-0  trackbacks-10
        在项目à产品à平台我的编程人生大体说明了一下我在一个什么样的需求环境下要搭建一个平台,及要建成一个什么样的平台之后,本文将着重讲一下这个平台的体系结构,及设计要点。有下面的内容:

l  设计要点

Ø  应用与Web Service(简称WS)分离

Ø  数据库与WS分离

Ø  应用集成

l  结构说明

Ø  简化的应用调用接口

Ø  重点模块说明

Ø  心血的结晶

l  接下来的文章

设计要点

应用与Web Service(简称WS)分离

在“项目à产品à平台我的编程人生”中我提到了WS瘦身,以及瘦身所带来的各种好处(详细请看原文)。其实“为WS瘦身”只是一种技术形式,其折射的意义将更为深远,即应用与WS的分离。WS调用的透明化,可以使应用不知道WS的存在,这样我们可以方便地将WS服务升级为WCF服务。无疑这会大大降低升级成本!对WS调用的封装我称之为服务前端

平台内各基础服务都是采用这种技术实现的,对于应用本身的WS服务,并不做要求,当然应用本身的WS也按照这种方式来实现的话,也会有相同的效果。

数据库与WS分离

         在一般的小型应用系统中,数据库的连接信息会直接配置到WS中去。然而在一些企业级应用中,数据量会增加的很快,而且数据的时效性很强,于是最好的做法就是分库存储。另一种情况是同一数据库中存在相同结构的数据表,只是表的名字是不一样的。如:容器系统WS可以用作用户库、用户组,他们都在平台库里存放数据,其中用户组还在应用系统库中存放数据;另一个例子是授权系统WS,他可以将授权信息存储在平台、系统、多个资源库中。

数据库与WS分离的最大的好处在于WS服务可以重用!此技术在平台设计中被广泛采用。分离需要解决的一个问题,即如何将数据库或表信息传递给WS服务?Soap头可以帮助我们解决这个问题。

应用集成

         这一部分是平台的一个辅助模块,是一个可选模块。主要有以下几方面的特点:

Ø  将业务逻辑与界面分离。

Ø  集中式界面管理,灵活的布局。

Ø  业务逻辑之间及界面与业务逻辑之间的数据交换。

目前此模块的设计只是第一阶段。其效果如同VS环境一般:界面可任意布局、界面之间的数据变化可被另一界面的数据驱动,可给用户带来很好的用户体验。现在还不支持插件,此功能计划在第二阶段进行实现。
        
该模块的核心思想是MVC,用于数据驱动。另外控制模块可以包括多个子控制模块,以使事件和数据可在多个模块之间进行传递。至于界面的任意布局借助的是第三方的DockPanel控件。     

此模块在平台中是相对独立的,且只是对应用客户端有效,从架构角度来讲影响范围较小,固不做深入说明。如果时间允许或大家感觉非常有必要的话可在后面的文章中进行详细的说明。

结构说明

         下面这张图是平台的整体结构图,除数据库层外,其余四层的左侧是平台实现的内容,右侧是应用实现的内容。

简化的应用调用接口

         简化接口不光是方法的简化,还有就是调用的“入口点”的减少。对于应用来讲,对平台基础功能的调用是通过每个服务的“服务前端”进行调用的。我为每个基础服务只公开了一个类用于应用的调用,其类名形式为“XXXClient”。如应用在调用用户组、用户库或是用户功能本身都是以UserClient类做为入口的。这种方式可使平台使用起来更加的方便,也减少了学习曲线。

重点模块说明

Ø  中心:用于用户登录,如果成功,则获取中心服务发放的票据,并负责对票据进行验证方面的工作。票据的验证是较为复杂的一个设计,它结合了软件使用许可证来对票据的发放进行限制。票据主要用来保护WS调用,WS可自愿选择是否要进行票据的验证。为了安全起见,每个WS对接收的票据都是可被WS自身进行识别,即票据中包含要访问的WS信息,如果信息不匹配则验证失败,自身验证成功后,WS还要询问中心是否发放过该票据。

Ø  容器系统:先解释一下“容器”,用户组和用户来讲用户组是容器;稿件库与稿件来讲稿件库是容器,OK这是一个通用的容器可以用来存放任何东西!一般人多会有疑问,其实它只是一个WS和三个“模板”表。用户组表是模板表的一个实例,稿件库表也是模板表的一个实例,他们具有相同的结构,但每组表的名字是不一样的。在调用WS之前,我们会把业务相关的数据库表及连接信息告诉WS,这样WS便可以通用了!容器系统在这个平台里重用的机率是很高的,如用户库,用户组,稿件库,工作流库等。

Ø  数据库冗余:由于数据库与WS的分离,我们需要对数据库连接信息管理,同时还可以进行数据库的管理等附加的数据库操作,如同构数据库的创建,数据迁移等。所有这些操作可由数据库冗余系统来完成。该模块还有动态配置数据库的效果,同时为数据库服务的健壮提供了一定的支援。

Ø  WS地址冗余:在一个大型的应用中,会有众多的WS,客户端的地址配置工作不是一件让人喜欢的事情,于是提供了此模块,这对大量客户端的部署是非常有意义的。它包括服务地址的注册、管理、查询。其中注册和管理需要平台级权限才可以进行。

Ø  WS辅助:该模块是为了简化WS代理的创建工作而设计的。如加工WS的数据库连接信息、票据信息以生成相应的Soap头,并自动将这些Soap头信息附加到当前WS上去。该辅助对象同时还提供向中心索取当前WS服务地址的方法。

 

这里只对体系结构做一个简单的说明,你会发现没有讲到用户和授权,因为这两个模块相对于其它模块来讲是一种更为具体的应用,当然也属于平台的基础功能模块,可在后面的文章中单独讲这两个东西。

心血的结晶

这些模块有些比较独立,有些则相互依赖。个人感觉层次还算清晰,从有想法要做这样的东西到现在这张图的成形,我在曲折的道路上花了一年多的时间,然而没有12年的从业经验更是不可能做出这样的东西来,每一个模块里面的细节又有谁能体会到呢?如通用数据缓存技术,WS辅助里的泛型及反射的应用等等,每一个模块都是经过无数次的迭代才定型的。

接下来的文章

         要讲的东西很多,我有些担心,什么时候可以将全部的内容写完,或许永远写不完。平台是一个整体性的东西,但又是被分化和独立的多个模块组成。它的内容是可扩展和可替换的。所以没有真正的结束。而文章是可以结束的!

         当然我不会扫大家的兴,我只是想一个人的力量真的很小!在接下来的日子里,我还会为大家提供一些具体模块的设计信息,全部都写下来是不太可能的事,挑一些写吧。还请大家见谅!

Tag标签: .net,架构,platform
posted on 2008-03-24 09:12 李学斌 阅读(8690) 评论(18)  编辑 收藏 网摘 所属分类: 想法、观点透视架构

评论:
#1楼 2008-03-24 09:37 | 毁于随      
关注....
  回复  引用  查看    
#2楼 2008-03-24 09:52 | 无处坏      
支持
  回复  引用  查看    
#3楼 2008-03-24 10:09 | Jeffrey Zhao      
你很像我一个大学同学,呵呵
  回复  引用  查看    
#4楼 2008-03-24 10:12 | appleseeker      
写的不错。支持下
  回复  引用  查看    
#5楼 2008-03-24 10:26 | Clark Zheng      
呵呵,冒下泡

简单瞄了一眼,左边平台实现似乎少了一些横切的东西

  回复  引用  查看    
#6楼[楼主] 2008-03-24 10:48 | 李学斌      
@Clark Zheng
的确在图上没有AOP的东西,一方面是柜架不完善,另一方面平台提供的基础服务目前只有日志会用到,且只是一个辅助功能。平台不是一个开发柜架,只是用于提供基础服务的平台(PaaS)。

在应用集成中有日志的横切。

  回复  引用  查看    
#7楼 2008-03-24 11:15 | Justin      
期待深入
  回复  引用  查看    
#8楼 2008-03-24 12:36 | RicCC      
看的不怎么明白,对“平台总体结构图”而言
1. 有点像一个设计视图,因为有表现层、业务逻辑、服务层之类,但又不象,因为这种层次的设计视图一般是呈现组件结构、应用模块的分层以及与组件的大致关系描述,图中web services一块的内容不是这种设计组件
如果要表达的是这个意思,应该是一个基于组件的基础开发平台,组件应当是侧重开发层面,为开发提供便利的,例如:数据访问、日志、缓存

2. 有点像一个服务集成/开发平台,因为主要的组件元素都侧重在应用功能面上。
如果这样,应当侧重在新的服务如何注册、卸载,服务之间的交互、消息通讯等管理方面。平台提供的服务例如用户、安全,也没有必要表现得这么细,因为对于服务的使用者不会关心服务后面的实现机制和结构
如果不打算对服务进行集中管理,那这些提供的服务仅描述功能和服务使用方式就足够

  回复  引用  查看    
#9楼 2008-03-24 12:50 | Mainz      
BEA有类似的成熟的产品,楼主要达到企业应用的成熟程度估计很难,业务灵活是一方面,效率,安全性,可靠是最重要的。期待楼主继续研究,看到更深入的博文!
  回复  引用  查看    
#10楼[楼主] 2008-03-24 14:22 | 李学斌      
@RicCC
至于图是(或象)“设计视图”还是“组件图”,我也说不好,只是尽可能地将涵盖的内容说明白而已,或许用多张图可能更好,但对于体系结构来讲一张图就可以了。
如果非要和现有的某一个东西做一比较的话,可能它什么也不是,但对于实际应有有效就可以了。我目前清楚的知道他能简化公司所有产品的开发,并允许各产品有高度的自由度。
我反对脱离实际的技术应用与架构。

  回复  引用  查看    
#11楼[楼主] 2008-03-24 14:26 | 李学斌      
@Mainz
我同意您的观点,据我所知BEA好象是做JAVA领域。而且部署成本很高。

  回复  引用  查看    
#12楼 2008-03-24 14:31 | Ray Zhang      
Very good article, thanks Xuebin!
Besides, you also need essential recipes and packages/toolkits to automized what you've done.
Recommend you take a look at
Web Service Software Factory Modeling Edition
Microsoft P&P have done similar job with you.
Wish it helps.

  回复  引用  查看    
#13楼[楼主] 2008-03-24 15:02 | 李学斌      
@Ray Zhang
谢谢。
Web Service Software Factory我了解过,如果WCF没有推出的话,我会考虑使用这个东西的。

  回复  引用  查看    
#14楼 2008-03-24 16:49 | 长空新雁      
支持楼主,希望楼主能将他写完
  回复  引用  查看    
#15楼 2008-03-24 20:04 | airwolf2026      
暂时还看看不懂,这么深的东西哈.倒是好奇那个图是怎么画的?用什么工具?(脸红)
  回复  引用  查看    
#16楼[楼主] 2008-03-25 08:34 | 李学斌      
@airwolf2026
PowerPoint

  回复  引用  查看    
#17楼 2008-03-25 22:44 | 行知      
真巧,我也正走在从项目到平台的路上,你的文字给我很多启发。希望能更多的交流。
  回复  引用  查看    
#18楼 2009-01-30 23:25 | JacksonLin      
.......
  回复  引用  查看    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1119131




相关文章:

相关链接: