《Saas公共服务平台架构及实现毕业论文.docx》由会员分享,可在线阅读,更多相关《Saas公共服务平台架构及实现毕业论文.docx(24页珍藏版)》请在三一办公上搜索。
1、Saas公共服务平台架构及实现毕业论文1. SaaS介绍 1.1 SaaS概念 SaaS是Software-as-a-service(软件即服务)的简称,是随着互联网技术的发展和应用软件的成熟,而在21世纪开始兴起的一种完全创新的软件应用模式。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。 用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,
2、软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。 在这种模式下,客户不再像传统模式那样花费大量投资用于硬件、软件、人员,而只需要支出一定的租赁服务费用,通过互联网便可以享受到相应的硬件、软件和维护服务,享有软件使用权和不断升级,这是网络应用最具效益的营运模式。 1.2 SaaS 专用名词 1.多重租赁(Multi-tenancy) SaaS的多重租赁概念就是,多个公司将其数据和业务流程托管存放在SaaS服务商的同一服
3、务器组上,相当于服务商将一套在线软件同时出租给多个公司,每个公司只能看到自己的数据,由服务商来维护这些数据和软件。也就是说,多个公司登录到同一网站,但登录后看到的界面和数据,不同的公司大不相同。 2.单点登录(Single sign-on) 这个概念应用在SaaS上,就是指把多个不同的在线应用软件服务搭建成为一种新型的整合服务。用户通常只需要登录一次就可以使用集成好的应用软件组合。 3.基础架构平台(Platform infrastructure) 有时候SaaS的拥护者希望出现一种基础架构的平台来推动SaaS更好地发展。 这是因为首先得有一个平台来支撑SaaS软件应用程序的运行,如今最著名的
4、是国外Salesforce公司的APP Exchange平台,国内800CRM的800APP Native的平台与Salesforce兼容。 4. SaaS(软件作为服务) 厉害的SaaS销售代表直接用SaaS就能解决你所有管理软件问题。比起其它软件,SaaS软件更便宜,灵活性更强,能省掉更多的麻烦。 5 SaaS成熟度模型 (1)Level1:定制开发 这是最初级的成熟度模型,其定义为Ad Hoc/Custom,即特定的/定制的,对于最初级的成熟度模型,技术架构上跟传统的项目型软件开发或者软件外包没什么区别,按照客户的需求来定制一个版本,每个客户的软件都有一份独立的代码。不同的客户软件之间只
5、可以共享和重用的少量的可重用组件,库以及开发人员的经验。最初级的SaaS应用成熟度模型与传统模式的最大差别在于商业模式,即软硬件以及相应的维护职责由SaaS服务商负责,而软件使用者只需按照时间,用户数,空间等逐步支付软件租赁使用费用即可。 (2)Level2:可配置 第二级成熟度模型相对于最初级的成熟度模型,增加了可配置性,可以通过不同的配置来满足不同客户的需求,而不需要为每个客户进行特定定制,以降低定制开发的成本。但在第二级成熟度模型中,软件的部署架构没有发生太大的变化,依然是为每个客户独立部署一个运行实例。只是每个运行实例运行的是同一个代码,通过配置的不同来满足不同客户的个性化需求。 (3
6、)Level3:高性能的多租户架构 在应用架构上,第一级和第二级的成熟度模型与传统软件没有多大差别,只是在商业模式上符合SaaS的定义。多租户单实例的应用架构才是通常真正意义上的SaaS应用架构,即Multi-Tenant架构。多租户单实例的应用架构可以有效地降低SaaS应用的硬件及运行维护成本,最大化地发挥SaaS应用的规模效应。要实现Multi-Tenant架构的关键是通过一定的策略来保证不同租户间的数据隔离,确保不同租户既能共享同一个应用的运行实例,又能为用户提供独立的应用体验和数据空间。 (4)Level4:可伸缩性的多租户架构 在实现了多租户但单实例的应用架构之后,随着租户数量的逐渐
7、增加,集中式的数据库性能就将成为整个SaaS应用的性能瓶颈。因此,在用户数大量增加的情况下,无须更改应用架构,而仅需简单的增加硬件设备的数量,就可以支持应用规模的增长。不管用户多少,都能像单用户一样方便地实施应用修改。这就是第四级也是最高级别的SaaS成熟度模型所要致力解决的问题。 5.独立软件开发者 开发软件的个人或者公司,ISV通过平台来出售自己的软件 6.软件入口 ISV出售软件时,提供给用户使用的接口,即ISV开发的软件的进入网址。 7.创建子版本 ISV根据软件的功能,版软件分成几个不同的子版本,用户可以根据所需运用购买不同的版本,其工作有isv完成 8.租户 购买了软件的个人或者公
8、司。 9.注册序列号 isv注册软件时获得的序列号,是isv软件唯一不可变更的序列号,可不计入数据库,单必须保存在isv软件的配置文件中。 10.免登陆 由平台跳到isv软件时,不需进行再登陆,isv软件根据传过来的用户信息,直接初始化用户信息。 11.Token 身份验证令牌,在saas平台跳到isv软件时使用,用于验证跳转用户的合法性。Token动态生成,为了安全,其生命长度只有10-20秒。 12免登入接口 由平台提供的一组验证程序,修改其中的注册序列号后绑定到isv软件,以实现用户的免登入。 13参与的软件 不是自己购买开发的软件,而是由别人购买并添加,其所有软件显示为参与的软件。 1
9、4AssP 软件互联平台,在这既SaaS平台 2 SaaS平台功能 2.1 软件注册 2.1.1 业务流程图 注册用户点击注册软件填写软件信息和软件入口失败提交成功在用户开发的软件列表添加此软件,获得序列号在用户软件上绑定软件序列号失败调试软件成功平台管理员审核软件成功失败软件上架,进入商场结束进入开发的软件编辑软件信息图1 软件注册流程图 2.1.2 业务详细说明 用户先注册一个平台的帐号,登录后,点击我的软件进入,后点击注册软件,填写相关信息,提交成功后,会产生一个软件注册序列号,此序列号为核对客户软件的凭证。最后还需通过平台管理员审核,该软件才会出现在软件商城中,才可供平台用户购买。 2
10、.1.3 功能描述 注册软件主要是用于给想在该平台上出售软件的第三方客户提供软件入口,同时填写软件相关详细信息,图片,类别等。 注意:注册软件时需要客户填写软件入口,即客户所提供软件的发布网址,当平台上的客户购买了软件后,点击进入使用时,将通过该软件入口进入软件。 2.1.4 用例图 软件审核查看软件信息审核软件平台管理员删除软件图2软件审核用例图 注册软件注册信息获得序列号注册用户绑定序列号图3注册软件用例图 2.2 软件编辑 2.2.1业务流程图 开始编辑子版本获得子版本序列号绑定序列号软件上架结束图4软件编辑流程图 2.2.2业务详细说明 软件注册成功并通过审核后,即可在我的软件中查看,
11、编辑或删除该软件信息,同时还可为软件进行版本分类,可创建,查看,删除子版本。 2.2.3功能描述 在我的软件中可查看,编辑,删除该软件信息,同时还可为软件进行版本分类,可创建,查看,删除子版本。 2.2.4用例图 编辑软件查看子版本创建子版本软件开发者编辑软件信息删除软件图5软件编辑用例图 2.3软件购买 2.3.1业务流程图 注册用户进入软件商城点击购买某软件,进入购买页面选择购买版本填写购买授权个数和年限点击取消确定购买是否已经购买没有购买成功进入购买的软件进入添加用户是已添加的用户个数授权个数?有否进入续费页面,添加授权个数用户是否存在否添加用户,把用户添加到相应软件中注册用户否授权期限
12、未到?是进入续费页面,添加授权期限进入使用结束图6软件购买流程图 2.3.2业务详细说明 用户在软件商城可查看所有平台已通过审核的软件,若用户已登录并未购买过该软件,则可点击购买进行购买软件;点击查看详细信息,可查看软件的详细信息,点击购买可进行购买,若此用户已购买过该软件则会提示已购买并跳到购买的软件页面,用户可点击进入使用,若此用户未登录,则提示请先注册并登录。 添加用户: 若租户购买的授权个数大于1,则可添加其他用户使用软件,添加用户有两种方式: 1. 若用户已存在,即添加已在平台上注册的用户,则可通过注册时填写的电子邮件地址进行查找,并添加,添加成功后,对方即可在参与的软件中使用该软件
13、。 2. 若用户不存在,即添加还未在平台上注册的用户,则可通过创建新用户来进行添加,并把创建的信息告知对方,对方即可在参与的软件中使用该软件。 若不在想让某用户使用该软件,可通过删除操作来删除。 续费: 租户可根据仅追加使用授权个数,仅追加购买授权期限或同时追加个数和权限来进行续费 2.3.3功能描述 软件商城显示所有注册了并通过审核的软件,平台上已注册并登录的用户充值后可选择相应的软件根据授权个数和授权时间进行购买。购买成功后即可在购买的软件中查看并使用,同时还可进行续费,添加用户等操作。 添加用户用于租户添加自己所购买软件的使用人员,也可根据需要进行删除。 注意:授权个数即可使用该软件的人
14、数,客户购买了软件后即成为租户,租户可通过添加用户操作添加用户。 授权时间即该软件可使用的时间,若租户想增加授权个数或增加授权人数,即可通过续费来完成。 2.3.4用例图 购买软件查看软件信息注册用户购买软件添加用户续费图7软件购买用例图 2.4参与软件 2.4.1业务流程图 无业务流程图。 2.4.2业务详细说明 通过软件购买中的添加用户可添加用户,成功后,用户点击参加的软件中相应软件的进入使用,可使用包括自己购买的和通过其他租户添加进去使用的软件 2.4.3功能描述 参加的软件中显示用户可使用的软件列表,包括自己购买的和通过其他租户添加进去使用的软件 2.4.4用例图 参与的软件使用软件软
15、件参与者图8参与软件用例图 2.5账户与个人信息 2.5.1业务流程图 无业务流程图。 2.5.2业务详细说明 用户可根据需要查看余额,进行充值,查看个人信息,修改密码等 2.5.3功能描述 帐户与个人信息可查看用户的余额,可进行充值,查看个人信息,修改密码等操作 2.5.4用例图 系统修改密码注册用户个人充值查看个人信息图9帐户与个人信息用例图 02.6 SaaS平台免登陆接口 2.6.1业务流程图 用户请求登陆SaaS软件,平台对SaaS软件传参数SaaS软件对CheckLogin.aspx请求访问调用接口判断请求接口的名称未找到相应的接口名 返回调用未声明接口的错误信息存在此接口名称 获
16、取请求的参数请求的参数不完全或为空 返回需要请求参数为空的参数信息调用接口的参数全部获取 判断请求信息是否超时重传调用接口的Token已经超时 返回超时重传的错误信息Token未超时 判断请求参数信息的合法性根据参数计算的sipsign不符合要求 返回不存在或非法的参数错误信息计算的sipsign符合要求 处理接口调用请求,返回结果数组图 1-6-1 免登陆接口的处理流程 2.6.2业务详细说明 用户请求访问购买的SaaS软件: 用户请求使用用户购买的SaaS软件时,平台会将用户ID(User_ID), 软件ID(Application_ID), 购买此软件的租户ID(Renter_ID),
17、防止重传的Token 这4个参数传值提供软件提供商提供的网址。同时将此时生成的Token序列和时间与访问的用户id,软件id一起保存在数据库里,Token的有效时间理应当设为10秒到20秒左右。 SaaS软件访问CheckLogin.aspx 调用免登陆接口: SaaS软件在注册时候会获得一个独有的软件序列号,软件提供商在软件开始运行的代码中加入请求,访问平台判断此用户和本软件是否是合法的软件和用户,SaaS软件应该将软件序列号,时间戳,请求的接口名,与传送过来的四个值用md5加密生成一个新的sipsign的值,再把sipsign,时间戳,请求的接口名和传送过来的四个值传给平台的CheckLo
18、gin.aspx页面请求调用免登陆接口。 图 1-6-2 sipsign验证的生成 图 1-6-3 请求接口的URL 判断请求接口的名称: 请求接口理应当分为很多类型,所以在处理页面上应当做分类处理,当然目前只实现的免登陆接口,但为了以后的扩展这种业务流程上的判断不能少。如果不存在此名称的接口,则返回一个错误信息。 获取请求的数据: 根据接口类型的不同,获取不同名称的数据参数。如果获取的某一个数据参数为空,则返回一个错误信息。 判断是否重传: 根据传送过来的Token序列号和用户id,从数据库读出相应的Token记录,并比较Token中的时间与平台上的当前时间是否超出了Token防重传的时间限
19、制。如果超出了防重传的时间限制,则返回一个错误信息。如果根据Token从数据库读不出任何数据,也返回一个错误信息。 Token存取的流程如图1-6-4: 图1-6-4 Token存取流程 判断参数的合法性: 根据传送过来的参数,和平台从数据库读出相应的软件序列号重新做一次sipsign的运算,再将运算结果和SaaS软件传送过来的值做比较,如果相同则合法,如果不相同则返回一个错误信息。 处理接口调用请求,返回结果数值: 通过一系列的合法判断,最后执行接口的处理请求,不同的接口处理方式不同,需要返回结果由&特殊字符拼接成一个字符串返回给SaaS软件(也可以返回一个xml),如果不需要返回结果的,可
20、以返回一个成功信息。(这部分还需要对安全性进行考虑) 2.6.3功能描述 接口的实现主要是针对SaaS软件与SaaS平台之间的关联矛盾。因为用户数据与买卖交易数据都存放在SaaS平台之中。当SaaS软件需要获得买卖此软件的某些合法的用户数据的时候就需要和平台进行一定的交互,此时候就要通过接口来实现此种交互。 目前SaaS平台上只实现了免登陆的接口,免登陆接口实现用户从平台到第三方软件的链接不需要二次登陆,只需要在平台上购买了此软件,则可以从平台上直接登陆第三方软件使用。 接口的种类可以有很多种,如果要扩展的话还可能要有获取购买此软件用户授权的接口,查询购买此软件的用户信息的接口,以及其他等等。
21、 2.6.4用例图 接口模块不存在用例图。 2.7 SaaS软件用户初始化 2.7.1业务流程图 用户在平台登陆选择购买的软件进入SaaS软件调用免登陆接口用户非法 提示错误信息,返回平台用户合法 判断用户所属租户是否存在本地数据不存在此租户 初始化租户信息及相关信息本地数据存在此租户 判断用户是否存在本地数据不存在此用户 初始化用户信息本地数据存在此用户 载入登陆用户的权限,信息使用属于此用户的软件图 1-7-1 SaaS软件初始化流程 2.7.2业务详细说明 用户在平台登陆: 基于SaaS平台的SaaS软件的用户都是在平台上实现注册登陆的,这样平台上管理多个SaaS软件的时候就可以一次登陆
22、免去多个二次登陆的麻烦。用户在平台通过单点登陆(SSO)链接到SaaS软件上。 选择购买的软件进入: 用户可以拥有多个软件,不同的软件有不同的软件入口地址。 SaaS软件调用免登陆接口: 所有的软件一开始都应当判断进入用户的合法性。 判断用户所属租户是否存在初始化租户信息: 先查看本地数据库中是否存在与此租户是否存在,如果不存在则需要初始化租户及相关的数据,所谓的初始化租户及相关的数据不止是将租户的信息加入到本地数据库,而且要初始化SaaS软件的默认配置。譬如说SaaS软件本身具有默认的几个角色,但由于SaaS软件的特性是由多个不同的租户使用,不同的租户定义的角色有所不同,但又具有相同的系统默
23、认的角色,在这种情况下就需要在初始化租户的时候初始化SaaS软件的默认配置,将系统本身默认的角色与此租户关联起来。还有一点要注意的是,SaaS软件本地数据库里的租户id就是用户在平台上的用户id,通过这样才能判断平台上的用户是否已经在软件本地里初始化过。 判断用户是否存在初始化用户信息: 如果本地数据库没有此用户信息,且此用户又是合法的,则将此用户的信息存放在数据库里。如果SaaS软件系统功能上是分角色权限的,则需要把给此用户赋予一个最低的权限,再由系统管理员提升此用户的权限。 载入登陆用户的权限,信息: 当一切判断结束后,如果用户合法且系统初始化信息完毕则用户获得一个具有他在此系统的权限和信
24、息的Session。 2.7.3功能描述 SaaS软件初始化的过程也即是为了解决平台与SaaS软件之间的关联矛盾问题。但不同的是此部分必须要由软件提供者完成,也就是软件提供者需要在用户登陆的时候就需要判断初始化数据(尽管从流程上看很繁琐,但必不可少)。这个初始化的过程可以解决不同租户在软件中配置不同且又都保留系统默认配置的问题。 在初始化的设计我们采用的是一对一的设计方式: 租户1判断初始化租户 判断初始化用户 租户1下的用户1在数据库添加用户数据 租户1下的用户2图 1-7-2 初始化方式 这种初始化方式即是每个用户就需要经历初始化判断的过程,且只有判断后才能把用户数据添加到本地数据库里。即
25、是一个租户买了软件后添加了用户,租户可以不先登陆,用户可以先登陆,然而只有登陆过的用户才能出现在SaaS软件的本地数据库中。这种初始化过程是采用分别初始化,一一对应的方式。 2.7.4用例图 此模块无用例图。 3SaaS平台需改进的功能点与方案 3.1 基于组织机构的软件用户管理方式 3.1.1 原功能描述 SaaS平台的设计是基于用户的软件使用方式,也就是说每个用户在平台上都是平级的,当用户购买了软件之后他就成了这个软件的一个特定的租户,当用户想要其他的用户使用自己购买的软件的时候,可以把这个软件的使用授权赋予其他平台用户,至于具体的权责划分就在软件中划分,当然租户可以收回赋予的软件使用授权
26、。这样的方式是以个体用户为中心,采用平级的处理来实现软件用户管理。 3.1.2 改进后的功能描述 根据新的需求,SaaS平台追加一种基于组织机构的软件用户管理方式。也就是说一个组织机构购买了一个软件后可以把软件授权赋予在所属组织机构的用户上。这样的实现方式可以让软件用户的管理更简单,组织机构当然也可以回收某个用户的使用权限,并赋予某个用户多个软件的使用权限。同时,SaaS软件初始化的过程中可以让组织中的人员角色与SaaS软件中人员角色相对应。 3.1.3 实现方案 如果要添加基于组织机构的软件用户管理方式,则必须先要添加组织机构的注册。也就是说注册的类型分为个人用户注册和组织机构注册。至于组织
27、机构的里所属的用户在理念上是可以由用户自由添加和管理的,同时组织机构里的用户也可以设置职位。那么一个基于组织机构的软件用户管理方式可以看成是一个简单的管理系统,如图3-1-1: 基于组织结构软件用户管理添加组织机构用户删除组织机构用户设置组织机构用户信息和职位赋予组织机构用户软件授权管理组织机构用户软件授权图 3-1-1 组织机构的软件用户管理方式 既然组织机构里有属于此组织机构独有的用户,那么出于安全与系统设计上的考虑我们需要让组织机构中的用户与普通的个体用户分别独立开来,所以我们要加一张组织机构用户表来专门存储组织机构用户数据,同时必须要有一个数据字段来记录组织的id,如图3-1-2: 图
28、3-1-2 组织机构用户数据结构 用户数据信息里可以存放用户的账号,密码,职位等其他用户信息。而组织机构用户是可以由组织机构随意添加的,但组织机构用户只能有其所属的组织机构管理。当然,组织机构用户与普通的个体用户在平台上的功能也应该有所不同,且他们涉及到的关系业务逻辑也应当有所不同,具体的设计想法如下: 1, 个体用户与组织机构间没有任何关系,即是和组织机构用户没有任何 关系,个体用户购买的软件授权是不可以赋予组织机构的用户的。 2, 个体用户是一个平级的概念,组织机构用户有上下级关系。 3, 个体用户可以通过购买软件成为一个租户,组织机构用户永远都是隶 属于组织机构这个租户下的用户,同时也不
29、具有购买软件的功能。 4, 个体用户和组织机构用户登陆后所看到的页面应当是不同的。 5, 个体用户只能由平台的系统管理员管理,而组织机构用户可以由组织 机构管理。 软件使用授权的使用分配,其具体的实现方式因为个体用户与组织机构的分类而进行分类处理的,普通个体用户的软件授权是赋予其他的普通个体用户,这个个体用户可以由用户自己添加也可以查找现有的个体用户的账号,这种授权方式简单但操作起来麻烦又不便管理。至于组织机构的授权方式,就是组织机构购买的软件授权赋予组织机构下的组织机构用户,这种选取方式更灵活,如图3-1-3 : 组织机构人员列表赋予软件A的授权 赋予软件B的授权 赋予软件B的授权 用户1组
30、织机构管理者赋予软件A的授权 用户2用户三图 3-1-3 组织机构软件授权方式 为了更好的管理组织下的用户,组织机构也需要设定一个层级关系,如图:3-1-4 图3-1-4 组织机构人员层级关系 又由于组织机构用户是与组织机构与个体用户的数据表是分开的,所以组织机构管理员对组织机构用户的添加,删除,修改都是可以的,且不会影响平台用户的操作和数据。 要实现这部分功能,要添加组织机构表,组织机构用户表,方便层次管理的部门表。如果要自定义角色的话还要添加个组织机构角色表。 3.2 基于组织机构的软件用户初始化方式 3.2.1 原功能描述 原来平台上的用户都是个体用户,且都是平级的,初始化的方式是采用分
31、别初始化,一一对应的方式。也就是说每个可以使用此软件的用户只有第一次登陆到SaaS软件中去才能在SaaS软件中初始化用户数据。这种初始化方式每次初始化的流量小,且每个用户的登陆都能触发租户信息的初始化,但不方便的是需要每个用户登陆到软件中。 3.2.2 改进后的功能描述 由于出现了基于组织结构的软件用户管理方式,相应的也应当增加基于组织机构的初始化方式。基于组织机构的初始化方式不同于普通的个体用户初始化方式,其应当采用的是组织机构管理员登陆一次性初始化这种方式。也就是说,当组织机构购买了此软件的时候需要组织机构管理员登陆SaaS软件以便于初始化。而且这种触发方式只应当由组织机构管理员来触发实现
32、,当组织机构管理员未触发此初始化事件的时候,其他组织机构用户是无法访问SaaS软件的。 3.2.3 实现方案 方式一 从最直接的实现方式入手就是当组织机构管理员登陆软件的时候传送大量的数据,从而使得整个组织结构的系统初始化。此方式如图3-2-1: 携带所有的组织机构信息 成功初始化 初始化登陆系统组织管理员图3-2-1 组织机构初始化方式1 由于存在一个网络冲突的原因,有可能在第一次初始化的过程中失败。所以基于这部分的考虑,在设计上我们在组织管理员初始化之后需要每个组织机构用户在登陆SaaS软件的时候都需要通过少量的数据交互与平台核对一下用户是否完成全部初始化完成,也就是说平台上的组织机构用户
33、的数量与软件上的组织机构用户数量进行核对比较,如果不符合的话就应当调用平台上的提供的接口重新初始化。方式如图3-2-2: 携带组织机构用户数量 成功登陆 登陆系统核对用户数量请求调用重新初始化接口 组织机构用户图 3-2-2 组织机构防初始化失败方式 这种方式的实现需要在平台添加一个重新初始化接口,同时SaaS软件的初始化代码也要有所更改。还有一点非常重要,就是在SaaS软件中默认配置的初始化一定要放在用户初始化的前面。 方式二 这种方式是继续沿用原来的初始化方式,也就是分别初始化,一一对应的方式,此实现方式要考虑个体用户和组织机构所构成的租户id重叠问题(因为SaaS软件本地的数据库的租户id是和平台上的用户id相关联的,现在又多了组织结构表和组织机构用户表,即是组织机构管理员也可以成为租户,这样id就可能相同)。我们可以让个体用户的租户id用数字表示,而组织机构的租户id用数字字母形成的序列号表示。当然,如果采用这种方式的话,SaaS软件的id模式就可能不统一了。也可以在初始化过程中指明初始化类型是组织结构方式的,从而用一种算法替换id数值,这种方式也可以解决个体用户与组织机构用户的id冲突问题。 总的来说,这种实现方式不利于管理,使得组织结构方式的软件用户管理灵活性大大下降,但实现起来比方式1更简单。