关于电商架构:多商户系统的直播功能用过吗用过的朋友扣个-666

在 CRMEB 多商户商城零碎 v1.1 版本中,到店自提性能助推商家开启社区 O2O 新模式,限时秒杀助力商家促成交转化,接入时下火爆的直播性能,助推商家开启全新带货新形式,为平台减少盈收点及平台竞争力,还可一键复制多平台商品等,从经营层到管理层 CRMEB 多商户商城零碎都在稳步欠缺,还将继续不断完善降级。 多商户零碎 v1.1 性能亮点: 1.小程序直播 性能接入时下火爆的小程序直播性能,可直播带货,助力商家开启全新带货新形式,为平台减少盈收点及进步平台竞争力! 2.到店自提 到店自提对社区经营和连锁机构来说是一项比拟外围的性能,能够无效为商家节俭配送费,降低成本,连锁机构通过到店自提模式能够让每个门店都成为一个自提点,实现互联网拓展客群,无效为门店引流推广,可疾速将自提点左近的人转化为门店顾客,实现线上线下 O2O 模式的无效降级。 3.订单小票打印性能 订单小票打印性能的晋升有助于商家进步发货效率,晋升多部门联动经营效率。 4.一键复制淘宝 \ 天猫 \ 京东 \ 拼多多 \ 苏宁商品 一键复制多平台商品性能将大大简化产品公布流程,缩小产品上架工作量,加重设计累赘,晋升用户应用体验! 5.限时秒杀性能 限时秒杀性能无效助力商家促成交转化,无效晋升店铺流量,减少客源,进步店铺和商品知名度! 6.资金流水性能 资金流水性能可具体记录每一笔资金的起源,便于前期财务对账及资金追溯! 7.手机端订单治理性能 手机端订单治理将大大不便商家治理订单,对订单进行操作,晋升用户应用体验! 源码附件曾经打包好上传到百度云了,大家自行下载即可~ 链接: https://pan.baidu.com/s/14G-b...提取码: yu27 百度云链接不稳固,随时可能会生效,大家放松保留哈。如果百度云链接生效了的话,请留言通知我,我看到后会及时更新~ 开源地址码云地址:http://github.crmeb.net/u/defu Github 地址:http://github.crmeb.net/u/defu

July 22, 2022 · 1 min · jiezi

关于电商架构:电商店铺商品设计思路

一个简略的电商商品设计思维在借鉴了前辈的一些设计思路之后,本人在设计小商城的一些实践经验 数据表可能会略去一些跟整体设计关系不大的字段 商品分类表 category(这里临时没有思考多级分类进去)category_id分类idname分类名字比方(短袖,裤子)description形容2.店铺表 shop shop_id店铺idshop_name店铺名字description形容owner_id拥有者id3.spu表 spu(此处只列出跟其余表有关联的字段) spu_id商品的idcategory_id分类表的idshop_id店铺id4.sku表 sku sku_id确定商品各个属性之后惟一一个子商品spu_id父商品spu_idcategory_id能够依据状况做一个冗余shop_id能够依据状况做一个冗余5.属性表 attribute attr_id属性惟一idattr_name属性名字description属性形容6.属性的值 attribute_value attribute_value_id惟一idattr_id属性idvalue这个属性的值(比方色彩的黄色 尺码的XL等)sort排序7.属性类型表 category_attr为这个类型预设一些属性 比方裤子失常来说都有色彩尺码这些属性其实就是存储一个类型与属性的映射关系(当然这个只是一个预设,商家增加一个裤子的时候还能够自在去增加别的属性或者不去勾选预设这些属性) id惟一id主键category_id分类idattr_id属性idsort排序8.spu属性关系表 spu_attr这个表须要形容这个spu有哪些属性,比方一个iphonex 它就有色彩,内存,版本(国行,港行,美版等)这些属性 id惟一id主键spu_id attr_id属性idsort排序9.spu属性的值表 spu_attr_value确定了spu有哪些属性,还须要阐明这些属性都有哪些取值,因为attr_value这个表其实是一个很全面的值,还比方iphonex,attr_value外面对应了(国行,港行,美版),然而商家这个spu其实就只销售国行,因而须要一个对应关系 id惟一idspu_id attr_id属性id(其实是冗余的)attr_value_id属性的值的idsort排序10.sku与属性的值的映射关系表 sku_attr_valuesku就是spu的多个属性联合起来组成一个惟一的后果,所以比方一个iphonex 银色,256g,国行,就确定了一个sku id惟一idspu_id attr_id属性id(其实是冗余的)attr_value_id属性的值的id后续持续更新

