软件架构-解密电商系统营销-会员模块业务
上次说了商品,商品分类,品牌,分类的属性,规格。很多电商网站例如:京东,国美,苏宁他们的商品都是存储在redis中的,通过请求获取到的redis进行js的渲染动态的展示商品的信息。
(一)营销模块
- 营销工具
- 营销活动
商品的ID,营销工具的ID,营销工具的编号,营销工具的类型(商品级别的,订单级别的,全站级别的),渠道(PC端的,IOS端的,android端的)
- 营销活动对应的订单数据
针对营销活动产生的订单
- 营销技术方案
1个用户或者一个商品对应1-3个营销活动,1万个商品(购物车)就有3万个营销活动如果持久化到mysql上,mysql肯定是受不了的。如果是100个用户,双十一必须挂了服务。
优化方案(缓存,redis也会有问题。redis里面存3万多条数据,浪费了大量的网络资源)
解决方案是:类似新华字典一样,redis里面针对某个活动只存储key值,内容保存在JVM cache中。因为目前都是存在JVM中,如果是分布式同步下,需要使用zookeeper。
####(二)会员模块
电商里面最复杂的就是商品,最简单的业务就是会员。
- 业务
会员模块用户注册、登录、找回密码、积分业务
- 技术点:会员SSO、分库分表
单点登录。1.session如何存储的(redis)
单点登录。2、服务端如何获取你信息?Token(客户端跟服务端 包含登录)
sale.jd.com登录 item.jd.com(我不知道你登录)
登录后把token放入redis中作为key,token的信息保存在cookies中,当访问在item.jd.com后,通过cookies里面的token来确认用户是否登录。
分库分表。hash取模、list预定义、range范围,具体都是通过shardingjdbc处理的
说说之前的公司关于会员表一共8个库,后来变成了16个库。这个是如何处理的。
1.当时8个库的分库思路是通过hash取模的方式。(每个库800万数据)
2.如果改成16个库,凌晨进行处理,先将数据进行处理分为:待迁移%8、 (服务可用)迁移中(%8) 、迁移完(%16),通过copy的方式。2个小时搞定的。
3.迁移完后进行取模改成16。停机2个小时。
4.当时同事提出不停机,如果在这个期间会员信息发生修改,通过binlog的方式在新迁移的信息通过binlog的方式在新迁移的库中执行,因为比较麻烦后来放弃了。
5.直接停机2个小时。前提这些都是在测试环境测试过了。迁移完后等于2份,一个在0库,一个在16库,删除原来0库中的数据。
- 表设计
t_account会员表
参数 | 名称 | 类型 | 主键 | 唯一 |
---|---|---|---|---|
id | 会员ID | int | Y | |
nickname | 昵称 | varchar | y | |
account | 用户名_out_当前时间戳 | varchar | y | |
password | 密码 | varchar | ||
accountType | 会员类型。qq,sinawb,alipay | String | ||
trueName | 真实姓名 | String | ||
sex | 性别。m:男,f:女,s:保密 | String | ||
birthday | 出生年月日 | Date | ||
province | 省份 | String | ||
city | 所在城市 | varchar | ||
address | 联系地址 | varchar | ||
postcode | 邮政编码 | varchar | ||
cardNO | 证件号码 | varchar | ||
cardType | 证件类型 | varchar | ||
grade | 等级 | int | ||
amount | 消费额 | money | ||
tel | 电话 | varchar | ||
Email地址 | varchar | y | ||
emailIsActive | 邮箱是否已激活。y:已激活,n:未激活。默认n | String | ||
freeze | 是否冻结 n:未冻结,y:已冻结;默认n | String | ||
freezeStartdate | 冻结的开始日期 | Date | ||
freezeEnddate | 冻结的结束日期 | Date | ||
lastLoginTime | 最后登录时间 | Date | ||
lastLoginIp | 最后登录IP | String | ||
lastLoginArea | 最后登陆地点 | String | ||
diffAreaLogin | 是否是异地登陆y:是,n:否 | String | ||
regeistDate | 注册日期 | Date | ||
addressID | 配送信息ID | Int | ||
openId | QQ登陆返回 | String | y | |
accessToken | QQ登陆返回 | String | ||
alipayUseId | 支付宝快捷登陆返回的用户ID | String | y | |
sinaWeiboID | 新浪微博登陆返回的用户ID | String | y | |
rank | 会员等级。和t_accountType.code进行挂钩。默认R1 | String | ||
score | 会员积分。默认0 | Int |
t_accountRank会员级别表
参数 | 名称 | 类型 | 主键 |
---|---|---|---|
id | 自增 | int | 是 |
code | 级别编码R1:普通会员,0-499R2:铜牌会员,积分范围500-999R3:银牌会员,1000-1999R4:金牌会员,2000-4000R5:钻石会员,大于4000 | String | |
name | 级别名称 | String | |
minScore | 最小积分 | Int | |
maxScore | 最大积分 | Int | |
remark | 备注 | String |
t_address配送地址信息表
参数 | 名称 | 类型 | 主键 |
---|---|---|---|
id | 自增 | Int | 是 |
account | 会员账号 | String | |
name | 收货人姓名 | String | |
province | 省份 | String | |
city | 城市 | String | |
area | 区域 | String | |
pcadetail | 省市区的地址中文合并 | String | |
address | 收货人详细地址 | String | |
zip | 收货人邮编 | String | |
phone | 收货人电话号码 | String | |
mobile | 收货人手机号码 | String | |
isdefault | 是否默认;n=不是,y=默认 | String | 默认n |
(三)权限模块
很多系统的权限这块 公共。权限系统一般有:账号、角色、权限、资源。
权限可以分为三种:页面权限,操作权限,数据权限。
在互联网公司有个专业术语:权限这块防小人(不懂电脑的),防君子(IT人员)
- 页面权限
控制你可以看到哪个页面,看不到哪个页面。
很多系统都只做到了控制页面这一层级,它实现起来比较简单,一些系统会这样设计,但是比较古板,控制的权限不精细,难以在页面上对权限进行更下一层级的划分。
- 操作权限
则控制你可以在页面上操作哪些按妞。
延伸:当我们进入一个页面,我们的目的无非是在这个页面上进行增删改查,那在页面上对应的操作可能是:查询,删除,编辑,新增四个按钮。
可能你在某个页面上,只能查询数据,而不能修改数据。
- 数据权限
数据权限则是控制你可以看到哪些数据,比如市场A部的人只能看到或者修改A部创建的数据,他看不到或者不能修改B部的数据。
延伸:数据的控制我们一般通过部门去实现,每条记录都有一个创建人,而每一个创建人都属于某个部门,因此部门分的越细,数据的控制层级也就越精细,这里是否有其他好的方式除了部门这个维度还有其他什么方式可以控制数据权限。
- t_user用户表
参数 | 名称 | 类型 | 备注 |
---|---|---|---|
id | 自增长 | int | 唯一 |
username | 帐号 | String | 唯一 |
password | 密码 | string | MD5加密 |
createtime | 创建时间 | String | |
createAccount | 创建人 | String | |
updatetime | 最后修改时间 | String | |
updateAccount | 最后修改人 | String | |
status | 状态 | String | y:启用,n:禁用;默认y |
rid | 角色ID | Int | |
nickname | 昵称 | String | |
邮箱 | String |
- t_role角色表
参数 | 名称 | 类型 | 备注 |
---|---|---|---|
id | 自增长 | int | 唯一 |
role_name | 角色名称 | String | |
role_desc | 角色描述 | string | |
role_dbPrivilege | 数据库权限 | String | |
status | 角色状态,如果角色被禁用,则该角色下的所有的账号都不能使用,除非角色被解禁。 | String | y:启用,n:禁用;默认y |
- t_privilege权限表
参数 | 名称 | 类型 | 备注 |
---|---|---|---|
id | 自增长 | int | 唯一 |
rid | 角色ID | int | |
mid | 资源ID | int |
- t_menu资源表
参数 | 名称 | 类型 | 备注 |
---|---|---|---|
id | 自增长 | int | 唯一 |
pid | 父ID | Int | |
url | 资源 | String | |
name | 资源名称 | string | |
orderNum | 序号 | int | |
type | 功能类型 | String | module:模块page:页面button:功能 |
(四)黑科技动态执行aop里面的方法
大型网络公司内部使用的,建议内部粉丝专用,这里不做演示,详细使用建议联系我。
源码:https://github.com/limingios/netFuture/tree/master//源码/『互联网架构』软件架构-解密电商系统营销-会员模块业务(72)/
1、存储在jvm的对象可视化 可以操作
2、调试bug比较有用 查看最新代码
3、给系统留后门(生产 不需要重启机器可以改配置 )
- 在pom.xml 同级目录放入dynamo.jar
- pom.xml 中的配置,先将jar包放入web-info
<dependency><groupId>com.gome.spring.compents</groupId><artifactId>dynamo</artifactId><scope>system</scope><systemPath>${basedir}\..\dynamo.jar</systemPath><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency>
- web.xml中加入
<servlet><servlet-name>springdyn</servlet-name><servlet-class>com.gome.spring.compents.servlet.DynServlet</servlet-class></servlet><servlet-mapping><servlet-name>springdyn</servlet-name><url-pattern>/dyn/admin/*</url-pattern></servlet-mapping>
- 访问方式
http://ip:端口/项目名称/dyn/admin
用户名:admin
密码: admin
PS:今天说了营销的设计思路:营销工具,营销活动,营销活动订单。 会员管理:单点问题,会员信息session共享问题。权限问题:页面权限,操作权限,数据权限。黑科技:动态aop控制工具。
软件架构-解密电商系统营销-会员模块业务相关推荐
- 软件架构-解密电商系统-互联网BAT商品详情缓存架构
上几节说了中小型电商公司,项目详情页的优化方案,一般是使用freemark模板生成了html静态页面,放到nginx或者tomcat中,但是肯定选择nginx的并发是tomcat的100倍,通过mq的 ...
- 软件架构-解密电商系统-页面静态化
秒杀系统说了几次了,基本技术点都有所涉及.真正的要解决大流量分布式系统的时候,不是特别容易,就像CAP原则和BASE原则,没有最优的方案,只有最合适的. 页面静态化(一) ① 技术方案 通过程序将动态 ...
- HH SaaS电商系统的商城模块设计
文章目录 好获SaaS电商系统层级关系 商城实体 商城运营模式 商城可选子系统 创建商城 商城管理后台 有供应系统和无供应系统的B2C和混合模式的商城系统对比 有仓储系统和无仓储系统的B2C和混合模式 ...
- HH SaaS电商系统的品牌模块设计
品牌和商品基础类目属于多对多的关系 创建品牌时必须关联商品基础类目,且只能关联三级类目,至少关联一种 品牌只能由租户统一进行维护管理,供应商.商家.商城可以申请新品牌,但是由租户进行审核 品牌被删除或 ...
- 解密电商系统-Spring boot快速开始及核心功能介绍(下)
上次说了Spring boot快速开始及核心功能介绍,本次说说配置文件相关的. Spring Boot属性配置文件详解(一) 修改端口 # application.properties: server ...
- 解密电商系统-秒杀消息队列异步下单
上几次主要说了高并发大流量项目所涉及到的技术点和技术方案,调优需要注意的一些参数,秒杀订单接口缓存的概念,通过redis的方式,redis需要进行原子性. 秒杀优化(一) 使用缓存可以大大的提高我们系 ...
- HH SaaS电商系统的支付模块设计
文章目录 支付单 支付单状态流转逻辑说明 支付相关实体 支付流水记录 支付方式 支付渠道 支付单 销售订单生成时,同步生成支付单,如果销售订单的应付金额由首付款和尾款组成,那么会生成两个支付单 支付单 ...
- 电商系统的售后模块设计
文章目录 售后单实体 方案一 方案二 服务类型 可选售后服务判断规则 退款类型 售后截止时间 金币和优惠券如何返还 买家端订单列表的"售后按钮"逻辑说明 服务端处理逻辑 买家端操作 ...
- 这10个功能模块,手把手教你从零设计电商系统
导读:电商业务与我们的生活息息相关,大家可能对电商多少也有一些了解,事实上,即使是一个最小化的电商系统,也依然是非常复杂的. 所以,我们先花一点时间,一起以一个创业公司的CTO的视角,设计一个最小化的 ...
最新文章
- oracle的addm,addm报告分析 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区
- approxPolyDP-轮廓近似
- 全文检索、数据挖掘、推荐引擎系列5---文章术语向量表示法
- fckeditor 漏洞php,fckeditor上传漏洞利用总结
- 华为云设计语言_《好设计,有方法:我们在搜狐做产品体验设计》 —2.2 设计语言带来的好处...
- 笔记(2015-07-24)
- ftp 服务器 性能,FTP 服务器性能 测试点
- 7 centos 设置jvmgc_centos下docker离线部署
- 百搭手绘卡通牛年吉祥生肖素材,萌到心里的小牛
- feign直接走熔断_SpringCloud基于OpenFeign实现服务熔断降级
- Linux系统安装完成后创建交换空间
- 2017CCPC哈尔滨 F:Permutation(构造)
- ie8下a标签中的图片出现边框
- YOLOv5图像识别显示中文标签
- 计算机为什么找不到网络打印机,电脑找不到网络打印机怎么办
- java 三维旋转立方体_旋转立方体实现
- 零代码爬虫神器 — Web Scraper 的使用
- 编程机器人疯抢教育市场!6大派玩家谁主沉浮
- [EXCEL] 宏的录制、调用和删除
- 手机照片局部放大镜_如何为不识字的老年人挑选一款合适的智能手机