
商城高并发秒杀系统(.NET Core版)
商城高并发秒杀系统(.NET Core版)
愚公搬代码
《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
展开
-
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 37-最终项目的性能压测分析
性能压测总结场景:秒杀场景 20万手机电脑配置:8核 16G 100M带宽 100G硬盘第一种情况:立马秒完同时进行来 20W并发,20W手机,其余全部放弃掉1800万个请求 ,cdn 静态页成本:20万/25000 = 8台集群 * 3 = 24 台服务器 * 746 = 17904元第二种情况:限时秒完 10s 5分钟 5s10s 控制在在 10秒之内秒完20W/ 10 = 2W/s 放进行其余限流,IP, 抢限流,提示友好页面,抢购火爆 nginx限制流量,1个人1秒只能原创 2021-06-05 20:48:37 · 51381 阅读 · 1 评论 -
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 36-高并发秒杀项目k8s集群部署
秒杀项目docker部署前提准备k8s集群网络serviceSubnet: “10.96.0.0/16”podSubnet: “10.100.0.0/20”初始化的时候进行设置环境镜像1、mcr.microsoft.com/dotnet/core/sdk:3.1-buster镜像docker pull mcr.microsoft.com/dotnet/core/sdk:3.1-buster2、mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-s原创 2021-06-05 20:30:27 · 51808 阅读 · 1 评论 -
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 35-项目最终时序图和架构图
一:项目时序图二:项目架构图原创 2021-06-05 18:01:39 · 51546 阅读 · 0 评论 -
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 34-nginx配置ip限流
一:nginx配置ip限流1、限制访问频率(正常流量)Nginx中我们使用 ngx_http_limit_req_module模块来限制请求的访问频率,基于漏桶算法原理实现。接下来我们使用 nginx limit_req_zone 和 limit_req 两个指令,限制单个IP的请求处理速率。语法:limit_req_zone key zone ratekey :定义限流对象,binary_remote_addr 是一种key,表示基于 remote_addr(客户端IP)来做限流,binar原创 2021-06-05 17:52:03 · 51102 阅读 · 2 评论 -
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 33-分布式订单号的封装(雪花ID)
一:分布式订单号的封装/// <summary>/// 雪花Id/// </summary>public class SnowflakeId{ // 开始时间截 (new DateTime(2020, 1, 1).ToUniversalTime() - Jan1st1970).TotalMilliseconds private const long twepoch = 1577808000000L; // 机器id所占的位数 private原创 2021-06-05 17:36:26 · 51916 阅读 · 0 评论 -
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 32-秒杀回滚(rabbitmq发送消息失败)
/// <summary>/// 4.5、创建订单(redis + 消息队列 + lua + 方法幂等 + 失败回滚)/// </summary>/// <param name="orderDto"></param>[HttpPost]public PaymentDto CreateOrder(SysUser sysUser, [FromForm]OrderPo orderPo){ // 1、秒杀参数准备 string Produc原创 2021-06-05 10:27:30 · 51394 阅读 · 0 评论 -
(更新时间)2021年6月5日 商城高并发秒杀系统(.NET Core版) 31-方法幂(防止用户重复下单)
/// <summary>/// 4.4、创建订单(redis + 消息队列 + lua + 方法幂等)/// </summary>/// <param name="orderDto"></param>[HttpPost]public PaymentDto CreateOrder(SysUser sysUser, [FromForm]OrderPo orderPo){ // 1、秒杀参数准备 string ProductKey =原创 2021-06-05 10:12:18 · 51607 阅读 · 3 评论 -
(更新时间)2021年6月4日 商城高并发秒杀系统(.NET Core版) 30-lua文件封装加载和执行
一:lua文件的作用1、批量执行redis命令2、保证redis命令能够原子执行二:lua文件定义和使用1、lua文件--[[ 1、函数定义]]----1、单品限流local function seckillLimit()local seckillLimitKey = ARGV[2];-- 1、获取单品已经请求数量local limitCount = tonumber(redis.call('get',seckillLimitKey) or "0");local requestCo原创 2021-06-04 23:33:44 · 51453 阅读 · 2 评论 -
(更新时间)2021年6月4日 商城高并发秒杀系统(.NET Core版) 29-单品限流和防刷
#region 1、单品限流{ // 1、单品限流(限制单品在有限时间内请求次数) string LimitKey = "SeckillRequestLimit" + orderPo.ProductCount; string LimitCount = RedisHelper.Get(LimitKey); int SeckillRequestLimitCount = string.IsNullOrEmpty(LimitCount) ? 0 : Convert.ToInt32(原创 2021-06-04 23:07:10 · 51247 阅读 · 0 评论 -
(更新时间)2021年6月3日 商城高并发秒杀系统(.NET Core版) 28-性能优化-Redis分布式缓存使用
一:相关依赖包CSRedisCore二:代码封装/// <summary>/// ServiceCollection Redis扩展/// </summary>public static class RedisServiceCollectionExtensions{ /// <summary> /// 注册分布式Redis缓存 /// </summary> /// <typeparam name="con原创 2021-06-03 22:47:05 · 51628 阅读 · 5 评论 -
(更新时间)2021年6月3日 商城高并发秒杀系统(.NET Core版) 27-性能优化-事件总线的使用(流量削峰)
一:相关依赖包DotNetCore.CAPDotNetCore.CAP.DashboardDotNetCore.CAP.InMemoryStorageDotNetCore.CAP.KafkaDotNetCore.CAP.MySqlDotNetCore.CAP.RabbitMQ配置// 8、添加事件总线capservices.AddCap(x =>{ // 8.1 使用内存存储消息(消息发送失败处理) //x.UseInMemoryStorage(); //原创 2021-06-03 20:10:32 · 51480 阅读 · 0 评论 -
(更新时间)2021年6月3日 商城高并发秒杀系统(.NET Core版) 26-性能优化-nginx负载均衡优化
一、关于Nginx的负载均衡在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。二、Nginx负载均衡策略负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:#动态服务器组 upstream dynamic_zuoyu { server localhost:8080; #tomca原创 2021-06-03 09:35:17 · 51234 阅读 · 0 评论 -
(更新时间)2021年6月3日 商城高并发秒杀系统(.NET Core版) 25-性能优化-秒杀库存优化(本地缓存)
一:相关依赖包Microsoft.Extensions.Caching.Memory使用services.AddMemoryCache(); private readonly IMemoryCache memoryCache; public OrderController( IMemoryCache memoryCache) { this.memoryCache = memoryCache; }二:开机启动时加载秒杀库存到缓存中相关缓存扩展类/// <summar原创 2021-06-03 00:09:59 · 51399 阅读 · 2 评论 -
(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 24-性能优化-DbContext数据库连接优化
一:没优化前的性能测试services.AddDbContext<SeckillAggregateServicesContext>(options =>{ options.UseMySQL(Configuration.GetConnectionString("DefaultConnection"));});500并发量大概需要7秒处理完成二:优化后的性能测试services.AddDbContextPool<SeckillAggregateServicesCo原创 2021-06-02 21:42:15 · 51364 阅读 · 0 评论 -
(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 23-性能优化-Consul优化
一:Consul性能瓶颈Consul主要的性能出现在服务发现,网络IO是很耗性能的。二:Consul性能优化使用单例全局共享使用数据缓存(进程:字典,集合,redis)使用连接池下面以本地缓存为案例/// <summary>/// consul服务发现实现/// </summary>public class ConsulServiceDiscovery : AbstractServiceDiscovery{ public ConsulServiceD原创 2021-06-02 21:06:53 · 51540 阅读 · 0 评论 -
(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 22-性能优化-SkyWalking的使用
如何使用SkyWalking条件1、JDK1.82、Elasticsearch 6.6.03、SkyWalking4、SkyAPM-dotnet5、api网关步骤1、JDK 1.8操作 1.1 jdk1.8下载2、Elasticsearch 6.6.0操作 2.1 Elasticsearch 6.6.0下载 下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-6-0 2.2原创 2021-06-02 18:35:08 · 51483 阅读 · 0 评论 -
(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 21-性能优化-秒杀项目docker部署
秒杀项目docker部署前提准备docker网络 网络命令:docker network create -d bridge --gateway 172.18.0.1 --subnet 172.18.0.0/16 seckillservice -d bridge 为网络模式 类似于NAT模式,类似于局域网 --gateway 172.18.0.1 为局域网的网关 --subnet 172.18.0.0/16 为局域网的网段,所有在局域网内的容器都能互相通信环境镜像1、mcr.micr原创 2021-06-02 08:23:57 · 51544 阅读 · 1 评论 -
(更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 20-性能优化-系统配置
性能测试的系统配置操作系统参数1、cpu 8核2、内存 16G3、硬盘 237G4、带宽 100M本机2088/ms性能瓶颈原因1、操作系统 如果是操作系统 没有任何软件,只有秒杀微服务的系统 阿里云 1、cpu 8核 2、内存 16G 3、硬盘 100G 4、带宽 100M 服务器 96ms2、代码本身(通过skywalking进行测试)skywalking 6.6.0原创 2021-06-02 08:15:15 · 51912 阅读 · 3 评论 -
(更新时间)2021年6月1日 商城高并发秒杀系统(.NET Core版) 19-秒杀系统业务逻辑的时序图
一:秒杀首页时序图二:用户注册时序图三:用户登录时序图四:秒杀详情时序图五:创建订单时序图六:支付逻辑时序图原创 2021-06-01 21:15:52 · 52226 阅读 · 1 评论 -
(更新时间)2021年5月31日 商城高并发秒杀系统(.NET Core版) 18-IdentityServer4的使用
一:首先安装如下两个包IdentityServer4IdentityServer4.EntityFramework二:在用户微服务进行认证services.AddIdentityServer() .AddDeveloperSigningCredential()// 1、配置签署证书 .AddConfigurationStore(options => { options.ConfigureDbContext = buil原创 2021-05-31 10:30:28 · 51481 阅读 · 1 评论 -
(更新时间)2021年5月31日 商城高并发秒杀系统(.NET Core版) 17-微服务跨域问题的解决
// 3、设置跨域services.AddCors(options =>{ options.AddPolicy("AllowSpecificOrigin", builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin());});// 2、使用跨域app.UseCors("AllowSpecificOrigin");原创 2021-05-31 09:53:28 · 51321 阅读 · 0 评论 -
(更新时间)2021年5月31日 商城高并发秒杀系统(.NET Core版) 16-AutoMapper帮助类的封装
一:AutoMapper帮助类的封装/// <summary>/// 对象自动转换工具类/// </summary>public static class AutoMapperHelper{ /// <summary> /// 类型映射,默认字段名字一一对应 /// </summary> /// <typeparam name="TDestination"></typeparam> /原创 2021-05-31 08:04:05 · 51670 阅读 · 1 评论 -
(更新时间)2021年5月31日 商城高并发秒杀系统(.NET Core版) 15-通用用户模型绑定的封装
一:通用用户模型绑定的封装/// <summary>/// 系统用户(用于存储用户状态相关信息)/// </summary>public class SysUser{ public int UserId { set; get; } // 用户Id public string UserName { set; get; } // 用户名称}/// <summary>/// 系统用户模型绑定(从头部信息获取用户信息,UserId和UserNam原创 2021-05-31 07:26:53 · 51485 阅读 · 1 评论 -
(更新时间)2021年5月31日 商城高并发秒杀系统(.NET Core版) 14-返回结果集大小写转换的处理
一:返回结果集大小写转换的处理services.AddNewtonsoftJson(options => { // 防止将大写转换成小写 options.SerializerSettings.ContractResolver = new DefaultContractResolver();});原创 2021-05-31 07:20:06 · 51671 阅读 · 1 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 13-系统异常中间件的封装
一:定义异常中间件/// <summary>/// 自定义异常中间件,对于系统异常的处理, 超时异常,异常。/// 拦截Response输出流,进行统一异常处理/// </summary>public class SystemExceptionHandlerderMiddleware{ private readonly RequestDelegate _next; public SystemExceptionHandlerderMiddleware(Re原创 2021-05-30 22:18:46 · 51559 阅读 · 1 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 12-通用异常结果集的封装
一:通用异常结果集的封装/// <summary>/// 自定义业务异常处理,转换成为json格式/// </summary>public class BizExceptionHandler : IExceptionFilter{ public void OnException(ExceptionContext context) { // 1、判断异常是否BizException if (context.Exception i原创 2021-05-30 21:51:22 · 51251 阅读 · 2 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 11-通用结果集的封装
一:通用结果集的封装/// <summary>/// 通用结果/// </summary>public class CommonResult{ public const string SUCCESS = "0"; public string ErrorNo { set; get; } // 是否成功状态 public string ErrorInfo { set; get; } // 失败信息 public IDictionary<st原创 2021-05-30 21:48:35 · 51459 阅读 · 1 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 10-微服务框架异常组件的封装
/// <summary>/// 框架异常/// </summary>public class FrameException : Exception{ public string ErrorNo { get; } // 业务异常编号 public string ErrorInfo { get; }// 业务异常信息 public IDictionary<string, object> Infos { set; get; } // 业务异常原创 2021-05-30 20:59:28 · 51268 阅读 · 0 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 09-微服务客户端组件的封装
要封装微服务客户端组件的必须条件安装如下包Castle.Core一:微服务客户端组件的封装/// <summary>/// 微服务客户端代理对象扩展(扩展对象注册到IOC容器)/// </summary>public static class MicroClientServiceCollectionExtensions{ /// <summary> /// 添加中台 /// </summary> /// <t原创 2021-05-30 20:37:14 · 51355 阅读 · 1 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 08-动态中台调用组件的封装
一:动态中台调用组件的封装/// <summary>/// 中台ServiceCollection扩展方法/// </summary>public static class DynamicMiddlewareServiceCollectionExtensions{ /// <summary> /// 添加动态中台 /// </summary> /// <typeparam name="IMiddleServic原创 2021-05-30 16:40:23 · 51229 阅读 · 0 评论 -
(更新时间)2021年5月30日 商城高并发秒杀系统(.NET Core版) 07-负载均衡组件的封装
一:负载均衡组件的封装/// <summary>/// 负载均衡ServiceCollection扩展/// </summary>public static class LoadBalanceServiceCollectionExtensions{ /// <summary> /// 注册负载均衡 /// </summary> /// <param name="services"></param>原创 2021-05-30 11:27:43 · 50883 阅读 · 0 评论 -
(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 06-注册中心组件的封装
一:consul注册发现封装/// <summary>/// consul服务发现实现/// </summary>public class ConsulServiceDiscovery : AbstractServiceDiscovery{ public ConsulServiceDiscovery(IOptions<ServiceDiscoveryOptions> options) : base(options) { } /*原创 2021-05-28 23:34:16 · 51287 阅读 · 1 评论 -
(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 05-断路器Polly组件的封装
一:断路器Polly组件的封装1.断路器Polly的熔断降级策略选项/// <summary>/// HttpClient熔断降级策略选项/// </summary>public class PollyHttpClientOptions{ //1、设置默认值 public PollyHttpClientOptions() { this.TimeoutTime = 60; this.RetryCount = 3;原创 2021-05-28 22:56:33 · 51396 阅读 · 3 评论 -
(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 04-中台调用组件的封装
一:中台调用组件的封装1.中台调用接口和方法/// <summary>/// 中台服务/// </summary>public interface IMiddleService{ /// <summary> /// Get请求 /// </summary> /// <param name="middleUrl">中台链接</param> /// <param name="midd原创 2021-05-28 22:51:43 · 51713 阅读 · 1 评论 -
(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 03-微服务架构设计
一:数据库使用首先安装包:Microsoft.EntityFrameworkCore.Design.NET Core代码配置/// <summary>/// 订单服务上下文/// </summary>public class OrderContext : DbContext{ public OrderContext(DbContextOptions<OrderContext> options) : base(options) { }原创 2021-05-28 18:21:37 · 51746 阅读 · 1 评论 -
(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 02-数据库设计
一:数据库设计首先数据库分为四个模块:用户,订单,商品,支付用户数据库设计如下:/// <summary>/// 用户模型/// </summary>public class User{ public int Id { set; get; } // 主键 public string UserName { set; get; } // 用户名 public string Password { set; get; }// 密码 public原创 2021-05-28 17:43:03 · 51753 阅读 · 1 评论 -
(更新时间)2021年5月28日 商城高并发秒杀系统(.NET Core版) 01-系统设计介绍
秒杀项目目标:从0到1构建一个高并发的秒杀系统三个阶段从0到1构建一个电商系统从0到1构建秒杀系统从0到1构建高并发秒杀系统为了完成这个目标,我们需要知道几个前提什么是电商什么是秒杀什么是高并发如何设计高并发秒杀系统什么是电商商家通过互联网(软件)的方式来销售商品。就是电商。例如,我们所看到的,什么淘宝,京东之类。良品铺子,都可以在网上进行购买他们的商品,这些就是电商电商类型个人电商: 软件只买一家门店的商品就是个人电商, 例如:良品铺子通过软件买的商品,各位同原创 2021-05-28 09:42:37 · 52879 阅读 · 6 评论