010-64928252 400-6446-365

高端电商网站建设架构分析

2019-04-19

电商行业技术特点;
①技术新:(NoSql推广首在社区网站和电商项目),发展快,需求推动技术的革新。

②技术范围广:除了java,像淘宝前端还使用了PHP,数据库MySQL或者oracle,nosql,服务器端使用Linux,服务器安全、系统安全

③分布式:以前是在一台机器上做运算,现在是分散到很多机器上,最后汇总起来。(集中式向分布式进行考虑)由需求来推动

④高并发、集群、负载均衡、高可用:由并发问题采用集群进行处理,其中,集群会涉及服务器的主从以及分布问题,使用负载均衡。(权重高低)高可用是对用户而言,用户的服务不中断(系统升级,服务不中断,淘宝每周更新2次)。

⑤海量数据:双11,570亿的背后,订单有多少?浏览次数有多少?商品会有多少?活动相关数据?

⑥业务复杂:不要简单的认为是:商品展示出来后,加入购物车后购买就完成了。后台特别复杂,比如优惠(包邮、满减)

⑦系统安全:系统上线必须通过系统安全部门审核通过。前年CSDN数据泄露。快捷酒店数据泄露(通过身份证就可以查看你的开房记录)。近几年,安全意识逐步在提高。


电商网站需求;

客户需求:

    建立一个全品类的电子商务网站B2C),用户可以在线购买商品,可以在线支付,也可以货到付款;
    用户购买时可以在线与客服沟通;
    用户收到商品后,可以给商品打分,评价;
    目前有成熟的进销存系统;需要与网站对接;
    希望能够支持3~5年,业务的发展;
    预计3~5年用户数达到1000万;
    定期举办双11,双12,三八男人节等活动;
    其他的功能参考京东或国美在线等网站。

客户就是客户,不会告诉你具体要什么,只会告诉你他想要什么,我们很多时候要引导,挖掘客户的需求。好在提供了明确的参考网站。因此,下一步要进行大量的分析,结合行业,以及参考网站,给客户提供方案。

需求功能矩阵

需求管理传统的做法,会使用用例图或模块图(需求列表)进行需求的描述。这样做常常忽视掉一个很重要的需求(非功能需求),因此推荐大家使用需求功能矩阵,进行需求描述。

图片存储的要求(海量小图片)用户可以在线购买商品会员管理,购物车,结算功能良好购物体验(可用性,性能)在线支付或货到付款多种在线支付方式支付过程要安全,数据加密(安全性)多种支付接口灵活切换(灵活性,扩展性)可以在线与客服沟通在线客服功能可靠性:即时通讯商品打分评价商品评论 目前有成熟的进销存系统对接进销存属于约束条件对接时要考虑数据一致性,鲁棒性支持3~5年,业务的发展 属于约束条件伸缩性,可扩展性3~5年用户数达到1000万 约束条件举办双11,双12,三八男人节等活动活动管理,秒杀突增访问流量(可伸缩)实时性要求(高性能)参考京东或国美在线 参考条件

以上是对电商网站需求的简单举例,目的是说明(1)需求分析的时候,要全面,大型分布式系统重点考虑非功能需求;(2)描述一个简单的电商需求场景,使大家对下一步的分析设计有个依据。

、网站初级架构

一般网站,刚开始的做法,是三台服务器,一台部署应用,一台部署数据库,一台部署NFS文件系统。

这是前几年比较传统的做法,之前见到一个网站10万多会员,垂直服装设计门户,N多图片。使用了一台服务器部署了应用,数据库以及图片存储。出现了很多性能问题。

如下图:

但是,目前主流的网站架构已经发生了翻天覆地的变化。一般都会采用集群的方式,进行高可用设计。至少是下面这个样子。

(1)       使用集群对应用服务器进行冗余,实现高可用;(负载均衡设备可与应用一块部署)

使用数据库主备模式,实现数据备份和高可用;
、系统容量预估

预估步骤:

    注册用户数-日均UV量-每日的PV量-每天的并发量;
    峰值预估:平常量的2~3倍;
    根据并发量(并发,事务数),存储容量计算系统容量。

客户需求:3~5年用户数达到1000万注册用户;

每秒并发数预估:

    每天的UV为200万(二八原则);
    每日每天点击浏览30次;
    PV量:200*30=6000万;
    集中访问量:24*0.2=4.8小时会有6000万*0.8=4800万(二八原则);
    每分并发量:4.8*60=288分钟,每分钟访问4800/288=16.7万(约等于);
    每秒并发量:16.7万/60=2780(约等于);
    假设:高峰期为平常值的三倍,则每秒的并发数可以达到8340次。
    1毫秒=1.3次访问;

