随笔分类 - 17-电商项目剖析
该文被密码保护。
该文被密码保护。
该文被密码保护。
该文被密码保护。
该文被密码保护。
该文被密码保护。
摘要:一. Nginx限流和负载均衡 1. 限流 可以ip限流或者限制总请求数。防止大量恶意请求,通过nginx的ip限制处理 1秒1个ip只能请求一次,但也有弊端,比如多个人在同一个ip下,容易误杀,所以看怎么取舍了. 参考代码: #user nobody; worker_processes 1; #e
阅读全文
摘要:一. 事件总线机制 1. 业务改造 引入时间总线的概念,采用CAP框架进行业务处理,同时利用RabbitMQ代替Redis队列,采用SQLServer进行本地消息表的存储, 采用 推模式 发送消息,我们习惯称之为 发布-订阅 模式。 关于基于CAP框架实现事件总线,详见: https://www.c
阅读全文
摘要:一. 前言 1.背景 最初版本的消费者一条一条获取,然后创建订单扣减库存,非常慢,我们希望在保证消费顺序的情况下提升消费速度。 2.设计思路 A.我们设置两个维度:数量 和 时间,比如当从队列中获取的数量达到200条的时候提交 或者 2s提交一次(但必须有数据) B.EFCore默认提交大数据量可能
阅读全文
摘要:一. Lua简介 1. 介绍 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 该章节主要是Redis调用Lua脚本。 2. 好处 (1). 减少网络开销:本来多次网络请求的操作,可以用一个请求完成,原先
阅读全文
摘要:一. 单品限流 1. 含义 某件商品n秒内只接受m个请求, 比如:限制商品A在2s内只接受500个下单请求。 2.设计思路 利用Redis自增的Api,该商品的第一个请求进来的时候设置缓存过期时间,限制内正常走业务,限制外返回限流提示;时间到了,原缓存内容消失,下一次第一个请求进来重新设置过期时间
阅读全文
摘要:一. 小白写法 1.设计思路 纯DB操作 DB查库存→判断库存→(DB扣减库存+DB创建订单) 2.分析 A.响应非常慢,导致大量请求拿不到结果而报错 B.存在超卖现象 C.扣减库存错误 3.压测结果 前提:原库存为10000,这里统计2s内可处理的并发数,以90%百分位为例,要求错误率为0。 代码
阅读全文
摘要:一. 基本概念 1.QPS(Queries Per Second) A. 指每秒查询率,是一台服务器每秒能够响应的查询次数(数据库中的每秒执行查询sql的次数)。 B. 是数据库中的概念,每秒执行条数(查询),被引申到压测中来了,但是不包括插入、更新、删除操作,所以不建议用qps来描述系统整体的性能
阅读全文
摘要:一. 业务背景 1. 计划 以商城项目为基础,剖析秒杀功能、购物车功能等 先把单体架构优化到极致,然后向微服务架构转变,并分析当中遇到的各种问题。 2. 用到的技术栈和工具 服务器:centos8 数据库:MySQL 5.7 集群 基础框架:Asp.Net Core +EF Core + Dappe
阅读全文