September 26, 2020 · 1 min · jiezi

电商后台设计权限设计四

在说权限设计前我们先来看个现实中的实例,大家在电影里面应该都见过这样的场景,当一个客户想进入银行仓库查看自己的私人保险柜信息时,通常都需要经过几个步骤的: 1.首先进入银行并说明自己是银行的客户以及来意 2.由业务经理带领进入对应的保险箱仓库(仓库应该不止一个,猜得啊,我也没有进去过^_^)3.业务经理带着客户在众多保险箱中找到属于客户的私人保险箱4.客户输入密码自己打开保险箱查看内部物品在上面的实例中,客户在看到保险箱的物品之前,他需要有这么几个必要条件: 1. 在银行有开户信息,能证明自己是银行客户2. 有进入保险箱仓库的权利3. 在众多的保险箱中找到属于自己的那一个4. 有打开保险箱的钥匙了解了上面的过程,对于我们理解一个系统的权限就会容易很多,我们再来梳理一下用户在系统中看到数据的过程: 1. 用户需要进入系统,这需要后台管理员给用户分配账号(后台系统是没有注册功能的)2. 用户进入系统能看到哪些菜单导航,需要后台给配置3. 通过菜单进入到具体的页面,在页面内能访问多少数据量也是有访问限制的4. 看到数据了,能对数据做多少操作也是有操作限制的在上面的过程中,除了第一步的分配账号是由管理员操作的,剩下的三步都和用户所拥有的权限相关。通过具体操作对象的不同,上面三步可以分为两类: 功能:对功能的限制也称功能权限,主要是对访问区域以及对应操作的管理,如上面的仓库、页面以及页面操作按钮。数据:对数据的限制也称数据权限,主要是对数据资源的访问控制,如保险箱和页面显示数据。知道了需要对哪些对象进行管控限制,那么设计功能也就有了针对性,接下来我们一一分析。 1.功能权限功能权限指的是用户具体能访问哪些菜单,以及对菜单页面中的哪些按钮有操作权限。把多个菜单和对应的功能按钮组织到一起就行程了一个权限列表,具体的组织方式如下图: 对于用户来说,它又是如何获得这些权限列表的呢?通常有以下几种方案: 方案一:ACL(Access control list), 权限访问列表通过直接将用户和权限列表绑定在一起,实现的权限管理 优点:可以为每个用户个性化的设置访问权限。缺点:当用户数量多,并且拥有相同职能的用户较多时,修改一次权限,就需要耗费很大力气。如销售部有很多的销售专员,因为他们的职位相同,所有获得的操作权限相同,但后期添加或者删除一个访问权限,那么需要给所有人相同职位的人都操作一遍,管理员估计得累死。所以这种设计方案在开发中使用的频率很低。方案二:RBAC(Role-Based Access Control),基于角色的访问控制通过先创建一个角色,然后将权限列表在绑定在这个角色上,之后再将角色和绑定到用户身上,用户就可以获得这个角色的所有权限。 优点:首先多人可以公用一个角色;再者如果需要对权限进行调整,只需要调整对应角色的权限即可,也就是只需要一次操作,非常易于操作和管理。缺点:上面优点也是一个缺点,因为权限的操作是按角色来完成的,所以每次修改含有相同角色的用户都会被影响。如对于同一职位的职员,正常来说大家的权限都是一样的,但是也会有特殊情况发生,比如给其中一个添加或减少部分权限,这个时候就没有办法了。对于这种情况,在现有的设计功能上也是有办法解决的。通常的方案就是在给角色绑定权限时,先采用权限最小化原则,能少给就少给,然后再做一个角色绑定多余的权限,再把这个角色也绑定给职员,这个时候两个角色的权限就合并到一起了,也就是用户和角色之间是一对多的关系。 对于RBAC还有几个扩展模型: 第一种:在角色上加入了上下级关系,上级可以继承下级的权限第二种:在角色之间加入了多个约束关系,如角色互斥、用户基数限制等实际开发中这些扩展模型,我们基本都不用,开发成本太多,实际意义和并不是很大,基本的模型已经足够完成我们的系统需要。如果想了解的同学,网上搜索一下RBAC,有很多教程我这里就不说了。 下面是基于RBAC的原型设计图:角色列表页 角色授权页 2.数据权限对于数据权限的管理比较复杂,这个主要还是有具体的业务来决定的,下面我们就看几种常见的数据场景以及解决方案。 场景一:分上下级的数据访问企业中通常都有销售部,销售部下又分各个大区,大区下又划分小组。对于销售人员来说,他们的薪资是和业绩挂钩的,所以没有人会把自己的客户资源让你别人的,这就导致数据处理上,销售专员通常只能看自己的(自愿共享的就不再这里讨论),而对于销售主管则能看到手下所有的销售专员的客户资料,同理,大区经理,和销售总监也都能看到自己手下所有人的客户资源。 在这种场景下的数据,很明显是能看出,这是根据企业的组织架构,根据职员的职位高低来控制数据的访问权限。所以它通常的解决方案是和组织架构相关联的,具体逻辑如下: 1.在给职员分配账号的时候,设置好对应的部门和职位2.当用户获取数据时,根据自己当前的部门和职位,获取到所有下属的职员信息3.将属于这些下属职员的所有客户信息显示出来,这个数据控制就完成了场景二:分区块的数据访问分区块的典型案列就是电商企业员工对多个仓库的访问问题,我们假设有一个大的电商平台,它在全国有多个仓库,如北京仓、上海仓、西安仓、甘肃仓。对于各个仓库的职员来说,通常他们只有当前仓库的数据访问权限,而对于总公司的买手、技术等人员来说,他们平时要巡检查看各个仓库数据,所以需要有全部仓库的数据。而仓库的组织架构和买手、技术所属部门并不存在上下级关系。 在这种场景下的数据,它就是按照分区块的方式来划分。要解决这个问题其实也很简单,就是上面讲的【用户-角色-权限列表】,只是这里的权限列表内容不再是菜单和操作按钮,而是各个仓库。 场景三:数据共享 数据共享的场景是很常见的,像我们经常使用的协同文档软件,里面都会有将内容共享给个人或者共享给某个组的功能。这种场景下的的数据,我们需要通过单独建表,维护共享者和被共享对象的关系,获取数据时从对应关系表中读取对应共享数据即可。 场景四:分状态的数据访问分状态的数据控制,这种场景比较少见,一般出现在流程比较长的业务中。如金融借贷系统中,比如一个用户想要去借贷平台上贷款,假设他们的流程如下图: 通常要完成整个业务流程,需要多个部门相互配合的,由于整个业务涉及了许多客户隐私信息,所以各个部门的职员一般只允许看到对应步骤的数据,如审查组通常只能看到状态为【待审核】的信息,风控组只能看到【待评估】的信息,财务组只能看到【待放贷】的信息。 基于这种场景,有两种解决方案: 1.首先在代码里面配置好部门和职位对应的访问状态码(也就是写死在代码里),当用户访问数据时,根据部门和职位获得对应状态码,再进行数据过滤。优点就是开发比较快写几行逻辑判断就行了,缺点就是如果想给部分人(如公司领导)设置个性化的访问状态码,就很难做到了。2.还是参考【用户-角色-权限列表】的方式,将权限列表里的数据更换成业务状态码,访问数据时,先根据用户设置的角色获取分配的状态码,再根据状态码获取数据。优点是代码开发完后,任意的个性化都可以手动维护并快速配置。缺点就是开发量稍微大一点。上面两种方式其实内部逻辑是一样的,都是先根据用户的部门和职位先获取状态码再获取数据,但是可操作性和扩展性缺完全不一样。 以上就是权限功能涉及的内容,如果你的业务还有更多花样,请在下方留言。最后再给出一张用户绑定权限原型图,大家根据自己的业务适当调整: 3.小结 系统权限模块的设计时需要考虑两点:功能权限和数据权限。功能权限和菜单以及菜单页面内的按钮相关,而数据权限和业务相关。在处理一些有规则调整的功能时,最好设计可以手动维护的,这样对于后期的维护和扩展会非常方便,否则运营经常会找研发修改配置,这样的工作即没有技术含量,时间长了还挺让人烦的,这点我在工作中深有体会。了解更多内容,请关注个人公众号:扬帆去远航(Jackai_liu)

