Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【cursor重构谷粒商城】03——谷粒商城技术架构选型存在哪些不足?

【cursor重构谷粒商城】03——谷粒商城技术架构选型存在哪些不足?

作者头像
半旧518
发布于 2025-01-23 00:12:18
发布于 2025-01-23 00:12:18
3070
举报
文章被收录于专栏:半旧的技术栈半旧的技术栈

前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。

本项目将基于谷粒商城项目,并且对谷粒商城项目进行二次重构,使其满足最新的主流技术栈要求。

上一篇文章,给大家演示了用cursor快速开发一个项目的demo,这篇文章,我们主要对谷粒商城进行介绍。让您了解必要的背景知识。

一、项目简介

谷粒商城分为以下篇章:

分布式基础(全栈开发篇): 涵盖项目的基础知识和全栈开发技术。

分布式高级(微服务架构篇): 深入探讨微服务架构的高级概念和实践。

高可用集群(架构师提升篇): 专注于高可用集群的架构设计和优化。

项目架构

但是,我不止会重复上面的架构,而是会优化,重构。比如cicd部分,会考虑使用coze。敬请期待。

二、什么是B2C模式

谷粒商城是一个B2C电商模式的项目。

B2B(Business to Business):

企业与企业之间的交易模式,通常用于批发和大宗商品交易。 例如:阿里巴巴、慧聪网等。 B2C(Business to Consumer):

企业直接面向消费者销售产品或服务的模式。 例如:京东、天猫等。 C2C(Consumer to Consumer):

消费者与消费者之间的交易模式,通常通过第三方平台进行。 例如:淘宝、闲鱼等。 C2B(Consumer to Business):

消费者向企业提供产品或服务的模式,如消费者提供设计方案或参与产品测试等。 例如:一些众包平台。 O2O(Online to Offline):

线上与线下相结合的模式,消费者在线上获取信息或下单,线下完成交易或体验。 例如:美团、大众点评等。

三、前置知识

以下是尚硅谷官方给的。

上面redisdocker,vue你不会,甚至maven不会,spring cloud不会,git不会,都没关系,我会带你入门,最快速度学到【够用】。

四、效果

可以下载源码(官方源码),了解之前的谷粒商城项目效果。 https://github.com/shuhongfan/GuliMall

五、微服务的基础概念

为什么需要微服务?

数字化生活提倡万物互联,一个家庭可能会有手机、电脑、平板、家电等等,如果这些东西都来自不同的产商,那么他们之间的连结肯定不会特别容易。如果有一个产商可以把这些产品都来个全家桶,数字化生活就便利了,小米、华为、苹果,很多公司都在做这样的事情。

而在互联网的项目中,技术日新月异、项目的功能模块也越来越多,网关、日志、容错、授权…这些不同厂家推出的不同的框架、技术五花八门.

同时,传统系统随着业务需求、bug叠加,就会像滚雪球一样,越滚越大,越来越臃肿;而且不同模块可能用不同的语言、技术更合适,传统的编程模式无法实现。

微服务快马加鞭而来,传统编程像一碗面条,纠缠不清。而它就像一盘水饺,一个个小业务都是一个水饺,彼此能够独立。

除此之外,微服务把模块之间的界限画的棱角分明,不同模块之间灵活调用,A、B都需要做日志监控,以往可能需要各个模块各自实现,而现在可以统一调C模块实现。

现在来有请微服务C位出道!

它的特点是:可扩展性、模块化、各个模块能够单独开发、部署、扩展、维护。

微服务也有很多缺点:性能略下降、事务问题、跨服务协作、难度大需要全面团队…

微服务适应于复杂的项目,可扩展性要求很强的项目、有一定规模的创业公司(需要不断的迭代业务试错)

2、集群

推荐阅读:https://blog.csdn.net/qq_41708993/article/details/122992924

六、谷粒商城微服务架构

架构分析: 前端和后端分离:

项目采用了前后端分离的架构,前端使用了Vue.js,后端使用SpringCloud + Spring Boot等。 微服务通过SpringCloud Gateway进行流量路由,符合现代微服务的前后端解耦思想。 微服务管理:

服务发现与配置管理通过Nacos来实现。Nacos作为服务注册与配置管理的中间件,广泛应用于微服务架构中,帮助解决服务的注册、发现与动态配置问题。 使用了Spring Cloud的组件(如Spring Security、Spring Cloud Gateway等)以及OAuth2实现了认证授权管理,增强了系统的安全性。 服务调用:

微服务之间的调用采用了Feign,配合Ribbon进行负载均衡。Feign用于声明式的REST客户端,Ribbon则用于负载均衡,组合使用提高了服务调用的便利性和容错性。 容错与流量控制:

使用了Sentinel进行流量控制和熔断处理,确保高并发场景下系统的稳定性。这也是当前微服务架构中常见的做法,能有效避免某些服务出现问题时影响全局。 日志与监控:

项目中使用了ELK(Elasticsearch, Logstash, Kibana)栈进行日志收集和可视化,利用Prometheus和Grafana进行监控,结合Sleuth和Zipkin实现分布式追踪,具备了完整的监控与日志体系。 这些监控手段帮助开发者及时发现问题,提供了更强的可维护性和可观察性。 分布式数据库与缓存:

数据库采用了MySQL与Redis,且有分布式数据库方案和Redis集群支持。分库分表(Sharding)通过ShardingSphere进行管理,能有效处理高并发、大数据量的情况。 对于需要高性能的数据访问和快速读写场景,使用了Redis作为缓存。 消息队列与异步处理:

使用RabbitMQ作为消息队列,支持异步处理和解耦,提升了系统的吞吐量和扩展性。消息队列在微服务架构中是非常常见的,用于保证系统的高可用性和数据一致性。 容器化与自动化部署:

项目支持Docker容器化部署,结合Kubernetes实现容器编排与管理,并且使用Jenkins进行CI/CD,确保了开发和生产环境的一致性和自动化。 Kubernetes作为容器编排平台,能够有效地管理和扩展容器化服务,提升系统的可靠性。

下图具体说了需要创建的微服务。

七、重构

1:消息队列——可选用Rocket MQ
在这里插入图片描述
在这里插入图片描述

RocketMQ 是为高可靠性和高并发设计的分布式消息系统,特别适用于金融和电商领域。在这些场景中,消息的可靠传输和严格的顺序保证至关重要,例如订单支付、库存更新等关键业务操作。RocketMQ 原生支持分布式事务、延迟消息和顺序消费,是在复杂业务场景中确保消息一致性和稳定性的理想选择。阿里巴巴在其年度“双 11”大促中,RocketMQ 经受住了超高并发的考验,证明了其在大规模并发和高可靠性需求下的稳定性和可扩展性。

适用场景:电商订单处理、支付系统、削峰填谷、需要分布式事务的应用。

2、数据库的分库分表策略

在电商平台中,随着业务的发展,数据量和并发访问量的增加,数据库可能会面临性能瓶颈。为了解决这些问题,通常采用分库分表策略,将数据分散到多个数据库或表中,以提高系统的性能和可扩展性。

  1. 分库策略:

将数据划分到多个数据库中,常见的策略包括:

水平分库: 根据某个字段(如用户ID、订单ID等)的哈希值,将数据均匀分布到多个数据库中。

垂直分库: 将不同业务模块的数据存储在不同的数据库中,例如,将用户信息存储在一个数据库,将订单信息存储在另一个数据库。

  1. 分表策略:

将单个数据库中的大表拆分为多个小表,常见的策略包括:

水平分表: 根据某个字段的哈希值或范围,将数据分布到多个表中。例如,将订单表按照订单ID的哈希值分为多个子表。

垂直分表: 将表中的列根据业务需求拆分到不同的表中,例如,将用户的基本信息和扩展信息分别存储在不同的表中。

  1. 分库分表的实施步骤:

分析业务需求: 确定哪些表需要进行分库分表,选择合适的分库分表策略。

设计分片规则: 根据业务需求,设计合理的分片规则,确保数据的均匀分布,避免热点数据。

修改应用程序: 在应用层实现路由逻辑,根据分片规则将请求路由到相应的数据库或表。

数据迁移: 将原有数据迁移到新的分库分表结构中,确保数据的一致性和完整性。

监控与优化: 对分库分表后的系统进行监控,及时发现并解决性能瓶颈,确保系统的稳定性和高性能。

