2招解决并发问题,省几百万设备费用!说穿了很简单...

经大佬介绍,接了个技术顾问的私活儿,3天搞定报酬8000,Mark一下,也分享下经验心得。(经大家要求,文末增加了一段接私活儿经验)

背景交代

甲方是广东某国企信息部,美其名曰是邀请技术顾问,其实就是优化下他们开发的一个内部拍卖网站。该网站是面向内部员工,限时竞拍旧的办公笔记本,用户量不大,但有秒杀的性质存在,国企信息部的技术水平,你懂的。过程很简单,3天就完事儿,之前据说是打报告要花几百万买设备升级,优化了几个问题后,原配置搞定!(真不是我厉害,全靠同行衬托),下面记录2个核心问题和解决办法,抛砖引玉欢迎拍砖。

竞拍报价失败问题

第一个最核心的问题,就是竞拍报价总是失败。内部竞拍设置起拍价格非常低,用了一年的ThinkPad才1000元(福利真好),所以一上架就很多人开始发起竞拍,短时间内会有多项数据写入,然后问题来了:

之前的设计,每次竞拍需要先比对价格(更高才能写入),然后再增加报价记录和更新当前价格,整个过程用事务包裹起来,基于SQLServer单机数据库根本扛不住并发,各种的timeout。

重新设计,直接引入了Redis的ZSet有序集合,将商品id作为key,用户报价信息作为value,将价格信息当成score,轻松保存并发报价,而且随时获取当下最高报价,应对不足1000的并发不要太轻松。

数据入库?我设置的是每5分钟/ZSet数据新增过100,就将数据写入一次数据库,一方面避免了数据库的频繁更新,二来最高报价也不需要竞争加锁了,于是还是单机的SQLServer服务器,应付起来毫无压力!

竞拍结束无数请求

再一个核心问题是部分热门拍品在竞拍结束时,经常出现数据库压力过大,有时候还会down机。原因是压轴报价人多,而此时该拍品已经下架了,用户还会不断刷新,然后问题来了:

之前的设计,正在竞拍的商品信息是放在本地缓存的,有效期到竞拍结束为止,竞拍期间都表现的很好,唯一的问题是竞拍结束时,用户还在大量刷新请求该商品信息,然后这一批无效请求都进入数据库了,严重的时候会导致数据库down机。

重新设计,在数据过期时,不是把key-value移除,而是保存了一个key-null的缓存项,用户用这个key来请求时,直接拿到null,提示用户商品不存在或者已下架,这样下来请求都不会影响到数据库了。其实这是一个典型的缓存穿透问题。

一点心得体会:

多会点东西还是很重要的,就这点Redis的基本应用,就轻松挣了8000块。在日常的互联网项目开发中,对Redis要求高多了,单线程模型、epoll多路复用、底层数据结构、跳跃表算法应用、各种数据淘汰策略、集群、高可用等等,都是必备的。给大家推荐一个硬核训练营,3天时间突破Redis实战和原理,由十多年经验的硬核架构师Clay主讲的,我就是从这里学习的。

关于私活

很多小伙伴儿也想业余接点私活儿,我是走过弯路的,什么猪八戒网都是坑。今年我已经接了2个私活儿,都是找我的在线教育老师,某微软MVP大佬接的。老师那边的VIP学员上万,经常会有各种私活儿,下图是老师发给我的,又可以小创收一笔了。

关注的小伙伴儿,可以扫描二维码,来听听老师的课程,混个脸熟!然后一起来协作一些大的私活儿,欢迎一起组队!

扫码大家一起组队

人数较多,添加以下号码也可哦!

微信号:zhaoxihhhhh


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「软件项目管理」一文详解软件配置管理计划

一文详解软件配置管理计划前言一、配置管理概述1. 配置管理(SCM)定义2. 软件配置项目(SCI)3. 基线4. 软件配置控制委员会(SCCB)二、软件配置管理过程1. 管理过程2. 管理过程解析(1)配置项标识、跟踪I. 定义II. SPM项目要求&#x…

Kubernetes探针踩坑记

1. 荒腔走板最近一两个月生产K8s集群频繁出现短时503 Service Temporarily Unavailable,还不能主动复现,相当郁闷,压力山大。HTTP 5xx响应状态码用于定义服务端错误。500 Internal Server Error:所请求的服务器遇到意外的情况并阻…

「软件项目管理」一文了解软件项目团队计划

一文了解软件项目团队计划序言一、人力资源计划1. 团队定义2. 项目组织结构(1)职能型(2)项目型(3)矩阵型3. 责任分配矩阵二、项目干系人计划1. 干系人定义2. 干系人识别3. 干系人参与分类4. 干系人参与评估…

leetcode40. 组合总和 II