June 25, 2020 · 1 min · jiezi

支撑马蜂窝会员体系全面升级背后的架构设计

流量红利正逐渐走向终结,这已经不再是什么秘密。后互联网时代,如何维系住用户群,提升用户在平台上的体验是整个行业都需要考虑的事情。正是出于这一原因,现在全行业都在关注会员体系的搭建,这也是马蜂窝 2019 年重点投入的方向之一。  面对这个全行业都在发力的会员市场,要对「马蜂窝特色」的会员体系进行有力的支撑,无疑对会员体系的架构设计提出更高的要求。 马蜂窝会员体系建设从 2018 年 9 月份开始启动,经过前期对会员身份和会员权益的摸索,伴随业务的快速发展,到 2019 年上半年,为了让更多用户体验到马蜂窝高质量的会员服务,公司推出了更灵活、维度更多、权益更丰富的会员模式。在这样的背景下,初期较为粗旷的底层技术也需要及时做出调整,对核心架构和服务进行升级。 一、会员身份策略改造早期的会员身份模块由会员产品、用户属性和时间属性共同构成: 可以看到早期的会员产品比较单一,因此将产品信息设计成一级结构。这种设计的好处是逻辑简单,可以快速实现,但不易扩展,一旦新增会员类别以及不同卡种之间出现复杂关系时,不论是对项目或者对代码本身而言,维护成本都将成倍增长。 从 2019 年年初开始,马蜂窝会员体系进行了全面升级,主要体现在以下几个方面: 更完善的获客渠道,增加了在小程序端的服务展示;更丰富的会员类别,新增了非常多卡种,在最初的年度金卡和体验金卡基础上,增加了季度金卡、 7 日卡、「蜂享卡」,未来还计划推出月度金卡、学生卡等;更低的获取门槛,早期的会员身份只能通过在 App 中购买获得,为了让更多用户享受到品质更高的服务,增加了通过完成用户激励任务、供应商合作、产品搭售、线下实体卡等会员获取方式。这也意味着,同一时间段内用户的会员身份将变得愈发复杂,早期单一的会员身份策略和模型设计已经不能满足需求。重新设计会员身份的时候,我们明确了未来无论业务线如何划分会员身份,底层结构都要能够较好地支持,因此决定把会员模块身份抽离出来。会员体系升级后,产品信息调整为以 SKU 作为最小粒度重新划分,同时增加了用户信息中的来源以及获取渠道信息: 二、会员中心架构设计和优化在明确了新的会员身份策略后,我们对整个会员体系进行了梳理,将现阶段的会员中心架构设计如下: 合上面的架构图来看,目前马蜂窝会员中心系统主要划分为数据存储、核心服务、接口层、应用层四大部分: 数据储存:主要基于 MySQL 和 Redis,以及马蜂窝统一日志系统 MES核心服务:这是当前马蜂窝会员体系中最重要的一层。核心服务又可以分为三大块:(1)「四驾马车」:会员身份、权益、增值服务接入、会员积分,驱动着整个会员体系的运转; (2)交易营销:辅助四驾马车快速往前跑; (3)支撑模块:与会员体系对接的公司级别支撑模块,包括风控、监控、日志、消息总线、商家结算对账等 接口层:会员体系对外暴露的接口,包括了会员身份、权益领取、蜂蜜消费等接口应用层:主要是面向 C 端的应用,包括会员频道页、蜂蜜中心、用户权益中心、任务中心等下面重点围绕「核心服务」层展开介绍。 2.1「四驾马车」2.1.1 会员身份目前,市面上很多常见的会员产品都是采用普通的续费模式,比如一些视频平台的年度会员、季度会员。这种模式的特点是只进行时间的区分,在会员身份后生效后享受的权益完全相同,通过续费使权益时效得到相应延长。 但是马蜂窝由于业务的特殊性,会员体系需要设计得更为立体。如果只采用单纯的续费模式,会影响高忠诚度用户的使用体验。 首先,在同一类别的会员身份下,时长不同的产品对应的权益也不同。以金卡会员为例,季度金卡、年度金卡这种同类别下的会员身份,可以通过续费升级,但它们彼拥有的权益不完全相同,比如年度金卡 96 折抵额上限为 500 元,季度金卡只有 100 元。另外,同一用户在同一时间内,只要满足条件,就可同时拥有不同类别的卡种,比如金卡和蜂享卡。为了满足上述需求,我们决定引入用户身份的叠加以及续费模型。通过增加会员 SKU 叠加、续费关系表,使用户在一个时间段内不仅可以同时拥有多种身份,还可以续费已有卡种。 上图是会员身份的时间轴示意。横轴代表时间,纵轴代表不同的卡种。我们通过最终 SKU 时间轴便可以确认用户当前的会员身份。 我们将用户已有的每个 SKU 时间轴拉平,当用户在某个时间点发出购买新卡种的请求时,查看当前生效的时间轴中是否已有用户正在购买的 SPU,如果没有则叠加,如已有则需要再判断 SKU 之间的配置策略,决定是叠加还是续费;然后继续计算出正在购买的 SKU 生效时间轴;接下来根据配置好的规则,对比当前购买生效时间轴和已有 SKU 时间轴的身份关系,决定用户是否可以完成此次购买,如: 前置身份:指必须已经购买某个 SKU,才可以购买当前 SKU冲突身份:指如果已经购买某个 SKU,就不可以购买当前 SKU为了满足不同的业务需求,这里的叠加、续费关系都是可以通过运营来配置的。整个流程大致示意如下: ...

