投影片~~~~~
為什麼要單獨獲取系統時間?





ChatGPT:
在秒殺操作的最佳化分析中,你提到了CDN的限制以及資料一致性和庫存減少的競爭問題。這些觀點是正確的,以下是對這些問題的一些進一步解釋和建議:
1. CDN限制:CDN主要用於快取靜態資源,無法有效地快取動態和個別的秒殺地址。對於變化頻繁的秒殺地址,CDN的快取效果不佳。因此,在秒殺操作中,我們無法依賴CDN來提高性能或減輕服務器負載。
2. 寫操作和核心資料的問題:秒殺操作通常涉及到大量的寫操作,例如庫存減少和購買記錄的更新。這些操作需要直接與核心資料庫交互,而CDN無法幫助我們處理這些寫操作。在這種情況下,我們需要依賴更強大的資料庫和事務管理來確保資料的一致性。
3. 資料一致性和庫存減少的競爭:在高並發的秒殺場景中,多個使用者同時競爭庫存資源,可能會導致庫存的不一致性和競爭條件。這是一個很難處理的問題,需要仔細考慮並使用相應的解決方案。
在解決這些問題時,以下是一些建議:
1. 使用事務管理:使用MySQL的事務來確保庫存減少和購買記錄的更新操作的一致性。通過將相關的操作放入一個事務中,可以確保這些操作的原子性和一致性。
2. 優化資料庫性能:優化資料庫的性能是關鍵。使用適當的索引、分區、緩存等技術來提高資料庫的查詢和寫入性能,以應對高並發的秒殺場景。
3. 使用緩存:在合適的場景下,可以使用緩存來減輕資料庫的負載,例如將熱門商品的庫存信息存儲在緩存中,以減少對資料庫的頻繁查詢。
4. 拆分和分流:如果處理大量並發
請求的單一服務器成為瓶頸,可以考慮拆分和分流技術,將請求分發到多個服務器上,以提高系統的擴展性和性能。
總的來說,秒殺操作是一個具有挑戰性的問題,需要綜合考慮多個方面的解決方案。除了上述建議,還可以根據具體需求和情況,探索更多的優化方法和技術來實現高效且穩定的秒殺系統。
【高并发的点】
详情页→开始前用户会不断刷新 解决方案:详情页部署到CDN上,不直接访问系统
系统时间→ 该处不用优化,因为不会访问后端
地址暴露接口→随着秒杀环节的进展会更换地址,无法使用CDN缓存 解决方案:使用redis服务端缓存后访问Mysql
执行秒杀操作→秒杀按钮,无法使用CDN缓存,因为库存时效问题也不能使用后端缓存,一瞬间会产生大量竞争 解决方案:下一章
【CDN】
内容分发网络,一般互联网公司会有,
静态内容部署在上面加速用户访问,
会部署在离用户最近的网络节点上,
命中CDN后就不需要访问后端服务器
秒杀地址接口优化
高并发分析
CDN的理解
详情页:
红色:高并发
绿色:影响不大
CDN的理解:

【秒杀操作优化分析】
CDN只能缓存url固定的资源:
秒杀地址是变化的,无法用CDN进行缓存
大部分写操作和最核心的数据的请求,无法用CDN
不能在缓存里减库存,因为并发,会有不一致的问题
——>通过mysql的事务来保证数据的一致性;
难点:一瞬间大量用户参与热门商品竞争,MySQL一行数据会有大量竞争,有大量的updata减库存竞争
【秒杀地址接口优化】
无法使用CDN缓存,(因为秒杀地址是会变化的)
适合服务器端缓存:redis等
一致性维护成本低:超时穿透/主动更新
缓存半小时,半小时之后,这个redis的秒杀对象就会超时,超时之后 ,重新访问mysql服务器获取数据,或者是当我们的mysql更新时 我主动的更新一下redis缓存,这样也非常方便 暴露秒杀地址
无法使用CDN缓存:CDN对应不变的东西,秒杀地址是变化的
可以使用业务系统控制,所以适合服务端缓存
因为一致性维护成本低,适合服务端缓存
获取系统时间的请求不会缓存到CDN上,而是直接调用服务器
【为什么要单独获取系统时间?】
静态资源会部署到CDN上,访问detail页,静态资源等不需要访问秒杀系统,因此要单独做一个请求获取系统时间。
【CDN的理解】
大部分的视频加速完全依赖于CDN
33333
为高并发优化做铺垫
红色:可能出现高并发的点
绿色:无影响
秒杀优化原因:
(1)无法使用CDN缓存,其只针对核心数据做缓存
(2)在后端库存操作中,不能在缓存中减库存,极短时间内不同用户的缓存数据不同,变化大,容易造成超量
(3)某一个热点商品被同一时间由多人竞争时会产生大量的update操作,DB效率及错误率需要优化
一致性维护:
缓存半小时,半小时之后,这个redis的秒杀对象就会超时,超时之后 ,重新访问mysql服务器获取数据,或者是当我们的mysql更新时 我主动的更新一下redis缓存,这样也非常方便 暴露秒杀地址
12312312
3213123
CDN


秒杀优化


秒杀操作优化分析:后端缓存困难(库存问题)
秒杀地址接口分析:因为一致性维护成本低,所以适合服务端缓存
CDN的理解
详情页部署到CDN
【秒杀地址暴露接口分析】
无法使用CDN缓存,(因为秒杀地址是会变化的)
适合服务器端缓存:redis等
一致性维护成本低:超时穿透/主动更新
获取系统时间不用优化
【为什么要单独获取系统时间?】
静态资源会部署到CDN上,访问detail页,静态资源等不需要访问秒杀系统,因此要单独做一个请求获取系统时间。
【CDN的理解】
大部分的视频加速完全依赖于CDN
【流程图】
红色表示可能会出现高并发的点,绿色表示无影响。
【详情页】可通过CDN优化。
大部分的视频加速完全依赖于CDN
为什么要单独获取系统时间?静态资源会部署到CDN上,访问detail页,静态资源等不需要访问秒杀系统,因此要单独做一个请求获取系统时间。
【获取系统时间不用优化,因为很快】
【秒杀地址暴露接口分析】
无法使用CDN缓存,(因为秒杀地址是会变化的)
适合服务器端缓存:redis等
一致性维护成本低:超时穿透/主动更新
【秒杀操作接口优化分析】优化方式,减少事务锁时间。
无法使用CDN缓存,
后端缓存困难:库存更新一致性问题
一行数据竞争:热点商品
秒杀地址接口优化