3、NoSQL

尽管MySQL和Redis能很好地满足大部分业务需求,但在数据访问非常频繁、数据量极大的场景下,可以考虑采用NoSQL数据库(如MongoDB、Cassandra等)来做进一步优化,尤其在需要高扩展性和快速读写时。

在主流电商平台中, 淘宝在其搜索引擎和日志分析系统中,使用了 MongoDB 等 NoSQL 数据库,以满足高并发和大数据量的需求。 唯品会在其商品推荐和用户行为分析中,采用了 Cassandra 等 NoSQL 数据库,以处理海量数据并提供实时分析能力。 拼多多在其商品搜索和用户画像构建中,使用了 Elasticsearch 等 NoSQL 数据库,以提供快速的搜索和个性化推荐服务。 苏宁易购 苏宁易购在其订单处理和库存管理中,采用了 Redis 等 NoSQL 数据库,以提高系统的响应速度和并发处理能力。

4、更智能的监控与报警系统

在现代企业中,自动化运维已成为提升系统可靠性和运营效率的关键。除了 Docker 和 Kubernetes,结合智能监控与报警系统(如 Prometheus 的 Alertmanager)以及基础设施自动化管理工具(如 Ansible、Terraform)已被多家公司广泛采用。

  1. 阿里巴巴:

阿里巴巴在其云原生平台中,采用了 Docker 和 Kubernetes 进行容器化部署和管理。同时,结合 Prometheus 进行监控,利用 Alertmanager 实现告警通知。在基础设施自动化方面,阿里巴巴使用 Ansible 进行配置管理和应用部署。此外,Terraform 被用于管理云资源,实现基础设施即代码(IaC)。

  1. 腾讯:

腾讯云在其云服务平台中,采用了 Docker 和 Kubernetes 进行容器编排和管理。使用 Prometheus 进行系统监控,结合 Alertmanager 实现告警机制。在自动化运维方面,腾讯云使用 Ansible 进行配置管理和应用部署。Terraform 被用于管理云资源,实现基础设施的自动化管理。

  1. 京东:

京东在其电商平台中,采用了 Docker 和 Kubernetes 进行容器化部署和管理。结合 Prometheus 进行监控,使用 Alertmanager 实现告警通知。在基础设施自动化方面,京东使用 Ansible 进行配置管理和应用部署。Terraform 被用于管理云资源,实现基础设施的自动化管理。

  1. 美团:

美团在其平台中,采用了 Docker 和 Kubernetes 进行容器编排和管理。使用 Prometheus 进行系统监控,结合 Alertmanager 实现告警机制。在自动化运维方面,美团使用 Ansible 进行配置管理和应用部署。Terraform 被用于管理云资源,实现基础设施的自动化管理。

这些案例展示了大型企业如何结合 Docker、Kubernetes、Prometheus、Alertmanager、Ansible 和 Terraform 等工具,实现智能化的自动化运维体系。通过这些工具的集成,企业能够提升系统的可靠性、可维护性和扩展性。

5、分布式事务框架seata

分布式事务框架(如 Seata 或 Saga 模式)来确保事务一致性和可靠性,避免出现数据不一致的问题。

以下是一些具体的应用案例:

  1. 订单与优惠券的分布式事务:

在电商平台中,用户下单时可能使用优惠券,这涉及到订单系统和促销系统的协同工作。为确保订单创建和优惠券使用的原子性,避免出现订单成功但优惠券未被正确使用的情况,采用了分布式事务管理。例如,使用两阶段提交(2PC)协议,确保订单系统和促销系统的数据一致性。

2.订单与库存的分布式事务:

在订单创建过程中,需要同时更新订单信息和库存信息。为确保这两个操作的原子性,避免出现订单成功但库存未被正确扣减的情况,采用了分布式事务管理。例如,使用 Seata 框架来管理分布式事务,确保订单和库存操作的一致性。

  1. 订单与购物车的分布式事务:

在用户下单后,需要将购物车中的商品移除。为确保订单创建和购物车清空操作的一致性,避免出现订单成功但购物车未被清空的情况,采用了分布式事务管理。例如,使用本地消息表模式,在订单创建成功后记录一条消息,异步处理购物车清空操作,确保数据最终一致性。