July 26, 2019 · 1 min · jiezi

SOA架构电商商城系统平台框架

对以往做过的电商项目技术架构做一次总结。 使用SOA分布式架构的方式去治理电商项目,解决分布式、高并发、高可用、集群、负载均衡等问题。 互联网大型网站项目架构拆分: 一、前端 1.资源静态化 网上商城系统网站静态化资源就是请求一个url访问一个服务器上面的网页,而且这个网页上的资源基本不会发生变化,所以我们的每次请求其实都是重复请求。 2.负载均衡 负载均衡是分布式服务架构设计必须考虑的因素之一,它将请求/数据均匀的平摊到各个操作元件中。 二、应用服务 1.业务模块化 将应用程序根据网上电子商城系统业务模块进行拆分,使每个模块能够独立运行在服务器上。在发布时,某个模块的问题不会影响到整个应用程序,只需解决出现问题的模块,然后将其发布,是相对粗粒度的服务应用。 2.服务总线 所有的应用之间需要连接时,如果应用变多,相对的连接数也会成倍增长,这时需要一个服务总线,将所有的服务接口透明化出来,对于应用于应用之间的连接,只需经过服务总线这个过程,实现1对1的连接。 3.消息队列 对于互联网架构异步操作必不可少,使用消息队列可以解决各种操作的同步性,将部分操作变成异步。异步可以防止互联网网站的高峰操作。 同时消息队列对应用之间进行解耦,应用之间的操作不需要约定,也可以处理相应的操作。 4.读写分离 数据库的写比较耗时,而数据库的读效率很高,所以数据库的写操作影响了查询效率。在应用中通过切换数据源实现读写分离。 5.缓存 缓存能够减轻数据库访问的一定压力,加快访问速度,是互联网架构中必不可少的元素。 三、数据库 1、分库分表 垂直分表:主要是分散系统负载,让一台机器做的事情变成几台服务器做。 水平分表:缩小索引区大小,使查找更快。 2、分布式系统 1.分布式的应用和服务 将应用和服务进行分割,应用和服务模块分布式部署。这样做不仅提高并发访问能力、减少数据库连接和资源消耗,还能使不同 应用复用服务,利于扩展。 2.分布式静态资源 对网站静态资源如JS、CSS、图片资源进行分布式部署,减轻应用服务器负载压力,提高访问速度。 原创文章作者:数商云,转载请标注来源

