大型网站架构系列:电商网站架构案例(3)

本文章是电商网站架构案例的第三篇,主要介绍数据库集群,读写分离,分库分表,服务化,消息队列的使用,以及本电商案例的架构总结。

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

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

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

本案例在业务拆分的基础上,结合分库分表和读写分离。如图所示:

(1)业务拆分后:每个子系统需要单独的库;

(2)如果单独的库太大,可以根据业务特性,进行再次分库,比如商品分类库,产品库;

(3)分库后,如果表中有数据量很大的,则进行分表,一般可以按照Id,时间等进行分表;(高级的用法是一致性Hash)

(4)在分库,分表的基础上,进行读写分离;

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

分库分表后序列的问题,JOIN,事务的问题,会在分库分表主题分享中,介绍。

6.6服务化

将多个子系统公用的功能/模块,进行抽取,作为公用服务使用。比如本案例的会员子系统就可以抽取为公用的服务。

6.7消息队列

消息队列可以解决子系统/模块之间的耦合,实现异步,高可用,高性能的系统。是分布式系统的标准配置。本案例中,消息队列主要应用在购物,配送环节。

(1)用户下单后,写入消息队列,后直接返回客户端;

(2)库存子系统:读取消息队列信息,完成减库存;

(3)配送子系统:读取消息队列信息,进行配送;

目前使用较多的MQ有Active MQ,Rabbit MQ,Zero MQ,MS MQ等,需要根据具体的业务场景进行选择。建议可以研究下Rabbit MQ。

6.8其他架构(技术)

除了以上介绍的业务拆分,应用集群,多级缓存,单点登录,数据库集群,服务化,消息队列外。还有CDN,反向代理,分布式文件系统,大数据处理等系统。

此处不详细介绍,大家可以问度娘/Google,有机会的话也可以分享给大家。

七、架构总结

以上是本次分享的架构总结,其中细节可参考前面分享的内容。其中还有很多可以优化和细化的地方,因为是案例分享,主要针对重要部分做了介绍,工作中需要大家根据具体的业务场景进行架构设计。

以上是电商网站架构案例的分享一共有三篇,从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型。除具备功能需求外,还具备一定的高性能,高可用,可伸缩,可扩展等非功能质量需求(架构目标)。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发-青出于蓝

MySQL之分页多次查询优化 原

    如果在第一个查询和第二个查询之间新增或者删除了一些数据,那么查询的结果就不准备了。我想大家都能想象这个场景,在此就不举例。

13450
来自专栏软件开发-青出于蓝

MySQL5.7之开启远程连接 原

(adsbygoogle = window.adsbygoogle || []).push({});

1.1K20
来自专栏软件开发-青出于蓝

将.sql文件中的数据库结构和数据存储入数据库中

mysql>source C:\Users\Duan\Desktop\projectgo.sql  (直接回车就行,不需要以分号结尾)

8720
来自专栏老蒋专栏

13个小技巧用来提高WordPress程序网站的访问速度

如今我们做网站大部分直接使用开源CMS程序就可以实现,且在众多开源程序中WordPress应该是被应用最多的,没有之一。前几天也有看到新闻,WP程序在众多优秀网...

18240
来自专栏软件开发-青出于蓝

Redis之Java调用哨兵 原

List-7 由于我们使用了JDK的Serializable作为序列化,所以对象一定要实现Serializable接口,不然会报错的

26340
来自专栏软件开发-青出于蓝

读张逸的领域驱动设计笔记 原

    领域驱动设计(Domain Driven Design,DDD)是Eric Evans提出的综合软件系统分析和设计的面向对象建模方法。它改变了传统软件开...

17320
来自专栏软件开发-青出于蓝

并发设计之A系统调用B系统 原

    比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付按钮,这时A系统会不断的发送请求给B系统(每点击...

7920
来自专栏软件开发-青出于蓝

MySQL之安装美团点评的SQLAdvisor

    注意:是在Centos7上安装SQLAdvisor,必须是在没有安装MySQL的Centos7上安装,因为如果事先安装了MySQL,那么安装SQLAdv...

21550
来自专栏软件开发-青出于蓝

MySQL之如何消除大量的@@session.tx_read_only

    当有好多个线程(我测试时是300个线程)去对数据库进行操作时,用如下命令查看

57040
来自专栏软件开发-青出于蓝

MySQL之查看默认的事物隔离级别 原

    List-2中可以看出事物隔离级别是repeatable-read;事物的read-only是被关闭的,这个tx_read_only在Spring的注解...

38820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励