分布式架构设计之电商平台
什么是软件体系结构? 虽然每个人的答案都不一样,但我认为优秀的软件体系结构除了业务功能外,还具有一定的高性能、高可用性、高可扩展性、可扩展性等非功能性需求。 另一方面,软件体系结构由业务体系结构和技术体系结构两部分组成。 有了业务结构,就有了软件体系结构,可以满足业务需求。 因此,在设计软件体系结构时,必须分为业务体系结构设计和技术软件体系结构设计。 两者不能分离哦。 然后,以实际运行的EC平台为例,说明EC平台体系结构设计。 由于不同行业的产品、系统业务不同,催生的系统软件的实现要求和架构设计不同。
l体系结构设计的必要性
lEC平台的需求
l平台的业务体系结构
l平台的技术体系结构
l平台体系结构总结
一.体系结构设计需要
架构师,我想很多人都知道,其实这个职位的头衔最早不在IT领域。 那是近年来由互联网的发展引起的需求。 现阶段数据量高、并发性强的活动使得许多传统技术人员望尘莫及,企业越来越关注系统架构的重要性,于是不同行业开始招聘架构技术人员,架构应运而生。
1、体系结构设计条件
我个人不建议具备以下条件的人赶紧建立架构。 其实,架构师的头衔并不像想象的那么神秘。 到底是什么节点的同学呢?
a、对架构不感兴趣,但需求很紧
b、进入IT行业,年限不足4年的;
c、主观能动性弱,安于现状的;
请注意,以上只是个人考虑,不具有代表性。 如果能循序渐进的话,秒杀上面的一些不满只是时间问题。
2、体系结构设计的好处
a、更好地理顺业务结构体系
b、更好的扩展、维护及性能优化;
c、更好适应企业业务弹性推进
d、更好适应大数据的清洗和应对;
e、更好的稳定性、低成本、快速迭代
3、架构设计注意事项
体系结构设计应该关注的是如何构建体系结构,而是基于业务需求的严密分析,以及为了实现这一需求,需要更好、更长远地发展什么样的技术否则,体系结构设计就会适得其反,增加不必要的工作量。 那么,详细说明架构设计的战略。
二.电商平台需求
1、客户需求
a、网上购物、网上支付或货到付款
b、购买商品后,客户可以与客户取得联系;
c、商品采购过程、物流的管理和跟踪;
d、收到商品后,商品、物流评估评分;
客户需求最高,代表了企业的核心需求。 当然,企业的需求还包括许多其他非功能性的需求。 具体请参考需求组织部分。
2、整理需求
客户需求
功能要求
非功能要求
在网上购买商品
购物车、结算、会员管理
用户体验(性能、可用性)
在线与顾客沟通
在线支持功能
实时通信能力
网上或货到付款
多种支付方式,包括网上或货到付款
安全、加密、多种支付方式灵活切换
网上商品物流评论评分
商品、物流评价评分
物流系统对接
以上只是对电商平台的需求进行了简单的列举,还没有列举出很多需求。 在这里,只是为分析和设计EC平台的框架做准备。 具体其他需求请参考京东、淘宝等商城。
三.平台业务结构
根据业务需求进行子系统模块划分,可以划分为商品子系统、购物子系统、支付子系统、物流子系统、客户服务子系统、评论子系统; 非核心需求可以划分为呼叫子系统、注释子系统和接口子系统。 另外,根据各子系统的核心等级,可以分离出核心子系统和非核心子系统,前者包括商品子系统、购物子系统、支付子系统以及物流子系统; 后者包括注释子系统、呼叫子系统和接口子系统。 需要注意的是,一般大型电商平台的物流系统是单独分离的系统(入库、出库、库存管理、配送管理及商品管理),这里划分子系统的主要目的是展示核心体系结构,在该体系结构中
1、业务分割目的
a .为了解决各模块子系统之间的耦合、维护及可扩展性;
b、容易单独部署子系统,避免集中部署出现一个问题,不能全部使用;
c、指派专门团队,负责具体子系统,最大化生产安排;
D .支持大数据,在压力较大时保护核心子系统正常使用;
2、业务结构图
上面的业务结构图将核心业务和非核心业务进行划分,同时各系统必须独立部署实现,可以控制大数据量,使各系统独立运行,提高可用性,必要时可以暂停非核心系统
的资源开销,保证核心业务正常为用户服务。
四、平台的技术架构
在上面业务架构图基础上,我们需要一个技术架构的演变过程,一切只为满足用户的体验和支撑为前提,所以技术架构的搭建不是一蹴而就的,而是随着业务的不断衍变,系统的架构会逐渐完善更新,以实现应对业务数据量的冲击。
1、基本的架构设计
记得很早的时候,很多中小企业所采用的架构设计十分简单,基本使用一台服务器来满足一切需求部署,比如:一台服务器同时用作应用部署、数据库存储以及图片存储等,不料的是待用户数据达到50万以上,系统出现很多性能问题,尽管对数据库和程序做个各种性能优化,结果仍无明显改善,架构如下:
后来,IT程序猿发现图片的读写严重影响了系统性能,并将图片单独存放在独立服务器中,并且在架构中引入了Cache中间件,比如:Memcache,这种做法是可取的,而且比原来性能提高了1-2个性能级别,架构设计如下:
2、初级的架构设计
前几年,一般的电商网站的做法是选用三台服务器,一台部署应用,一台部署数据库,一台部署NFS文件系统,做到将各个规模庞大并耗用性能的部分剥离到不同服务器设备,再配备必要的缓存中间件,基本可以满足近1000万的数据量,具体的架构图如下:
但是,目前主流使用的网站架构已经不同,大多采用集群的方式来实现负载均衡和高可用性,架构可以是下面的样子:
注意:
如果涉及到多台网站服务器的话,就会存在Session如何同步的问题,一般也是最为常用的做法,就是使用Cache中间件来存储和管理Session信息。
3、优化的架构设计
这里为解决高并发,高可用的大型电商网站的架构设计方案,主要采用了分布式、集群、负载均衡、反向代理、消息队列及多级缓存技术。该架构设计方案,是现今比较流程的大型电商网站采用的架构模式,比如:淘宝、京东等,也许会有细微不同的地方,但大同小异哦!具体的架构图方案如下:
3.1、应用集群部署
3.2、分布式
分布式,即为借助互联网环境连接不同服务器,并各个连接的服务器之间通信交互,提供服务异步调用和返回的通信机制。在这里,主要就是实现商品评论、购物客服、支付接口及物流打分系统各自所在服务器间的通信化,我们可以通过RPC协议直接在他们之间交互通信即可,而上面优化的架构即为分布式架构。
3.3、集群
集群,分为服务器集群、数据库集群及缓存中间件集群等,但这里主要指的是数据库的集群设计。数据库集群,可以实现主备数据库,做到读写分离以及高可用的实现。大型网站需要存储大规模的数据量,需要实现高可用、高并发、高性能的系统设计,一般采用冗余的方式进行系统设计,具体如下架构:
冗余方式设计数据库集群,最为常用的方式为:读写分离和分库分表了。主数据库服务器只负责写入数据,而备用服务器数据库只负责读取数据,可以做到降低数据库的IO压力;另外,如果业务系统比较庞大,可以进一步根据业务的关系度及增长频率分库,若库中的但表数据量比较大,可进一步分表,具体的分库分表可查看我的博客文章数据库的分库分表。
3.4、消息队列
消息队列,是分布式系统的常用组合,其可以解决子系统或模块间的异步通信,实现高可用,高性能的通信系统,比如:可以用在购物和配送环节,如下:
A、用户下单后,写入消息到队列,并立即返回结果给客户端;
B、库存子系统,读取消息队列,完成消减库存;
C、配送子系统,读取消息队列,并进行配送货品;
目前常使用的MQ技术有:Rabbit MQ、Active MQ、Zero MQ及MS MQ,需要根据具体的使用场景进行选择。具体的架构如下:
3.5、缓存策略
缓存,是一种缓解系统压力的存储技术,主要使用在缓存数据库IO压力而设计。按照位置的不同,可以分为本地缓存和分布式缓存两种,本篇架构采用两级缓存,一级缓存为本地缓存,二级缓存为分布式缓存。而一级缓存一般用来缓存基本不变或规律变化的数据,二级缓存用来缓存所有需要的数据信息,应用程序首先访问一级缓存;如果一级缓存没有需要的信息,那么取访问分布式缓存,如果分布式缓存也没找到需要的信息,最后去访问数据库获得数据。另外,根据业务需要,缓存分为自动过期和触发过期,具体的架构图如下:
3.6、服务抽象化
抽象化概念,可以很好的实现低耦合,高拓展作用,我们可以将各个子系统公用的功能或模块抽取出来,封装为共有的服务组件或接口,供各个现有子系统或是新增系统调用,这也是SOA架构的基础思想,具体的架构如下:
五、平台架构的总结
这里主要总结的是优化架构,架构按层次结构罗列组织,共分为四层,分别为负载均衡代理层、应用集群系统层、分布式服务层及数据资源层,层次分工明确,高拓展,低耦合,负载均衡、集群、分布式及缓存等技术的使用,架构如下:
好了,电商平台的架构设计就介绍到这里,本篇主要是介绍架构设计的思路及应用的核心技术,供在架构设计的同学参考借鉴哦!由于作者水平有限,如有不对或是误导的地方,请不吝指出讨论(QQ群:497552060(新))。
好了,电商平台架构的初级设计就到这里,由于作者水平有限,如有不正确或是误导的地方,请不吝指出讨论(技术交流群:497552060(新))
转载请标明出处,原创文章来之不易,标明转载地址:http://blog.csdn.net/why_2012_gogo/article/details/52823761,谢谢