没好好学数学后悔了吧?!(不知道以上算是否有错误,呵呵~~)

服务器预估:(以tomcat服务器举例)

    按一台web服务器,支持每秒300个并发计算。平常需要10台服务器(约等于);[tomcat默认配置是150]
    高峰期:需要30台服务器;

容量预估:70/90原则

系统CPU一般维持在70%左右的水平,高峰期达到90%的水平,是不浪费资源,并比较稳定的。内存,IO类似。

以上预估仅供参考,因为服务器配置,业务逻辑复杂度等都有影响。在此CPU,硬盘,网络等不再进行评估。

网站架构分析

根据以上预估,有几个问题:

    需要部署大量的服务器,高峰期计算,可能要部署30台Web服务器。并且这三十台服务器,只有秒杀,活动时才会用到,存在大量的浪费。
    所有的应用部署在同一台服务器,应用之间耦合严重。需要进行垂直切分和水平切分。
    大量应用存在冗余代码
    服务器SESSION同步耗费大量内存和网络带宽
    数据需要频繁访问数据库,数据库访问压力巨大。

大型网站一般需要做以下架构优化优化是架构设计时,就要考虑的,一般从架构/代码级别解决,调优主要是简单参数的调整,比如JVM调优;如果调优涉及大量代码改造,就不是调优了,属于重构):

    业务拆分
    应用集群部署(分布式部署,集群部署和负载均衡)
    多级缓存
    单点登录(分布式Session)
    数据库集群(读写分离,分库分表)
    服务化
    消息队列
    其他技术

网站架构优化
1业务拆分

根据业务属性进行垂直切分,划分为产品子系统,购物子系统,支付子系统,评论子系统,客服子系统,接口子系统(对接如进销存,短信等外部系统)。

根据业务子系统进行等级定义,可分为核心系统和非核心系统。核心系统:产品子系统,购物子系统,支付子系统;非核心:评论子系统,客服子系统,接口子系统。

业务拆分作用:提升为子系统可由专门的团队和部门负责,专业的人做专业的事,解决模块之间耦合以及扩展性问题;每个子系统单独部署,避免集中部署导致一个应用挂了,全部应用不可用的问题。

等级定义作用:用于流量突发时,对关键应用进行保护,实现优雅降级;保护关键应用不受到影响。
2应用集群部署(分布式,集群,负载均衡)

分布式部署:将业务拆分后的应用单独部署,应用直接通过RPC进行远程通信;

集群部署:电商网站的高可用要求,每个应用至少部署两台服务器进行集群部署;

负载均衡:是高可用系统必须的,一般应用通过负载均衡实现高可用,分布式服务通过内置的负载均衡实现高可用,关系型数据库通过主备方式实现高可用。

3 多级缓存

缓存按照存放的位置一般可分为两类本地缓存和分布式缓存。本案例采用二级缓存的方式,进行缓存的设计。一级缓存为本地缓存,二级缓存为分布式缓存。(还有页面缓存,片段缓存等,那是更细粒度的划分)

一级缓存,缓存数据字典,和常用热点数据等基本不可变/有规则变化的信息,二级缓存缓存需要的所有缓存。当一级缓存过期或不可用时,访问二级缓存的数据。如果二级缓存也没有,则访问数据库。

缓存的比例,一般1:4,即可考虑使用缓存。(理论上是1:2即可)。

4,单点登录(分布式Session)

系统分割为多个子系统,独立部署后,不可避免的会遇到会话管理的问题。一般可采用Session同步,Cookies,分布式Session方式。电商网站一般采用分布式Session实现。

再进一步可以根据分布式Session,建立完善的单点登录或账户管理系统

流程说明

    用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session;
    用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页;
    一般采用Cache中间件实现,建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息;
    存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时;

结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话。


数据库集群(读写分离,分库分表)

大型网站需要存储海量的数据,为达到海量数据存储,高可用,高性能一般采用冗余的方式进行系统设计。一般有两种方式读写分离和分库分表。

读写分离:一般解决读比例远大于写比例的场景,可采用一主一备,一主多备或多主多备方式。

本案例在业务拆分的基础上,结合分库分表和读写分离

    业务拆分后:每个子系统需要单独的库;
    如果单独的库太大,可以根据业务特性,进行再次分库,比如商品分类库,产品库;
    分库后,如果表中有数据量很大的,则进行分表,一般可以按照Id,时间等进行分表;(高级的用法是一致性Hash)
    在分库,分表的基础上,进行读写分离;

