zoukankan      html  css  js  c++  java
  • 平台架构用户系统

     为什么要做用户系统

    几乎每个应用都会用到用户系统。如果能够进行通用化,自然是一种很快意的事了。然而到目前为止我还没有找到一个让我满意的类似的东西。不是说它们不够好,而在于它们不能满足管理和部署上的可伸缩性、灵活性及与现有应用的可集成性上,所以只好自己做了一个。

    用户系统的组成

    用户系统在设计上是有三部分组成的,用户基础信息管理、用户库管理、用户组管理。大家可能会对“用户库”和“用户组”感到疑惑,觉得不应该同时出现这两个东西,或者只用一个就可以了。然而这是为了满足“可伸缩、灵活”特征而特意设计的。下面分别就这三部分做一个说明。

    用户基础信息,没有特别的,为了实现单点登录,以使各种不同的应用进行统一的用户登录验证,我们只提供简单的登录名、密码、昵称等信息。这些信息存储在中心库上。我们可以指定管理员来对整个用户数据进行管理,这对一般的应用来讲就可以了,但当一个大型的企业,每个部门都可以对自己部门进行独立的人员管理,这时就需要扩展我们的设计。

    为此我提供了用户库,总部可以创建用户库,然后对用户库进行授权,让各部门管理各自的用户库,这样就实现了用户管理的独立性和伸缩性。用户库只能用于新建、编辑、删除用户,不能做其它的事情。用户库(实际上是一个表)的存储也位于中心库上。需要注意的一点是,用户库是属于平台管理的范畴,不属于某一特定的应用。

    用户组只是多个不同用户或用户组的集合,用户组中的用户可以来源于任何一个用户库。它只能添加或移除用户,而不能“新建”和“删除”用户。这一点非常重要,否则用户系统的管理会非常的混乱。用户组的一个重要应用是建立一个“稳定的授权模型”,以简化管理员的工作。

    用户组的复杂性和伸缩性远远超出了用户库的设计。主要有两点:

    用户库中的数据不需要分布式存储,而用户组却需要。用户组可以有平台级的管理范畴,同时每个应用系统又都可以管理各自的用户组数据。全部将这些数据进行集中存储是不科学的,会给中心带来不必要的数据库维护任务,最好的做法就是各应用存储在各应用自己的系统库中,这就要求用户组的存储是分布式的。

    用户库之间是平等的,而用户组之间的关系是交叉的。用户库没有父级用户库的概念,大家都是平等的。而一个用户组可能属于多个用户组。

    设计要点

    用户系统的设计总体上贯彻平台架构中讲到的“应用与WS分离”及“WS与数据库分离”两条宗旨。用户组的分布式存储便是一个很好的应用,我们只有一个用户组相关的WS便可以操作分布在不同位置上的数据库。

    其实用户组WS和用户库WS是用的同一个WS,这就是我要给大家讲的容器系统。“容器”系统是抽象后的概念,我定义它可以管理三种结构的数据形态。

    一、一维结构。容器之间是平等的,没有包含与被包含之分,如用户库系统。

    二、树结构。每个容器可以有一个或零个父容器,如各种分类信息。

    三、多父结构。每个容器可以有多个或一个或零个父容器,但不能形成循环,如用户组系统。

    为了使用容器系统,我们必须要遵守一定的规范。

    一、用容器系统提供的模板数据表进行应用数据表的创建,这里对用户库系统为每个创建的数据表名称冠以“UserLib”前辍,为每个用户组系统创建的数据表名称冠以“UserGroup”。

    二、使用平台规范的自定义DBInfoSoapHeader,进行数据库信息的传递,这个类中除了包含数据库连接信息之外还提供了表名称前辍字段。这样才能在中心数据库中即能访问用户库数据又能访问用户组数据。当然对用户组来讲应用系统库中也存在着用户组数据。

    用户系统中另一个共用的设计是有效时间,它允许限制用户及用户组在某一时间段内的可用性。有效时间模块用一个WS来表示,但他不直接被客户端使用,而是作为父类被其它类继承。这是因为有效时间在意义上不能是一个独立系统,另外一个重要原因在于提高系统的性能,以减少不必要的WS服务之间的访问开销,及提供事务处理功能。

    我们在进行用户管理时,会经常用到“删除用户”的功能,但这个功能在用户系统中会有些麻烦。用户系统是服务于多个应用的,当删除一个用户时,与用户关联的应用数据会形成“孤儿”!如何防止此问题的发生呢?

    数据依赖系统是解决此问题的专用模块。用户系统是不了解应用的业务逻辑的,这件事情只能由应用自己去处理关联的数据。不同的应用将关联关系注册到数据依赖系统中,在进行用户删除时,用户系统查询数据依赖系统中与用户关联的注册。如果存在注册,则调用所注册的处理单元,等到所有的处理单元都成功处理才能将此用户进行删除;如果没有注册,则直接进行用户的删除。不过因为时间关系,目前数据依赖系统并没有实现!只能将不需要的用户先暂时禁用了。

    这里只是讲了用户系统的技术点,要让用户系统更方便的使用还要涉及到平台中的其它内容,如数据库冗余系统,WS地址服务系统等。

    注意的问题

    一、用户信息的扩展。

    在平台用户系统中,用户信息是以保证用户能够实现统一用户验证而设计的,这同时也说明他不能全面的说明用户的基本情况,尤其是一些专业领域的系统。如银行及保险中的用户家属信息,社交网站中的兴趣爱好等。对于这些信息需要由外部应用自身来扩展。为了有好的用户体验及提供很好的集成性,用户系统提供一个“用户详细信息”的事件供应用来实现。

    二、基于.NET的使用。如果应用使用.Net进行开发,那么用户只需要使用CommonWare.Dll文件就可以了。这里面已经封装了很好的客户端相关的实现。它体现了“应用与WS分离”的设计理念。

    三、基于跨平台的使用。如果应用不是使用.Net进行开发,那么只好进行WS的直接调用了。
     

    相关文章

    平台我的编程人生à产品à项目

    平台架构——体系结构

  • 相关阅读:
    PHP实现无限极分类
    html2canvas生成并下载图片
    一次线上问题引发的过程回顾和思考,以更换两台服务器结束
    Intellij IDEA启动项目报Command line is too long. Shorten command line for XXXApplication or also for
    mq 消费消息 与发送消息传参问题
    idea 创建不了 java 文件
    Java switch 中如何使用枚举?
    Collections排序
    在idea 设置 git 的用户名
    mongodb添加字段和创建自增主键
  • 原文地址:https://www.cnblogs.com/llxxbb/p/Platform_UserSystem.html
Copyright © 2011-2022 走看看