一:题目 二:上码 class Solution { public:/**思路:1.题目中说的每个数字只在每个组合中使用一次的话 我们可以考虑 在递归遍历的时候 index1不断缩小范围(因为这也是在一个大的集合中挑选小的集合,所以是需要记录index的)2.但是我们在填写…

DDD:架构思想的旧瓶新酒?阿里等大厂却对它趋之若鹜!

4月,InfoQ 发布了软件架构与设计的趋势报告。在报告中可以看出,微服务、领域驱动设计等已经非常流行,并成为目前软件开发行业的主流趋势。大家都知道,微服务划分的一个重要理论基础就是领域驱动设计。但由于 DDD 门槛高、概念多&a…

「软件项目管理」一文浅谈软件项目风险计划

一文浅谈软件项目风险计划序言一、风险基本概念1. 风险的定义及特性2. 风险三要素3. 风险图示3. 风险类型(1)预测角度(2)范围角度二、风险管理过程三、风险识别1. 定义2. 风险识别方法3. 风险条目检查表之七个条目四、风险评估1. …

.NET Core 下使用 gRPC

gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。https://grpc.io/docs/guides/https://github.com/grpc/grpc-dotnethttps://docs.microsoft.com/zh-cn/aspnet/core/grpc“gRPC 的主要优点现代高性能轻量级 RPC 框架。协定优先 API 开发,默认使用协议缓冲区…

leetcode93. 复原 IP 地址

一:每日论语解读 follow me !! 君子坦荡荡 小人常威威 二:题目 三:上码 class Solution { public:/**思路:1.分析题意本题依然是切割字符串(我们需要对要分割的字符串做出处理 需要判断我们截取的字符串是否合法)2。关于‘.’的处理 我们是在原字符串的基础上进…

ASP.NET Core整合Zipkin链路跟踪

前言在日常使用ASP.NET Core的开发或学习中,如果有需要使用链路跟踪系统,大多数情况下会优先选择SkyAPM。我们之前也说过SkyAPM设计确实比较优秀,巧妙的利用DiagnosticSource诊断跟踪日志,可以做到对项目无入侵方式的集成。其实还…

探秘react,一文弄懂react的基本使用和高级特性

一文详解react的基本使用、高级特性和周边插件⏰序言📝一、React的基本使用1、JSX基本使用(1)变量、表达式(2)class和style(3)子元素和组件(4)原生 html2、条件判断&…

使用React hooks,些许又多了不少摸鱼时间

一文详解react-hooks🎙️前言一、📻概述1、关于React Hooks2、认识React Hooks(1)回顾React函数式组件(2)函数组件的特点(3)class组件的问题(4)React 组件二、…

手把手教学之如何设计财务对账系统

在设计一个对账系统前,我们先想清楚,对账目的、方式、对账场景、使用对象。其次就是和财务了解一下,他们所期望的效果,毕竟他们是使用方。财务对账是一个琐碎而复杂的工作,极需要工作耐心和细心,还要求对账…

不平凡的2021,末流普本生秋招上岸大厂的历程

📻叮! 2021年接近尾声,周一也开始拾起了年终总结。 回顾2021,有喧嚣,也有欢呼;有奔溃,也有快乐。 但好在✏️ 对待一件又一件的小事上,始终保持着对自己的要求📊 不…

leetcode491. 递增子序列

一&#xff1a;论语 二:题目 三&#xff1a;上码 class Solution { public:vector<vector<int> >ans;vector<vector<int> >ans1;vector<int> path;void backstacking(vector<int>& nums,int index) {if(path.size() > 2) {ans.pus…

送福利 | 送书5本《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

《ASP.NET Core项目开发实战入门》从基础到实际项目开发部署带你走进ASP.NET Core开发。ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 所写&#xff0c;后续ASP.NET Core 5也会对应更新。简介本书共14章&#xff0c;深入浅出地介绍了ASP.NET Core基础及项目开发方面的知…

海有舟可渡、山有路可循‍‍ —— 大学四年圆满落幕

⛺️前言 仅以此篇文章记录我的大学四年&#xff01; 回忆大学四年&#xff0c;有惊喜、有快乐、有崩溃、有欢呼&#xff1b; 有过无数个为了赶策划、赶ddl的熬夜&#xff0c;更有凌晨2点做志愿活动、凌晨5点赶项目的通宵达旦。 梳理下大学四年的大事件&#xff1a; 大一 …

程序开发天团必备单品,稳定输出还加持千元商务礼限时送!

有这么一个门派他们用强大的思维逻辑频出“大招”用抗造的硬核体能昼夜练习一水儿的格子衫下&#xff0c;个个骨骼精奇深居简出&#xff0c;却默默改变着世界格局他们都使用同一件武器拼的就是个配置高低这与能否称霸武林有着直接关系看看各位高手怎么说“大内”高手 武功唯快不…

了解微前端,深入前端架构的前世今生

前端架构的前世今生&#x1f6f5;前言一、&#x1f6f4;前端架构的前世今生1、架构是如何产生的&#xff1f;2、MVC架构3、前后端分离架构4、Nodejs5、单页面架构&#xff08;1&#xff09;现有单页面架构&#xff08;2&#xff09;单页面架构的优势&#xff08;3&#xff09;单…

leetcode37. 解数独

一:论语 简而言之 就是要一视同仁 对待遇见所有的人要一个态度 二&#xff1a;题目 三:上码 class Solution { public:bool backstacking(vector<vector<char> >& board) {for(int i 0; i < board.size(); i) {for(int j 0; j < board[0].size(); …

跟我一起学.NetCore之.NetCore概述

随着.NetCore版本发布变更&#xff0c;在最近一年左右开始接触到.NetCore&#xff0c;之前只是传闻&#xff0c;并没有动手实操&#xff1b;.NetCore逐渐成熟&#xff0c;大大小小的公司也开始进行使用&#xff0c;感觉再不学习就落后了&#xff0c;于是乎搜索各种资料开始学习…