1. 程式人生 > >架構設計之流量削峰

架構設計之流量削峰

前言

針對於秒殺場景來說,流量往往在一個特定時間點有個高度集中的流量洪峰,這個瞬時對於資源的消耗是很大的,這時往往對於服務的穩定性帶來了極大的挑戰,如果按照流量洪峰預估系統資源,則可能存在極大的資源浪費。

所以協調好處理流量洪峰和資源利用率,最好的方式就是設計錯峰方案進行流量削峰。

削峰目的:

讓服務處理請求更加平緩,節省伺服器資源。

針對於削峰來說,本質上是延緩使用者請求的傳送,減少和過濾一些無效請求。

一般採用以下方式:

  • 排隊
  • 答題
  • 分層過濾

這幾種方案都是無損的,當然有損的方案如限流,負載保護等,是另一種不得已的措施,以後再談。

排隊

流量削峰首先想到的就是佇列,將同步的請求轉換成非同步請求,將流量峰值通過訊息佇列平緩推送過去。

當然訊息佇列需要注意的是訊息擠壓和儲存上限等情況。

類似的排隊方式還有很多,如:

  • 執行緒池加鎖
  • 先進先出記憶體佇列
  • 類似於binlog的順序寫讀處理的機制

答題

一般的電商系統秒殺時會有一個答題流程,主要是為了增加購買的複雜度,首先可以防止一些機器參與秒殺的場景,起到防止作弊的目的。還可以拉大請求時間緩解請求,控制流量達到削峰的目的。

由於經過答題之後的請求具有了先後順序,這樣對於後續的業務邏輯來說就可以很容易的控制了。

答題邏輯的設計:

  • 題庫產生,生成一個個的問題和答案,問題也不用特別複雜,可以防止機器作弊即可。
  • 題庫推送,在秒殺進行之前,將問題推送給交易系統。
  • 問題圖片生成,用於將題目生成制定格式圖片,增加一些干擾因素,問題圖片可以提前推送到cdn進行預熱,不然在真正秒殺開始時,可能圖片載入緩慢影響使用者體驗。

答題邏輯比較簡單了,使用者提交答案,後臺比對題目和答案即可。

分層過濾

針對於秒殺場景來說,跟本質的做法是過濾無效請求,分層過濾是採用漏斗方式進行請求處理的。

請求流程:

  • 大部分流量在使用者瀏覽器或者cdn上獲取,這一層可以攔截大量資料讀取。
  • 前臺讀系統主要是一些快取cache,比如採用nginx+lua等方式攔截無效請求。
  • 業務系統主要做好限流,排隊等操作。對資料做合理分片。
  • 在最後的資料層做好資料強一致校驗,比如保證庫存的準確性(不能為負數)。

這樣請求經過一層層的漏斗過濾,會盡量將少的資料請求到後端了。

相關推薦

架構設計流量

前言 針對於秒殺場景來說,流量往往在一個特定時間點有個高度集中的流量洪峰,這個瞬時對於資源的消耗是很大的,這時往往對於服務的穩定性

架構設計 | 高併發流量,共享資源加鎖機制

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent) # 一、高併發簡介 在網際網路的業

分布式架構設計電商平臺

用戶服 base 介紹 val 重要 本地 交互 pac 一定的 分布式架構設計之電商平臺 何為軟件架構?不同人的答案會有所不同,而我認為一個好的軟件架構除了要具備業務功能外,還應該具備一定的高性能、高可用、高伸縮性及可拓展等非功能需求。而軟件架構是由業務架構和技術架構

SoC嵌入式軟件架構設計三:代碼分塊(Bank)設計原則

post 介紹 讀寫 cor 層次 clas rom bank 分配 上一節講述了在沒有MMU的CPU(如80251、MIPS M控制器系列、ARM cortex m系列)上實現虛擬內存管理的集成硬件設計方法。新設計的內存管理管理單元要實現虛擬內存管理還須要

SaaS架構設計如何轉化成SaaS多租戶模式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

抽獎系統的流量方案

如果觀看抽獎或秒殺系統的請求監控曲線,你就會發現這類系統在活動開放的時間段內會出現一個波峰,而在活動未開放時,系統的請求量、機器負載一般都是比較平穩的。為了節省機器資源,我們不可能時時都提供最大化的資源能力來支援短時間的高峰請求。所以需要使用一些技術手段,來削弱瞬時的請求高峰,讓系統吞吐量在高峰請求下保持可控

架構設計六個複雜度來(續)

這篇繼上篇架構設計之六個複雜度來源 沒有講完的剩下的三個內容低成本、安全、規模等。   一、低成本 當我們的架構方案只涉及幾臺或者十幾臺伺服器時,一般情況下成本並不是我們重點關注的目標,但如果架構方案設計幾百甚至上千上萬臺伺服器,成本就會變成一個非常重要的架構設計考慮點。例如,A方案需要100

阿里架構設計初體驗,送給準備進階架構的朋友(個人總結)

1 基本概念和目的 架構設計的目的是為了解決系統複雜度帶來的問題,並不是要面面俱到,不需要每個架構都具備高效能、高可用、高擴充套件等特點,而是要識別出實際業務實際情況的複雜點,然後有有針對性地解決問題,即:有的放矢,而不是貪大求全。 在實際情況中,不一定每個系統都要做架