相关中间件可参考Cobar(阿里,目前已不在维护),TDDL(阿里),Atlas(奇虎360),MyCat(在Cobar基础上,国内很多牛人,号称国内第一开源项目)。


电商网站后台功能模块分析;

后台:各类主要信息的概要统计,包括客户信息、 订单信息、商品信息、库存信息、评论和最近反馈等。 

商品模块: 

 1.商品管理:商品和商品包的添加、修改、 删除、复制、批处理、商品计划上下架、SEO、商品多媒体上传等,可以定义商品是实体还是虚拟,可以定义是否预订、是否缺货销售等。

2.商品目录管理:树形的商品目录组织管理,并可以设置关联/商品推荐。   

3.商品类型管理:定义商品的类型,设置自定义属性项、SKU项和商品评论项。  

4.品牌管理:添加、修改、删除、上传品牌 LOGO。   

5.商品评论管理:回复、删除。
销售模块: 

  1.促销管理:分为目录促销、购物车促销和 优惠券促销三类,可以随意定义不同的促销规则,满足日常促销活动:购物折扣、购物赠送积分、购物赠送优惠券、购物免运输费、特价商品、特定会员购买特定商品、折上折、买二送一等。   2.礼券管理:添加、发送礼券 

  3.关联/推荐管理――基于规则引擎,可以支持多种推荐类型,可手工添加或者自动评估商品。

订单模块: 

  1.订单管理:可以编辑、解锁、取消订单、 拆分订单、添加商品、移除商品、确认可备货等,也可对因促销规则发生变化引起的价格变化进行调整。订单处理完可发起退货、换货流程。 

  2.支付:常用于订单支付信息的查看和手工 支付两种功能。手工支付订单,常用于“款到发货”类型的订单,可理解为对款到发货这类订单的一种补登行为。 

  3.结算:提供商家与第三方物流公司的结算 功能,通常是月结。同时,结算功能也是常用来对“货到付款”这一类型订单支付后的数据进行对帐

库存模块: 

  1.库存管理:引入库存的概念,不包括销售 规则为永远可售的商品,一个SKU对应一个库存量。库存管理提供增加、减少等调整库存量的功能;另外,也可对具具体的SKU设置商品的保留数量、***小库存量、再进货数量。每条SKU商品的具体库存操作都会记录在库存明细记录里边。

2.查看库存明细记录。 

  3.备货/发货:创建备货单、打印备货单、打印发货单、打印EMS快递单、完成发货等一系列物流配送的操作。 

  4.退/换货:对退/换货的订单进行收货流程的处理。

内容模块: 

  1.内容管理:包括内容管理以及内容目录管理。内容目录由树形结构组织管理。类似于商品目录的树形结构,可设置目录是否为链接目录。   

2.无限制创建独立内容网页,比如关于我们,联系我们。 

   3.广告管理:添加、修改、删除、上传广告、 定义广告有效时限。 

4.可自由设置商城导航栏目以及栏目内容、栏目链接。

客户模块: 

  1.客户管理:添加、删除、修改、重设密码、 发送邮件等。   2.反馈管理:删除、回复。 

  3.消息订阅管理:添加、删除、修改消息组 和消息、分配消息组、查看订阅人。   4.会员资格:添加、删除、修改。

系统模块: 

  1.安全管理:管理员、角色权限分配和安全日志 

  2.系统属性管理:用于管理自定义属性。可关联模块包括商品管理、商品目录管理、内容管理、客户管理。

3.运输与区域:运输公司、运输方式、运输 地区。   4.支付管理:支付方式、支付历史。   5.包装管理:添加、修改、删除。 

  6.数据导入管理:商品目录导入、商品导入、 会员资料导入。   7.邮件队列管理:监控邮件发送情况,删除 发送异常邮件。

报表模块: 
  缺省数个统计报表,支持时间段过滤、支持按不同状态过滤、支持HTML、PDF和Excel格式的导出和打印。   1.用户注册统计   2.低库存汇总   3.缺货订单   4.订单汇总   5.退换货



TAG标签耗时:0.01496410369873 秒
010-64928252/400-6446-365 我现在就想找顾问聊聊
让决策变的简单
好的开始是成功的一半
您需要一位互联网
顾问提供专业咨询
高端网站建设 · 小程序 · APP · 微信 · H5网站 · 电商平台建设
网络营销 · 年度运营 · H5场景 、游戏 · VR 、AR · AI人工智能