小米一面:电商系统开发遇到了哪些问题?

简介: 在昨晚的直播中,讨论了电商系统开发中的常见问题,包括高并发、库存管理、弱网支付、黄牛刷单和重复订单。解决高并发可采用缓存、限流和熔断策略,如使用Redis、Sentinel等。库存问题通过限流、分布式锁和Redis Lua脚本防止超卖,少卖则依赖及时对账和人工补偿。弱网支付需确保支付状态同步,可借助回调和定时任务。防止刷单可使用图形验证码和IP黑名单。重复订单通过幂等性和数据库唯一约束处理。欢迎在评论区分享更多经验和相关代码实现。

昨晚在直播间带着大家刷第 22 套小米面试真题时,遇到了这样一个问题,面试官问:“你在开发电商系统的过程中,都遇到了哪些问题?”,个人觉得这个问题既属于开放性问题,同时又比较具有代表性,所以就单拿出来和大家分享交流一下经验。

首先,我们先分析一下,电商系统开发中可能会遇到的经典的问题有哪些?我这总结了几个,大家也可以在评论区补充交流:

  1. 瞬时流量,高并发问题
  2. 库存问题:超卖和少卖问题。
  3. 弱网环境下支付问题
  4. 黄牛刷单问题
  5. 重复订单去重问题

这是我们在电商系统开发中,可能会遇到的一些经典问题,那怎么来解决这些问题呢?

1.解决高并发问题

高并发系统有以下三个经典的解决方案:

  1. 缓存:一种重要的计算机技术,它通过减少数据访问时间和提高数据访问速度来优化系统查询的效率。
  2. 限流:一种计算机网络流量控制技术,主要用于控制数据的传输速率,防止网络拥堵和超出系统的处理能力。通过限流可以控制单位时间内请求的数量,或者限制一个时间窗口内的请求数量,以保护系统的稳定性和可用性。
  3. 熔断:一种在分布式系统中用于处理故障和防止系统过载的保护机制。它的主要思想源于电路中的熔断器,当电流过大时,熔断器会自动熔断以保护电路。在分布式系统中,熔断器的概念被引申为保护系统免受过多错误或请求的冲击。

具体的落地实现:

  1. 缓存具体实现:使用 Redis 实现分布式缓存,另外配合 Nginx 缓存 + 本地 Caffeine 缓存 + CDN 缓存 + 浏览器缓存共同实现多级缓存来保证系统的性能。
  2. 限流具体实现:限流可以使用 Spring Cloud Alibaba 组件 Sentinel 来实现,在项目中引入 Sentinel 框架,配置资源和资源限流规则即可实现限流功能。
  3. 熔断具体实现:熔断的实现和限流类似,也可以使用 Spring Cloud Alibaba 组件 Sentinel 来实现,在项目中引入 Sentinel 框架,配置资源和资源熔断规则即可实现限流功能。

2.解决库存问题

库存的问题有两个:

  1. 超卖问题
  2. 少卖问题

2.1 解决超卖问题

超卖问题的解决方案有以下几个:

  1. 限流
  2. 分布式锁
  3. Redis Lua(先判断库存 -> 减库存 + 加订单)
  4. 使用数据库 update 操作库存

PS:生产环境通常使用限流 + Redis Lua 脚本来解决超卖问题。

2.2 解决少卖问题

少卖问题我们通常使用及时对账系统 + 人工补偿机制来解决。

3.解决弱网支付问题

弱网环境下支付的问题主要涉及到在网络信号较差的情况下进行支付操作时可能出现的一系列问题。

弱网环境最主要的是要解决支付状态同步的问题,它的解决方案有以下几个:

  1. 支付平台提供回调方法进行支付状态的刷新。
  2. 手动触发主动出查询得到支付状态。
  3. 定时任务进行刷新。

4.解决刷单问题

防止黄牛刷单的常见解决方案有以下两种:

  1. 添加图形验证码:此手段可以解决大部分刷单问题。
  2. 添加异常观测平台和 IP 黑名单限制:通过异常报警平台观察到异常 IP,然后将异常 IP,加入到 IP 黑名单,从而解决刷单问题。

5.解决重复订单问题

重复订单去重问题的解决方案有以下两个:

  1. 通过幂等性判断去除重复订单:可以通过自定义注解 + Redis 来实现幂等性过滤。
  2. 数据库唯一约束保底:数据库通过设置唯一约束来保证不会有重复的订单添加到数据库,从而避免了重复订单的产生。

课后思考

除了以上问题之后,你在开发电商系统中还遇到了哪些经典的问题?幂等性判断的核心实现代码是啥?自定义注解的实现方式有几种?

相关文章
|
网络协议 Linux Android开发
解决GitHub无法访问的问题:手动修改hosts文件与使用SwitchHosts工具
解决GitHub无法访问的问题:手动修改hosts文件与使用SwitchHosts工具
2138 1
|
存储 安全 JavaScript
【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)
在传统的客户端-服务器身份验证模式中,客户端请求服务器上访问受限的资源(受保护的资源)时,需要使用资源所有者的凭据在服务器上进行身份验证。资源所有者为了给第三方应用提供受限资源的访问权限,需要与第三方共享它的凭据。这就导致一些问题和局限:
1164 2
【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)
|
9月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
536 18
|
监控 前端开发 安全
74.8K star!这个开源图标库让界面设计效率提升10倍!
Font Awesome 是全球最受欢迎的图标库和工具包,提供超过2000个免费图标和7000+专业图标,支持网页、桌面应用、移动端等多平台使用。开发者只需几行代码就能为项目添加精美矢量图标,设计师可直接下载SVG进行二次创作。
557 4
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
487 3
|
运维 监控 数据中心
100Base-FX以太网媒体标准详解
【10月更文挑战第16天】
1561 1
知乎自动回答脚本,自动发布专栏自动评论插件,全自动点赞收藏别人问答
这是一款全自动知乎引流工具,通过模拟点击、评论和点赞操作,在知乎平台实现自动营销引流。用户只需设定参数(如评论次数),软件将自动完成搜索相关内容、发表评论等任务
|
运维 监控 测试技术
如何确保微服务架构的高可用性?
如何确保微服务架构的高可用性?
677 57
|
机器学习/深度学习 人工智能 自然语言处理
什么是智能搜索
智能搜索融合了人工智能和大数据技术,提供高效的语义理解、多模态数据处理及个性化推荐。它不仅支持传统关键词匹配,还结合NLP、机器学习等先进技术,提升信息检索的精准度与多样性。适用于电商、内容平台、多媒体及企业内部知识库等多种场景,显著优化用户体验和业务效率。
2065 2