https://github.com/iemi/imooc-seckill
https://github.com/yoyo185644/seckill/tree/master/src
ChatGPT:
綜合上述內容,我們可以整理出以下關於CDN和秒殺操作最佳化的要點:
CDN:
- CDN(內容分發網路)是一個加速使用者獲取資料的系統,尤其適用於提供靜態資源和JavaScript等不變的資源。
- CDN部署在離使用者最近的網路節點上,可以提高資料的載入速度。
- 使用CDN可以避免訪問後端伺服器,提高效能並減輕後端伺服器的負載。
秒殺操作最佳化:
- 秒殺操作無法使用CDN快取,因為它涉及到寫操作或核心資料的請求,通常無法被快取。
- 對於秒殺操作,後端快取困難,因為庫存問題無法在快取中直接減少庫存,需要使用事務來保證資料的一致性。
- 秒殺操作可能會產生對資料庫表中某一行資料的大量update減庫存競爭,這是熱點資料的特點。
最佳化方向:
- 減少行級鎖持有的時間,快速執行commit/rollback操作,以釋放行級鎖,減少其他等待行鎖的執行緒的等待時間。
- 在秒殺操作中,將客戶端邏輯放到MySQL伺服器端,避免網路延遲和GC影響,可以使用定製SQL方案或儲存過程來實現。
- 儲存過程的設計可以讓一組SQL組成一個事務,在MySQL伺服器端完成,避免客戶端控制事務造成的性能干擾。
總結最佳化要點:
1. 前端控制:暴露介面,防止按鈕重複請求。
2. 動靜態資料分離:使用CDN快取和後端快取來提高效能。
3. 事務競爭最佳化:減少事務鎖持有的時間,將客戶端邏輯放到MySQL伺服器端,並使用儲存過程等方式實現秒殺操作的效能優化。
投影片~~~~~~
方法一:成本高,大公司使用
=================================
===============================
方法二:放到服务器端完成,MySQL执行sql效率非常高
===========================
MySQL低效
运维成本分析
秒杀技术方案分析
MySQL效率低下的原因是因为行级锁,当一个线程进行对行资源的操作时,下一个线程必须等待这个线程完成commit 或者 rollback 操作释放锁才能进行操作
优化总结:
放到MySQL服务端的两种解决方案
如何判断Update更新库存成功?
延迟分析:同城ip
优化分析:
瓶颈分析:
java控制事务行为分析
成本分析:
其他方案分析
秒杀方案优化
高并发优化分析
瓶颈分析:
事物实现方案图:
事物实现的方案:
当一条语句执行增删改操作时,会开启这条数据的行锁,当另一条语句也要对这条数据进行操作时,上一个事物还没有提交的话,这个行锁不会被释放。
这也是mysql事物或者说绝大多数关系型数据库事物实现的方案。
一条修改语句可以抗住4万次qps,也就是一个商品一秒钟可以被卖4万次
方案成本分析:
瓶颈分析.
java控制事务行为分析
优化:
前端: 动静态数据做分离,减少请求与响应时间;按钮防重复,防止用户发送无效的重复请求,因为秒杀活动一般都会有购买数量的限制,敲的次数再多,最后还是要查看是否已购。影响了效率,可有前端代为处理并优化
后端:使用CDN换存重要的静态资源等;在后端对活动结束时间、商品选购时间、业务的相关逻辑要求都放在后端代码中,并调用缓存来进行暂存,已减少对DB的直接操作,提高效率
1,前端控制触发次数,比如限制控制按钮的触发
2,使用CDN和缓存机制达到动静分离
3,减少行级锁和GC的时间,将食物控制在mysql中进行,比如存储过程
方法一:成本高,大公司使用
方法二:放到服务器端完成,MySQL执行sql效率非常高
99999
异地机房延迟分析
实际在20ms左右
同城机房延迟分析