商城系统概要设计版本:1.0变更记录序号版本变更说明修改人/日期审批人/日期11.0创建白钢/2016-11-1421.1修改付兴/2017 -03-15目录1概述41.1系统概述41.2目的41.3范围51.4术语定义52整体架构设计62.1功能架构设计 62.2非功能要求架构优化72.3系统服务化架构优化82.4软件部署架构102.5网络拓扑设计112.6缓存机制设计12 3接口设计134数据库设计144.1数据库拓扑高并发设计144.2数据库表设计144.2.1购物车表154.2.2收藏 夹表154.2.3内容表164.2.4内容分类表164.2.5商品表174.2.6类目表174.2.7商品描述表184. 2.8商品规格参数表184.2.9商品规格与商品的关系表194.2.10订单表194.2.11订单商品表204.2.12 订单地址表204.2.13用户表215系统符合性验证22概述本文档旨在详细描述阿甲学子商城系统业务需求,明确系统功能需求、非功 能需求及设计边界。文档分为三个部分:概述部分,描述了项目的目的和范围,并对文档中使用到的术语进行了说明;功能性需求说明部分,对系统 从业务功能方面进行了简要的描述;非功能性需求说明部分,对系统从可靠性、安全性、性能等几方面进行阐述;系统概述阿甲学子商城,是阿甲科 技集团内部使用的、为在校学员提供便利购物途径的在线商城系统。此系统商务模式为B2C(见术语定义)。B端为阿甲自营及联合商家共营,C 端为阿甲在校学员。系统模式是B端在商城平台提供学员所需的各类学习生活物资;C端通过网页浏览并自由采购所需商品,完成线上支付后、B端 将商品通过物流系统完成货物交付。系统目标是为学员的学习生活物资采购提供便利途径,并且通过集团化的规模采购降低商品价格及时间成本。同 时,此系统开发项目也作为全栈工程师培训课程(以下简称课程)的组成部分,因此将各功能均分解为两部分需求,课上统一完成的基础部分和自行 练习的扩展部分。后续系统的描述均按此方式进行。系统后续版本将持续丰富业务模式,逐步增加分公司自营、供货商接入(含订餐接入)等多种业 务模式。目的编制此文档的目的,是向本系统开发相关人员(包括但不限于项目经理、产品经理、UI、软件编写、测试、运维及商务人员)明确描 述系统结构、功能及逻辑等各个角度的设计内容,保证大家对系统理解的一致性;同时是后续完成系统研发、测试、上线等工作的依据之一。本文同 时作为课程的纲要类文档,既是教师备课的重要参考,也是学员理解系统、完成学习及开发任务的指导性框架文件。范围本文档用于阿甲学子商城系 统设计、开发、测试、运维及后续版本升级阶段,为保证系统的一致性和可追溯性,版本升级阶段内容以附录形式附后,并需更新“版本更新记录” 。同时本文作为教学基准文件之一,明确了学员课程覆盖的教学范围。教学内容不应超出此文档覆盖范围。术语定义SSO:指单点登录系统,通过 SSO单点登录系统满足用户在访问各个不同系统间不用重复登录。高并发:指同一时刻有大量请求涌入服务器,甚至服务器所能承受极限数倍的请 求。高可用:指某一时刻突然一台或几台服务器宕机后,系统仍能正常运行,且系统资源分配合理,称为满足高可用。集群:指多台服务器集中在一 起,处理同一种业务请求,提高单位时间内执行的任务数来提升效率。分布式:指一个复杂业务请求多台服务器一同处理,缩短单个任务的执行时间 来提升效率。整体架构设计根据《阿甲学子商城系统需求说明书》,对此系统从各个角度设计如下。功能架构设计根据系统业务需求,实现以下业务 :后台部分实现商品类目的查询,商品的查询、新增(仅限后台操作数据库,与前台无关)。前台部分面向商城客户,提供了进行一次电商购物除物 流系统所需的完整功能;在系统后期迭代版本中会持续完成各项功能的附加内容。商城门户系统模块图2-1单点登录系统模块图功能架构中各项功 能简要描述如下:商城门户系统主要包括『商品详情模块』、『购物车模块』、『收藏夹模块』以及『订单模块』。商品详情模块:浏览商品详情页 面,查看商品相关规格参数等信息,将商品加入购物车、加入收藏夹、立即购买等一些商品相关操作。购物车模块:用户登录后可查询自己的购物车 ,查看购物车商品信息,添加商品至购物车,并修改购物车商品状态,包括购物车商品单个删除以及批量删除、购物车商品购买,修改购物车商品数 量等操作。收藏夹模块:用户登录后可查看自己的收藏夹,查看收藏夹商品信息,添加商品至收藏夹,删除收藏夹商品,收藏夹商品单个移入购物车 ,批量移入购物车。订单模块:用户登录后可查看自己所有的订单,查看订单详细信息,根据不同状态查询订单等功能。支付模块:用户对订单进行 支付。单点登录系统主要包括『登录模块』,『注册模块』。登录模块:用户登录。注册模块:用户注册。非功能要求架构优化根据《阿甲学子商城 系统需求说明书》中的非功能性需求,对系统功能进行分布式拆分如下图所示。前台系统业务横向拆分,调用service系统服务,满足整个系 统高并发访问需求;service系统对数据进行整理返回portal系统,业务的横向拆分,减轻portal系统的压力,提高高并发能力 ;构建单点登录机制,保证登录的可靠、降低登录的复杂过程;支付系统为最重要的系统之一,处理支付相关操作,需保证其系统安全性和事务正确 定;为service系统除订单外他功能添加redis缓存功能,保证访问的时效性要求,降低数据库系统负载。系统服务化架构优化根据商城 业务需求,对系统进行业务分层,分为数据层、系统服务层、业务服务层、表现层,各层包含项目入下图所示。数据层:由关系型数据库集群构成, 提供基础关系型数据库服务;系统服务层:提供系统缓存服务,单点登录等服务;业务服务层:提供各项业务服务;表现层:提供各个用户访问页面 的展示内容;软件部署架构服务器部署均采linux系统docker部署,需保证各个系统之间内部通信的高效、压力的均匀分配,并发访问量 较大时系统扔能正常运转,且任意一台甚至几台服务器同时宕机后系统仍能被访问。用户访问首页,通过1台nginx服务器做负载均衡,自身实 现高可用,满足高并发、高可用性;多个Potal商城入口系统和service服务系统应对整体项目的高并发,自身实现高可用;整个项目加 入redis缓存系统,提高系统的访问速度,减轻数据库的访问压力,实现高可用;Mysql数据库主从复制,保证数据用不丢失。各个系统间 通过外网ip互相通信,如需优化,可通过内网ip加快访问速度。网络拓扑设计缓存机制设计Redis是一个Nosql类型的非关系型内存 数据库,为整个项目增加Redis缓存,提高页面相应速度,减少数据库访问压力并增加数据库安全性。提升系统整体性能。SSO系统增加re dis缓存,为实现SSO单点登录,各个系统间访问无状态(Session共享)提供可能。将用户信息存入redis缓存,减少多次访问数 据库查询用户次数。服务端系统增加redis缓存,将商品类目、商品信息等常用数据存入redis缓存,可以大量减少数据库访问次数,并利 用自己存性能优势提高页面相应速度。订单服务系统增加redis缓存,当同一时刻订单数量过多,服务器压力过大时,增加redis缓存以应 对服务器因压力过大而宕机的可能,讲请求先存入redis缓存,然后数据库系统在根据系统性能将数据存入数据库。在使用订单登录时,仍需查 询用户是否登录,查询redis缓存以减少数据库操作次数。针对用户行为进行分析得出,用户访问次数最多的系统为商品浏览系统和单点登录系 统。所以收藏夹和购物车系统目前不需要加入redis缓存。接口设计前台接口分为protal系统接口、service系统接口、paym ent系统接口、sso系统接口。所有接口设计均采用Restful风格。Protal系统为商城直接入口系统,接口设计为:地址/模块/ 功能?参数&参数;Service系统为整个系统提供服务,与数据库直接交互,接口设计为:地址/rest/模块/功能?参数&参数Pay ment系统为支付系统,链接各个银行的支付接口,其接口设计为:地址/payment/模块/功能?参数&参数SSO系统为单点登录系统 ,保证各个系统间用户信息的传递及用户的注册,接口设计为:地址/sso/模块/功能?参数&参数数据库设计数据库拓扑高并发设计分库分表 数据库主从配置,主从同步消息队列对数据实现同步,实现数据的一致性数据库表设计系统内容搜索响应时间不超过0.5秒;页面响应速度不大于 1秒。为保证查询效率,所有查询应满足单表查询,避免关联查询。某些字段存储数据格式为json,具有良好的可扩展性。数据库表设计为13 张表:表名描述ajia_cart_item购物车表ajia_collect_item收藏夹表ajia_content内容表ajia _content_category内容分类表ajia_item商品表ajia_item_cat商品分类表ajia_item_des c商品描述表ajia_item_param规格参数表ajia_item_param_item商品规格参数关系表ajia_order 订单表ajia_order_item订单商品表ajia_shipping收货地址表ajia_user用户表购物车表(ajia_ca rt_item)记录购物车保存的商品信息。列名数据类型(精度)空/非空约束条件列描述idbigint(20)N主键购物车编号use r_idbigint(20)N用户编号item_idbigint(20)N商品编号numint(10)商品数量statusint( 4)1、2购物车状态1正常2删除createdtimestamp创建时间updatedtimestamp修改时间收藏夹表(ajia _collect_item)列名数据类型(精度)空/非空约束条件列描述idbigint(20)N主键收藏夹编号user_idbig int(20)N用户编号item_idbigint(20)N商品编号titlecarchar(200)商品标题pricedoubl e商品单价pic_pathvarchar(200)商品图片item_param_datavarchar(200)商品参数statu sint(4)1,2收藏夹状态1正常2删除createdtimestamp创建时间updatedtimestamp修改时间内容表( ajia_content)系统的高负载服务需具备服务横向扩展能力,保证实时响应性能要求。列名数据类型(精度)空/非空约束条件列描述 idbigint(20)N主键内容编号category_idbigint(20)N内容分类编号titlevarchar(200)商 品标题sub_titlevarchar(100)子标题title_descvarchar(500)标题描述urlvarchar(5 00)链接picvarchar(300)图片路径pic2varchar(300)图片2路径contenttext内容statusI nt(4)状态,1-正常,2-删除createdtimestamp创建时间updatedtimestamp修改时间内容分类表(aj ia_content_category)系统具备对数据和攻击的基本防护能力(能够防止SQL注入等基本攻击),支付等重要页面采用安全 连接方式。列名数据类型(精度)空/非空约束条件列描述idbigint(20)N主键内容分类编号parent_idbigint(20 )父类编号,0为一级分类namevarchar(50)分类名称statusint(1)1,2状态1正常2删除sort_orderi nt(4)排序号,同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数is_parenttinyint(1)0, 1是否为父类1是0否createdtimestamp创建时间updatedtimestamp修改时间商品表(ajia_item)系 统运行于Linux系统,数据库采用Mysql,其它依据开发环境进行配置。列名数据类型(精度)空/非空约束条件列描述idbigint (20)N主键商品编号cidbigint(10)N所属叶子类目brandvarchar(50)品牌modelvarchar(50) 型号titlevarchar(100)商品标题sell_pointvarchar(200)商品卖点pricebigint(20)商 品价格(单位:分)numint(10)库存数量barcodevarchar(30)商品条形码imagevarchar(500)商品 图片statustinyint(4)1、2、3商品状态,1-正常,2-下架,3-删除createdtimestamp创建时间upd atedtimestamp更新时间类目表(ajia_item_cat)商品类目表,id用平衡多叉树排列,parent_id的查找使 用B树查询方式进行查找。列名数据类型(精度)空/非空约束条件列描述idbigint(20)N主键类目编号parent_idbigi nt(20)父类目ID=0时,为一级类目namevarchar(50)类目名称statusint(1)1、2状态。1-正常,2-删 除sort_orderint(4)排列序号,同级别优先级is_parenttinyint(1)0、1是否为父类目,1-true,0 -falsecreatedtimestamp创建时间updatedtimestamp更新时间商品描述表(ajia_item_des c)商品描述表。将商品描述单独分表,提高商品表(ajia_item)的操作速度,并为进一步提高数据库并发速度(分库)做好准备。列名 数据类型(精度)空/非空约束条件列描述item_idbigint(20)N主键商品编号item_desctextJson格式商品描 述createdtimestamp创建时间updatedtimestamp更新时间商品规格参数表(ajia_item_param) 定义商品的规格参数基本分类列名数据类型(精度)空/非空约束条件列描述idbigint(20)N主键自增编号Item_cat_idb igintN商品分类idparam_datatextJson格式商品参数createdtimestamp创建时间updatedti mestamp更新时间商品规格与商品的关系表(ajia_item_param_item)定义商品与列名数据类型(精度)空/非空约束 条件列描述idbigint(20)N主键规格参数编号item_idbigint(20)N商品编号item_param_idbigi nt(20)N规格编号param_datetextJson格式参数数据updatedtimestamp更新时间createdtim estamp创建时间订单表(ajia_order)列名数据类型(精度)空/非空约束条件列描述order_idvarchar(50) N主键订单编号user_idbigint(20)N用户编号add_idbigint(20)N地址编号paymentdouble精确 到2位小数实付金额。单位:元。payment_typeint(2)1、2支付类型,1-在线支付、2-货到付款post_feevar char(50)精确到2位小数邮费,单位元statusint(4)1、2、3、4、5、6、7、8、9状态:1、未付款,2、已付款, 3、未发货,4、已发货,5、待收货,6、待评价,7、交易成功,8、交易关闭,9、删除create_timetimestamp订单创 建时间update_timetimestamp订单更新时间payment_timetimestamp付款时间consign_tim etimestamp发货时间end_timetimestamp交易完成时间close_timetimestamp交易关闭时间shi pping_namevarchar(20)物流名称shipping_codevarchar(20)物流单号buyer_messag evarchar(100)买家留言buyer_nickvarchar(50)买家昵称buyer_rateint(20)买家是否已评 价订单商品表(ajia_order_item)列名数据类型(精度)空/非空约束条件列描述idvachar(20)N主键流水编号it em_idvachar(50)N商品编号order_idvachar(50)N订单编号numint(10)商品购买数量titlev achar(200)商品标题pricebigint(50)商品单价total_feebigint(50)商品总价pic_pathv archar(200)商品图片地址订单地址表(ajia_shipping)列名数据类型(精度)空/非空约束条件列描述add_idb igint(20)N主键地址编号is_defaulttinyint(1)1、0是否默认地址1是0否statustinyint(4) 1、2地址状态1正常2删除user_idbigint(20)N用户编号receiver_namevarchar(20)收货人全名r eceiver_phonevarchar(20)固定电话receiver_mobilevarchar(30)移动电话receive r_statevarchar(10)省份receiver_cityvarchar(10)城市receiver_districtva rchar(20)区/县receiver_addressvarchar(200)具体街道地址receiver_zipvarchar (6)邮政编码cereatedtimestampN创建时间updatedtimestampN更新时间用户表(ajia_user)列 名数据类型(精度)空/非空约束条件列描述idbigint(20)N主键用户编号usernamevachar(50)N全表唯一性用户 名passwordvachar(32)N加密存储密码phonevachar(20)全表唯一性注册手机号emailvachar(50)全表唯一性注册邮箱createdtimestamp创建时间updatedtimestamp修改时间系统符合性验证概要设计章节需求用例标识号用例概要描述2.1-注册模块BR-01-01注册2.1-登录模块BR-01-02登录2-1商品详情模块BR-03-01浏览商品BR-03-02查看商品详情BR-03-03将商品加入购物车BR-03-04将商品加入收藏夹BR-03-05将商品立即购买2.1-收藏夹模块BR-04-01查看收藏夹BR-04-02取消单个商品收藏BR-04-03批量取消商品收藏BR-03-04单个商品移入购物车BR-03-05批量商品移入购物车2.1-购物车模块BR-05-01查看购物车BR-05-02修改购物车数量BR-05-03删除单个商品BR-05-04批量删除商品BR-04-05结算购物车2.1-订单模块BR-06-01查看生成订单信息BR-06-02查看默认收货地址BR-06-03确认订单进行结算BR-06-04生成订单BR-07-01查看我的订单BR-07-02查询订单信息BR-07-03操作订单113 |
|