多层分布式设计模式

  原来就想写一些关于分布式的设计。正好目前开发的GIX4项目中,需要对客户端的许多操作进行记录。这个功能的设计或多或少能说明,一般情况下,多层的分布式系统应该如何设计。现在我就对这个功能进行描述。

 

功能描述

    GIX4项目中有个审核日志记录功能,它需要以下功能:

    需要把客户的所有操作记录下来,以便支持审计。如,当用户进行:登录、打开模块、查看数据、点击按钮……等操作时,把相关的数据全部在服务器的数据库中记录下来,这些数据有:操作类型、操作时间、操作内容、操作者、客户端机器名等。

    在服务端对某些特定的事件进行记录,如:计算出错。

 

设计目标

    这个模块需要支持以下目标:

    *为客户端代码、服务器端代码都提供简单统一的接口。

    *需要异步记录。

    *如果扩展为多级物理层时,也需要使用相同的接口。

 

设计

    先把设计完成的图贴出来,然后再逐一描述:

图1 全部类图

通用部分

    首先,API设计之初,先根据需求,定出使用的接口。它们包含两个类:一个是贫血数据类AuditLogItem,一个是对AuditLogItem进行操作的静态类AuditLogService。AuditLogService暂时公布两个静态方法,一个记录日志方法Log(),另一个方法是异步记录LogAsync()。如下:

    由于各物理层都使用AuditLogService的方法,而实现不同。这里把使用了Provider模式,提取接口IAuditLogProvider,这里就不再需要异步方法了:

/// <summary>
/// 审计功能提供程序
/// </summary>
public interface IAuditLogProvider
{
    /// <summary>
    /// 记录指定的日志
    /// </summary>
    /// <param name="log"></param>
    void Log(AuditLogItem log);
}

    除了最终与数据库通信的服务器外,其它节点都默认使用ClientAuditLogProvider作为提供程序。此提供程序使用了ICommunication,而ICommunication则是负责向“下一节点”通信并提交日志记录功能。

GIX4实现部分

    这部分主要是两个类:ServerAuditLogProvider 和 CSLACommandCommunication。

    ServerAuditLogProvider 使用CSLA的类库把AuditLogItem转换为相应的数据库模型存入数据库中:

public class ServerAuditLogProvider : IAuditLogProvider
{
    public void Log(AuditLogItem log)
    {
        var dbItem = AuditItem.New();

        dbItem.Title = log.Title;
        dbItem.Content = log.Content;
        dbItem.User = log.User;
        dbItem.MachineName = log.MachineName;
        dbItem.Type = log.Type;
        dbItem.LogTime = log.LogTime;

        dbItem.Save();
    }
}

    CSLACommandCommunication 则是使用WCF和CSLA命令模式作为基础框架,让当前节点把请求发送给下一节点,下一节点接到请求后,使用本节点的提供程序Provider来处理请求。其中重要的代码在内部类AuditServerCommand中,如下:

[Serializable]
public class AuditServerCommand : Csla.CommandBase
{
    private AuditLogItem _logItem;

    public AuditServerCommand(AuditLogItem logItem)
    {
        if (logItem == null) throw new ArgumentNullException("logItem");

        this._logItem = logItem;
    }

    protected override void DataPortal_Execute()
    {
        //server log
        AuditLogService.Log(this._logItem);
    }
}

 

整个过程

    整个过程其实很简单,一图胜千言:

 

后记

    其实本次设计过程的思路很简单:分析要提供的API(场景驱动)、分析分布式实现的差异、编写基础部分、编码与重构。

    其实熟悉CSLA的人应该知道,它里面的通信机制也是采用了类似的方式实现的。所以这应该算是一种分布式的设计模式吧。 :)

时间: 2025-01-29 15:54:15

多层分布式设计模式的相关文章

DELPHI多层分布式开发(1)

分布式多层数据库开发简介 Delphi提出的MIDAS(Multi-Tier distributed Application Services Suite多层分布式应用服务器组),是把原来Two- Tier数据连接放到了服务器端 的COM组件上,客户端只剩下了执行文件和MIDAS.DLL,前台和服务器上的COM组 件,通过DCOM机制互相沟通. 这个多的一层,称为应用程序服务器(Application Server),或者称为中 间件.这种多层分布式工作机制,主要基于这样几点考虑: 1) 减少客

DELPHI多层分布式开发(2)

客户端实现SQL查询 由于在客户端不存在TQuery控件,似乎客户服务器模式是无法做SQL查询的. 但是,Delphi很好的解决了这个问题.事实上,只要客户端连接上服务端应用程 序,客户端的TClientDataSet就包含了一个名字为Provider的属性,对应到服务器端DataSetProvider的所有默认属性和方法,其中DataSetProvider有一个 Options属性,只要让其中的poAllowCommandText=true,那么, DataSetProvider的poAllo