May 7, 2019 · 1 min · jiezi

Laravel 开源电商体验与部署

体验开源项目已经部署了体验环境,开源通过扫描下方小程序码进行体验:我们部署了 Laravel API demo 环境,访问地址:https://demo-open-admin.ibran… , 访问默认是 Laravel 的欢迎页面,可通过 API 文档了解请求地址和相关参数说明。我们提供了完整的 Postman 文件,可以通过百度网盘下载:Postman 软件下载 https://pan.baidu.com/s/1bqVD5MJ 密码:4lkuPostman API 请求下载 https://pan.baidu.com/s/17Etk… 提取码: 9m54Laravel API 部署要本地开发部署,需要先搭建好本地的开发环境,本文已经假设你已经会通过各类工具(homestead)等来开发 Laravel 项目下载源码git clone https://github.com/ibrandcc/ecommerce-open-api或者composer create-project ibrand/open-ecommerceLaravel 常规安装以下步骤基本是 Laravel 项目安装需要执行的必须步骤安装依赖包我们为了方便大家使用,在项目的 composer.json 中已经默认使用了国内的 composer 镜像源,感谢 laravel-china下载好源码后,直接执行composer install -vvv设置 .env.env 文件中的数据库部分设置成自己开发的数据库配置cp .env.example .env应用密钥通过以下命令来生成应用密钥,密钥值在 .env 文件 APP_KEYphp artisan key:generate发布相关资源执行 publish 命令发布所有相关的资源,包含配置项,静态资源等。php artisan vendor:publish –all设定公共磁盘软连接Laravel 中上传文件通常是存储在 storage/app/public 目录下,该目录下的文件可以通过 php artisan storage:link 命令软连接到 public 目录下,以供外部访问。更多细节请见:文件系统完成安装执行内置命令完成数据库及其他配置和数据初始化等任务。php artisan ibrand:store-install 导入商品数据该项目使用标准的 Laravel migration 来创建数据表,虽然 ibrand:store-install 命令进行了数据初始化,但是为了方便,我们准备一份完整的商品数据,有助于理解商品模块的系统设计和快速体验。商品示例数据SQL文件在 modules/EC.Open.Core/database 目录下,可以通过使用各类 mysql 管理工具 或者 mysql 命令执行 sql 文件导入。sql 文件地址: goods_demo_data.sql最后一步请把 .env 文件中 APP_URL 值设置为你当前的域名,比如开源 demo 环境中APP_URL=https://demo-open-admin.ibrand.cc因为后续为了方便上 https ,所以此处 APP_URL 值必须指定当前项目所在域名。欢迎提交问题,觉得项目不错,记得 star : ) 项目传送门:ibrand-ecommerce-open-source ...

December 26, 2018 · 1 min · jiezi