多层技术架构
此电商系统构建于Windows系统平台,采用分层提供服务支持的设计思想,将系统划分为数据库层、基础服务层、业务表现层和系统接口层。系统对每一层定义明确的功能接口,同时在层次内实现组件化的接口实现。层次化、模块组件化的实现,使系统具备了程度的灵活度,从而能对业务需求的变化作出快速的反应,使系统具有很好的扩展性。 整个电商系统的层次划分,系统从底部的数据库层开始,一层一层的向上提供接口服务,终实现用户按业务要求的可见操作界面和其他系统接口。各层次专著于自身功能的接口实现,整个层次保持相对的稳定。系统通过不改变接口,各个层次、各个组件进行优化的策略,能在不影响整个业务的前提下,不断的完善和改进。
一、数据库层
对于平台中的所有应用,都存在着各种各样的配置信息、业务数据、系统运行状态等信息。数据库层对这些数据信息本身进行归档,提供快速查询的底层接口,并保证数据的完整性、可靠性。
在数据库方面,我们采用Oracle 或者是 MsSQL。这两种数据库分别有不同的适用环境。
1、Oracle
◆ 适合大型的电商系统应用。
◆ 能使用所有的平台功能。如访问量排行榜、降价排行榜、销售排行榜、访问量统计等等,就以往的经验来看,这些功能每天要处理的数据都会超过一千万。这种数据量如果使用传统的统计方法,统计一次的时间就可能会以天来计算了。如果使用Oracle,再配合我们专门对Oracle进行优化的高效率的统计程序,那么只需十数秒便可完成。
◆ 此外,如果只用一台数据库无法应付日益增长的服务器访问量,可以使用Oracle RAC(真正应用集群),通过增加数据库服务器进行集群。
2、MsSQL
◆ 适合中小型的电商系统应用。
◆ 无法使用平台一些高级应用,如排行榜、统计分析、MIS系统对接等。这是由于MsSQL设计上强调访问速度,牺牲了一些数据库的高级功能,虽然用程序也可以实现这些功能,但是在性能上无法满足需求。
二、中间件层
中间件层主要是平台使用的Windows中间件,包括平台使用到的应用服务器和中间件技术。
(一)、应用服务器
应用服务器为Windows平台实现,基础服务层和应用层、业务层都是建立在应用服务器之上。
电商系统在设计上遵循微软公司提出的C#规范,这样能够尽可能的保证在不同的Windows应用服务器中进行移植。
(二)、中间件技术
本着重用的设计原则,在一些功能中采用了已有的成熟技术,这些都是经过实践考验的中间件。主要以C#标准包和开源项目为主,大部分都针对系统作了相应调整,以便适合系统的需要。
三、基础服务层
基础服务层构建于Windows平台之上,借助于中间件的接口服务,提供电商系统所需要的通用服务接口组件。系统将提供以下主要的服务接口支撑不同业务需求的实现。
◆ 栏目管理模块:
栏目是一个抽象资源对象,是一种特殊的内容类型。栏目可以表示产品、新闻信息类别、资源节点、导航栏的项、菜单中的项等等。栏目是一种组织管理型的资源。
对于大型电子商务系统,栏目的节点是个非常大的数字,这对电商系统栏目树展示的速度和性能有极高要求。考虑到以上原因电商系统采取了栏目对象缓存策略,同时对于页面节点的呈现通过动态JavaScript输出的技术,从而使系统能很好的支持上万个栏目数据节点操作管理。能平滑、高效的展示树型风格的栏目结构。
◆ 用户权限管理模块:
大型电子商务应用系统有用户多,模块多,权限多的特点,因此必须采用分组的用户管理系统,并设置一个具有高权限的管理员,负责对整个系统用户设置,为每个用户角色、用户指定不同的权限,依照不同的权限在系统中可以使用不同的功能。
系统设置了Administrator用户组,并设置了root这个具有高权限、不可删除的用户。您可以根据您的需要使用root这一个管理员用户。管理员可以创建、编辑和删除用户组,您可以根据您的需要给每个用户组合理的权限划分,并给每个用户组添加、编辑和删除用户。用户登录系统后,系统会根据该用户的权限提供相应的功能,并对用户的每个操作检查用户的使用权限。
系统采用Window用户权限的思想,将用户、用户组的权限通过各个栏目节点进行绑定,在各个栏目节点上实现继承与非继承的设置管理,从而使管理员可以进行灵活的配置。
针对以上的情况,系统进行了一个数据抽象,定义了一套属性管理组件,可以方便、有效的描述相关的需求情况,同时对于存在共性描述的对象采用继承模式来描述,从而很好的表现一个事物对象的特征。
◆ 继承性管理模块:
继承是面向对象接口特性之一。考虑到抽象事物的通用性,系统通过一个通用的对象继承模型接口,对所有需要实现继承的功能提供基础的支持。从而提高系统的重用性和降低系统的偶合度。
◆ 日志服务管理模块:
日志是一个成熟的电子商务应用系统所必备的功能。日志可以用于数据统计,为系统其他功能提供初始数据;用于查看一个对象的修改历史记录,用于方便追踪对象的修改状态和明确事务责任。
◆ 缓存服务管理模块:
页面访问的时候,生成动态 Web 页会耗用各种各样的系统资源。当 Web 服务器收到页面请求时,它通常必须从数据库或其他存储系统中实时的检索所请求的信息。对这些资源的访问通常需要通过有限的资源池(如数据库连接、套接字或文件描述符)进行。因为 Web 服务器通常需要处理很多并发请求,所以对这些共享资源的争夺可能会延迟页面请求,直到资源变为可用。在将请求发送后,仍然必须将结果转换为 HTML 代码以便进行显示。
使系统速度更快的一种显而易见的方法是购买更多、配置更好的硬件。此方法可能很吸引人,因为硬件便宜,而且不必更改程序,但更多的硬件只能在未达到其物理限制之前才会对性能有所帮助。系统中实施缓存管理,是一个有效的解决方案。
系统中存在两中缓存对象:
1、 C#对象缓存:对于一些经常被使用的Java对象保存于规定的内存空间,通过配置的更新规则,同步更新数据库内容。
2、 前台页面缓存:对于前台的html页面按不同的块来区分,然后通过一个key对象,通过开源JCS技术存储于内存或磁盘空间。
对于并发访问的页面请求,通过页面的缓存可以极大的减少对紧缺资源(数据库连接)的调用,减少访问响应的时间,从而提高系统的访问速度和整体性能。
◆ 集群模块:
集群目标:
1、 支持更大的访问量,并且可以随着访问量的增加可以通过增加服务器的方式很容易的增加处理能力,而不增加用户的访问时延。
2、 提高系统稳定性,提供几乎永不停机的服务质量。即使某一台服务器软件或者硬件崩溃系统仍然能对客户提供服务。
平台集群实现了以下功能:
1、Session复制
使用应用服务器自带的Session复制功能。
2. Cache复制和更新
平台的Cache分成两类,页面Cache和对象Cache。页面Cache我们现在采用jcs包。Jcs包中带有Cluster功能,能够将Cache内容复制到整个集群的服务器中。该功能需要满足以下条件:
3. 上传文件的共享
我们采用共性文件形式的文件共享,主要使用磁盘阵列技术,简称RAID(Redundant Arrays of Inexpensive Disks)。磁盘
阵列是由一个硬盘控制器来控制多个硬盘的相互连接,使多个硬盘的读写同步,减少错误,增加效率和可靠度的技术。
磁盘阵列有以下优点:
1)传输速率快;
2)储存容量可提升;
3)提升I/O每秒的数量;
4)增加数据安全性及稳定性;
5)大量数据快速及简易管理;
6)增加可用运时间,减少维护;
7)通过磁盘阵列,可以将不同服务器上传的文件统一管理。
4. Cookie的共享
采用负载均衡器使得多台服务器对外有相同的IP这样就能使所与的服务器都能共享Cookie。同时采用这个方案还能保证系
统的高可用性。具体可参照下一点。
5. 高可用性
我们建议采用负载平衡器,负载均衡器可以根据实际的响应时间制定优先级交付决策,从而实现高性能、智能化流量管理,达到佳的服务器群性能。采用第七层应用控制还可以减少通信高峰期的错误讯息,因为差错控制和流量管理技术可以侦测到一些错误信息,并透明地将会话重定向到另一个服务器,使用户顺利地进行使用。例如,服务器A不可用或者数据库出现错误,错误信息将会返回到负载均衡器上,然后会将客户的访问指向服务器B或者将消息重放到其他数据库中去,整个过程对用户是透明的。
将内部的多个私有IP的服务器,对外映射成一个相同的IP。而且当其中某台服务器Down掉的时候,负载均衡器将不会将
这个服务器映射出去。
6. 数据库集群
如果数据库是用Oracle的话,数据库集群可以采用Oracle RAC。基于RAC的电子商务应用的用户或者中间层应用服务器客
户,可以通过虚拟数据库服务名连接到数据库上。Oracle在集群中多个节点之间自动平衡用户负载。不同节点上的Real Application Clusters数据库实例预订所有数据库服务或者部分子集数据库服务。这使得DBA高度灵活地选定,连接到特定数据
库服务的特定应用程序客户是否可以连接到某些或者全部的数据库节点。RAC在工作期间,每个节点可以单独的被使用并且被应
用程序负载均衡。如果发生意外,如一个节点的失败,可以实现节点的失败切换,保证数据库24*7的高可用性。
虽然每一个节点有一个不同的物理IP地址时,应用客户仍可以在一个逻辑数据库服务名的水平上进行连接。因此客户端对
于不相关的事情如多服务器的多个地址可以毫不关心。
◆ 任务调度模块:
对于电子大型的成熟的电子商务平台系统,每天都有很多特定的数据需要进行分析或处理(比如:每天都有大量的邮件需
要发送)。对于大数据量、高数据运算的处理功能,往往不希望在系统繁忙的时间进行处理。
针对这种状况,系统采用Jcrontab提供的基础服务,通过Jcrontab接口的扩展,实现对系统自动执行的任务灵活的、人性
化的配置。管理员可以根据系统的实际情况,配置相应的系统任务来执行。