小牛帶你架構設計服務限流

v閱讀目錄 v部落格前言 限流可以認為服務降級的一種,限流就是限制系統的輸入和輸出流量已達到保護系統的目的。一般來說系統的吞吐量是可以被測算的,為了保證系統的穩定執行,一旦達到的需要限制的閾值,就需要限制流量並採取一些措施以完成限制流量的目的。比如:延遲處理,拒絕處理,

架構設計「資料庫從主備到主主的高可用方案」

在網際網路專案中,當業務規模越來越大,資料越來越多,隨之而來的就是資料庫壓力會越來越大。慢慢就會發現,資料庫層可能已經成為了整個系統的關鍵點和效能瓶頸了,因此實現資料層的高可用就成為了我們專案中經常要解決的問題。 本文我們就來聊一聊如何實現資料儲存層的高可用方案。在保障資料層的高效能與高穩定方面,最容易想到的

後端技能樹修煉:基於佇列的流量模式

在分散式架構中,前端一個請求會經過後端的多個服務的處理才返回結果,這時就可能會存在一種情況,在間歇性高負載情況下,某個服務 B 的處理能力不能滿足負載的需求,從而導致服務 B 崩潰或者服務呼叫者 A 響應超時,如下圖所示: 那麼如何解決這種問題呢?有讀者可能會說,那就給

架構設計「資料庫叢集方案」

在之前的文章中,我們知道資料庫服務可能已經成為了很多系統的效能關鍵點,甚至是瓶頸了。也給大家介紹了資料庫伺服器從主備架構、到主從架構、再到主主架構的基礎方案。但如果單臺機器已經不能滿足完整業務資料儲存的時候,我們就需要考慮採用多機甚至多中心的部署方案了。 今天我們就再來聊一聊,在多機環境下,資料庫叢集的架構方

高效能網站架構設計快取篇(6)- Redis 叢集命令

叢集cluster info :列印叢集的資訊cluster nodes :列出叢集當前已知的所有節點( node),以及這些節點的相關資訊。節點cluster meet <ip> <port> :將 ip 和 port 所指定的節點新增到叢集當中,讓它成為叢集的一份子。cluster

高效能網站架構設計快取篇(3)- Redis 的配置

我們說Redis是一個強大的Key-Value儲存系統,在前面我們已遇到了兩個問題: 1、redis server 啟動後,獨佔程序,能不能修改為後臺服務呢? 2、redis server 服務是單執行緒的,而我的機器是多核的,能不能在同一臺機器上開啟多個例項更充分的利用 cpu 資源呢?但6379埠已經

高效能網站架構設計快取篇(1)- Redis的安裝與使用

一、什麼 Redis REmote DIctionary Server,簡稱 Redis,是一個類似於Memcached的Key-Value儲存系統。相比Memcached,它支援更豐富的資料結構,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)

高效能網站架構設計快取篇(5)- Redis 叢集(上)

叢集技術是構建高效能網站架構的重要手段,試想在網站承受高併發訪問壓力的同時,還需要從海量資料中查詢出滿足條件的資料,並快速響應,我們必然想到的是將資料進行切片,把資料根據某種規則放入多個不同的伺服器節點,來降低單節點伺服器的壓力。 上一篇我們講到了 Redis 的主從複製技術,當實現了多節點的 master

高效能網站架構設計快取篇(4)- Redis 主從複製

Redis 的主從複製配置非常容易,但我們先來了解一下它的一些特性。 redis 使用非同步複製。從 redis 2.8 開始,slave 也會週期性的告訴 master 現在的資料量。可能只是個機制,用途應該不大。 一個 master 可以擁有多個 slave,廢話,這也是業界的標配吧。

高效能網站架構設計快取篇(2)- Redis C#客戶端

在上一篇中我簡單的介紹瞭如何利用redis自帶的客戶端連線server並執行命令來操作它,但是如何在我們做的專案或產品中操作這個強大的記憶體資料庫呢?首先我們來了解一下redis的原理吧。 官方文件上是這樣說的:Redis在TCP埠6379上監聽到來的連線,客戶端連線到來時,Redis伺服器為此建立一個TC

高效能網站架構設計快取篇(6)- Redis 叢集(中)

昨天晚上釣魚回來,大發神經,寫了篇概括程式設計師生活現狀的文章,沒想到招來眾多人的口誅筆伐,大有上升到政治層面的趨勢。 我也許不會再發表任何衝擊心靈的文章,我希望給大家帶來更多的正能量,所以那篇文章已被我刪除。 我的本意只是想讓各位看過文章之後能冷靜地思考自己的程式人生,不管是對是錯,人都有選擇的權力,走

IM系統架構設計淺見

背景:除去大名鼎鼎的QQ這款即時聊天工具,還有許多細分行業的IM,比如淘寶阿里旺旺、網易泡泡、YY語音......。恰巧公司產品也要開發一款基於我們自己行業的類IM系統,很有幸我擔當了這個產品的架構師,核心程式碼編寫、實現者。下面我近年來從技術上我對IM系統(即時訊息的傳