基于中间件技术的多层分布式系统的研究

1 引言 分布式系统的信息处理分布在许多计算机上而不是局限在单一机器上.目前一般类型的分布式系统体系结构可以分为两种.一种是客户机 / 服务器( C/S )体系结构,它由客户端提供用户界面.运行逻辑处理应用,而服务器接受客户端 SQL 语句并对数据库进行查询,然后返回查询结果.C/S 结构曾给人们带来许多便利,但随着业务处理对系统提出更高要求以后,它也逐渐暴露出其客户端逐渐庞大和服务器负担过重的缺点,如灵活可扩展的工作流定制.保证数据在网络传输的稳定性和准确性.应付峰值数据的高负荷处理和平衡负载

两种设计模式在EJB开发中的应用

摘要:本文介绍了J2EE的分层结构,深入研究了如何使用Session Facade模式和ValueObject 模式设计EJB,并对其开发过程做了较详细的说明. 关键字:EJB ;值对象模式;会话外观模式 一.概述 与传统的二层体系结构相比,J2EE有两个特点: 1.定义了一套标准化组件,通过为这些组件提供完整的服务. 2.使用多层分布式的应用程序模型.应用程序的逻辑根据其实现的不同功能被封装到不同的组件中.如图1所示. 这种多层结构使企业级应用具有很强的伸缩性,允许各层专注于某种特定的角色:

扬扬的J2EE学习笔记(一)概述

j2ee|笔记 扬扬今天开始学习J2EE啦! 目标:尽可能在最短时间内,把J2EE体系结构相关了解个大概,以后再慢慢往深处学习. 加油!加油!!加油!!!一.分布式的多层应用程序 图1 分布式的多层应用程序 J2EE平台使用多层分布式的应用模式.应用逻辑根据其功能分成多个组件,各种不同的应用组件构成分布在不同的依赖于层的机器上的J2EE程序.位于不同层的组件有: ☆ 运行在客户机上的客户层组件 ☆ 运行在J2EE服务器上的网络层 ☆ 运行在J2EE服务器上的逻辑层 ☆ 运行在

数据访问接口体系及数据对象模型探讨--[1]

对象|访问|数据|体系 数据访问接口体系及数据对    数据访问接口体系及数据对象模型探讨(Beat 1.0)                          81_RedStar81@163.com  TomHornson.student@www.sina.com.cn 个人文集: http://www.csdn.net/develop/author/netauthor/RedStar81/       文章索引: 预:概念 序言:回首历史 一. 数据访问接口体系探讨 1.       Op

基于.Net Framework的N层分布式应用开发

分布式 主题:建立可维护.可扩展的站点,开发高效率.高伸缩性的应用程序.创建N层分布式应用程序.实现跨平台.跨Internet的应用集成,是摆在无数开发者面前的任务.传统开发方式及技术面临了困难. .Net Framework推出的许多新技术为上述任务的实现提供了相对简单的解决方案.其中,基于SOAP的Web Service在处理分布式应用时具有比传统的DCOM/CORBA明显的优点,结合基于Web的ASP.NET页面开发技术和SQL Server数据存储技术(或Xml文档),在.Net下开发N

动态业务工作流引擎Superflow研究概要

第一章 背景及目标 本人研究了多年的工作流引擎技术,作为研究成果的Superflow,已经有许多成熟的应用.我愿意把这些点滴的积累奉献出来,与大家共享作学问的乐趣与辛酸. 有人说,35岁一个程序员的暮年,我今年36了,才刚刚领悟到程序人生的真谛. §1-1 研制背景 企业的运作过程本质上是人.财.物等资源的优化和配置,形式上无一不体现为信息流.资金流.物流.价值流等合理的流动:随着社会分工的日益具体化,合作已成为主题,合作的体现形式必然是一个完整而高效的工作流程:有管理的企业的活动过程必然是有序

EJB技术的数据库应用

一.J2EE 技术简介 J2EE是 SUN 公司提出的在分布式环境中的一种体系结构,它提供了一种基于组件的设计.开发.集成.部署企业应用系统的方法,J2EE平台提供了多层分布式的应用系统模型.重用组件的能力.统一的安全模型和灵活的事务控制.基于组件的J2EE企业应用系统具有平台独立性,所以不受任何软件产品和任何软件厂家API的约束. J2EE定义了下面的组件: ·application client 和 applets 是客户层组件: ·Java Servlet 和 JSP 组件是WEB 层组件