6.其它

日志管理与分析:虽然使用了 Zipkin 进行分布式追踪,但日志收集和分析也是重要的一环。可以集成 ELK(Elasticsearch, Logstash, Kibana) 堆栈来集中收集和分析日志,尤其是在故障排查和用户行为分析方面。

集成 CI/CD 流水线:可以集成 Jenkins、GitLab CI 等工具,实现自动化构建、自动化测试和自动化部署,确保代码的持续交付。结合 Kubernetes,可以更高效地管理微服务的版本更新和自动回滚。还有coze可以用上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
推荐:微服务入坑详细指南
概念:微服务就是一些可独立运行、可协同工作的小的服务。微服务是现在特别流行的服务,微服务的字面意思是大家都很好理解,就是将系统拆分成很多小的独立系统,每个系统我们看成一个服务,从存储,缓存,部署相对独立。通过服务的小型化、原子化以及分布式架构的弹性伸缩和高可用性,可以实现业务之间的松耦合、业务的灵活调整组合以及系统的高可用性。为业务创新和业务持续提供了一个良好的基础平台。
技术zhai
2019/02/15
1K0
谷粒商城重构01——为何要重构谷粒商城
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。
半旧518
2025/01/22
4030
谷粒商城重构01——为何要重构谷粒商城
图解分布式存储技术
一般大型的分布式微服务项目,都会涉及海量数据、高并发读写等场景,就需要用到分布式数据存储。
方才编程_公众号同名
2025/04/11
1270
图解分布式存储技术
121道分布式面试题和答案
大家好,我是田哥。最近给大家整理了一份分布式面试题,一共有121道,后面会不断增加,争取做到全网最全的分布式面试题。大部分题目都是来自小伙伴们在面试中被问到后,反馈到我这里的。也由此可知,下一个被问到的估计就是你。
田维常
2022/06/13
2.2K0
121道分布式面试题和答案
技术选型思考:分库分表和分布式DB(TiDB/OceanBase) 的权衡与抉择
分库分表是一种常见的解决数据库性能瓶颈的方法。通过将大表拆分成小表,将数据分散到多个数据库或服务器上,可以提高查询性能、减少锁的竞争、提高系统的并发处理能力。常见的分库分表策略包括水平拆分和垂直拆分。水平拆分是按照某个字段的值将数据分散到不同的表或数据库中,而垂直拆分是将一个表中的字段拆分到不同的表或数据库中。
公众号:码到三十五
2024/03/19
4K0
技术选型思考:分库分表和分布式DB(TiDB/OceanBase) 的权衡与抉择
vivo 全球商城:订单中心架构设计与实践
原创 官网商城开发团队 [vivo互联网技术](javascript:void(0)😉 1周前 收录于话题 #架构设计 16 #vivo商城 7 一、背景 随着用户量级的快速增长,vivo 官方商城 v1.0 的单体架构逐渐暴露出弊端:模块愈发臃肿、开发效率低下、性能出现瓶颈、系统维护困难。 从2017年开始启动的 v2.0 架构升级,基于业务模块进行垂直的系统物理拆分,拆分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。 订单模块是电商系统的交易核心,不断累积的数据即将达到单表存储瓶颈,系统难以支
jwangkun
2021/12/23
1.3K0
vivo 全球商城:订单中心架构设计与实践
如何设计一个秒杀系统,(高并发高可用分布式集群)
设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。以下是一个典型的秒杀系统设计思路:
小马哥学JAVA
2024/07/04
3050
什么是云原生,有哪些技术选型?- PUSDN | JaneYork | PGZ
云原生(Cloud Native)是一种构建和运行应用程序的方法论,它代表着一种充分利用云计算模型的设计思想和工程实践。在云原生架构下,应用从设计之初就考虑到在分布式系统和云环境中的部署、扩展、运维与管理,从而实现高可用性、弹性和可移植性。云原生技术体系主要围绕以下几个核心技术和选型:
JaneYork
2024/05/25
2400
今天跟大家聊一聊软件架构(图文并茂)
系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。
小熊学Java
2023/07/16
13K1
今天跟大家聊一聊软件架构(图文并茂)
淘宝技术架构演进之路
由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项目聚集地」,选择置顶(标星)公众号,重磅干货,第一时间送达!
Java技术江湖
2019/09/24
3.8K0
淘宝技术架构演进之路
美团点评 TiDB 深度实践之旅
在美团,基于 MySQL 构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方案和实践新的运维方式。随着近一两年来分布式数据库大放异彩,美团 DBA 团队联合架构存储团队,于 2018 年初启动了分布式数据库项目。
PingCAP
2018/11/15
3.4K0
秒杀系统设计
构建一个高并发、高可用的分布式微服务秒杀系统需要从架构设计、流量控制、数据一致性、缓存策略、数据库优化等多个方面综合考虑。以下是核心设计思路和关键技术点:
jack.yang
2025/04/05
3310
秒杀系统设计
学完这100多技术,能当架构师么?(非广告)
前几天,有个搞培训的朋友,和我要一份java后端的进阶路线图,我就把这篇文章发给了他《必看!java后端,亮剑诛仙》。今天,又想要个java后端目前最常用的工具和框架,正好我以前画过这样一张图,于是发给了他。虽然不是很全,但也希望得到他的夸奖。没想到…
xjjdog
2019/08/16
4060
学完这100多技术,能当架构师么?(非广告)
架构师的初级技能,选组件!(2020更新版,非广告)
2020年新版,对部分组件的描述进行了更新。19年文章参见 这里 。如果你在做选型方面的工作,或者想了解一些现在正在流行的技术,那么这篇文章正好适合你。有什么疑问,可以加我好友 (微信号:xjjdog0),进群讨论。
xjjdog
2020/09/14
5310
最新技术选型解决方案列表
2    目标 2.1    产品目标 2.1.1    SaaS 2.1.1.1    免安装 2.1.1.2    多租户 2.1.1.3    流量计费
Java架构师必看
2021/07/12
1K0
优秀的技术选型(摘选)
1. 优秀的技术选型(摘选) 1.1. 缓存 redis因为是单线程,不适合高耗时操作,对数据量比较大的缓存还是memcached比较合适 1.2. 分库分表 sharding-jdbc,驱动层,不需要额外机器 mycat,代理层,如果有运维团队,又舍得机器可以用这个 1.3. 数据同步 mysql在分库分表时,要做的一个重要操作,数据迁移 对mysql来说,canal是国内用的最多的方案,其次databus canal、maxwell等支持将要同步的数据写入mq,后续处理方便 ETL(抽取,清洗,转换),
老梁
2019/09/11
6830
应用技术架构 —— 微服务架构
在 2010s 进入移动互联网(web3.0)时代,互联网用户规模再次迎来井喷式增长,面向服务的技术架构在服务海量规模用户时显得力不从心。SOA 架构中 ESB 存在单点以及 RPC 中缺少服务的治理能力,ESB 和 RPC 架构都很难满足移动互联网海量用户的要求,微服务开始出现,并成为今天技术架构的主流。
腾讯云 CODING
2022/03/16
1.9K0
应用技术架构 —— 微服务架构
接受“不完美”:分布式事务学习总结
作为一个前端专业的人来说,对于事务的理解,一直停留在“要么都成功,要么都不成功”的小白阶段。既然自己将2018年定义为”深入理解“的一年,那么就从深入理解事务开始吧。 什么是事务? 正如文章开头所说的:事务是一系列的动作,这些动作必须全部完成,如果有一个失败,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。在企业级应用的开发过程中,事务管理是必不可少的技术,用来确保数据的完整性和一致性。 事务有四个特性,也就是经常被提到的ACID: 原子性(Atomicity):所谓的原子性就是说,在整个事务中的所
司想君
2018/03/01
8940
接受“不完美”:分布式事务学习总结
分库分表 带来了哪些问题?
这篇文章跟大家一起聊聊,分库分表后带来的7个问题,以及相关的解决方案,希望对你会有所帮助。
苏三说技术
2025/01/07
1310
分库分表 带来了哪些问题?
Apache顶级项目ShardingSphere最近都在干啥?
1、我们知道ShardingSphere已经成为Apache的顶级项目,那相较于之前,有没有新的挑战呢?
田帅萌
2020/05/29
1.9K0
相关推荐
推荐:微服务入坑详细指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档