成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

線上真實排隊系統重構案例分享

開發
這篇文章主要以最近正在做的線上重構項目——乘客排隊系統重構為場景,介紹一篇完整的系統重構技術方案。

詳細技術方案介紹

一、背景

1、現狀:

* 目前線上乘客排隊性能瓶頸很明顯,主要采用Redis  List存儲結構。隨著隊列中訂單量增大,查詢、插入、判斷訂單是否在隊列中等操作RT指數級增長。

* 目前乘客排隊架構,無法滿足業務擴展需求,為支撐之后業務快速迭代,乘客排隊重構迫在眉睫。

2、調研事項

* 使用Mysql存儲排隊信息可行性分析(線下環境壓測) 

* 對外接口和影響范圍梳理(目前對外提供的20個左右接口分析),

表格如下:

接口名稱

接口路徑

調用方

QPS

RT(995)

平均RT

備注

入隊

/queue/enter

XXX

XXX

XXX

XXX

二、目標

1、對外接口不變,從底層存儲改造,兼容目前線上顯示場景,乘客排名顯示和出隊解耦。

排名顯示保留普通隊列、渠道隊列、優先隊列(包含絕對優先), 按入隊時間排序

出隊排序因子入隊時根據固定規則計算, 采用更加靈活的策略算法計算出隊優先級, 出隊時只需根據排序因子排序,從而間接決定出隊順序,

2、數據存儲排名采用Redis有序集合,隊列信息新增mysql存儲,分128張表。

3、解決目前性能瓶頸問題,支持后續業務快速迭代,以及后續需求擴展。

三、整體方案

1、新老方案對比

重構前存儲架構: redis: list數據結構  ,  key:蜂巢中心點 + 車型 + 隊列類型

重構后存儲架構:

排名隊列: redis有序集合, key: 蜂巢中心點 + 車型 + 隊列類型(為了兼容老的)

隊列信息表:  queue_info_xxx,   mysql存儲, 按蜂巢中心點 hash分表,訂單號 + 車型 建聯合唯一索引

部分接口新—老對比

接口

查看排名

是否在隊列中

入隊

出隊

插隊

重構前

1. 循環所有隊列中所有元素,循環判斷計算位置,2.查詢算法組計算預估時間

遍歷查詢出隊列所有元素,循環判斷是否contain

先判斷是否在隊列中存在,這里也會判斷根據命中不同隊列類型,寫入redis 隊列(list) 中

根據車型循環&多隊列類型循環出隊,并記錄log

權益卡插隊

重構后

通過訂單號從”隊列信息表“ 中查詢排隊信息,存在排隊記錄,判斷是否存在排名,若不存在排名顯示M+(排名隊列存在上線控制),否則查詢”排名隊列“直接返回順序 。查詢算法組計算預估時間

直接查詢"隊列信息表"判斷是否存在記錄

先寫入"隊列信息表",若未超過排號閾值,則寫入對應"排名隊列"

更新"隊列信息表"狀態,若存在排名,則從排名隊列中移除,并異步通知候補,并記錄log

直接通過更新隊列信息表”order_by“字段 即可改變出隊順序

重構前瓶頸分析: 每次請求都會將隊列中元素全部取出循環遍歷(當排隊訂單量增大時,RT呈指數級增長,賣個關子,原因大家可以想想為啥?)

重構后存儲架構優勢: 將原來的O(n)時間復雜度,變為O(1)復雜度。

2、重構后架構圖

關于隊列大小統計問題:

排名未限流隊列:   直接通過ZCARD獲取 (O(1)  時間復雜度)

排名限流隊列: 通過計數器獲取總長度 (O(1)), 降級通過ZCARD獲取

2)關于新增運力撮合——查詢列表【橙色部分】可能存在瓶頸問題——后期優化方向有2種 可以排名前N抽離出緩沖集合 隊列截斷 —— 大小超過N轉為其它表存儲

3、其它流程圖: 入隊、出隊流程圖 (此處省略)

4、表結構設計

queue_info_[001 ~ 128] : 排隊信息表 按蜂巢中線點 hash % 128 規則分表,數據按天歸檔

queue_manager : 排 名隊列管理表 主要控制是否限流狀態,和蜂巢隊列信息

queue_log_[001~128] : 訂單入隊&出隊記錄表,按蜂巢中線點  hash % 128 規則分表,后期再考慮歸檔。

詳細表結構 —— 省略

四、排序字段(order_by) 設計

針對排隊場景,時間越小,越在前。可以使用時間差逆序計算,公式如下: ~(-1L << 39L) & (~(毫秒級時間差))

其它規則此處省略.

五、歷史隊列場景兼容問題

排名顯示:   普通隊列、渠道隊列、優先隊列

訂單出隊:  通過權重系數不同配置,最后計算出不同排序

六、灰度方案

按城市灰度,先選小流量城市。

七、回滾方案

關閉城市灰度開關,已存在隊列中數據會影響,需要遷移工具刷新數據

八、數據歸檔方案 & 兜底方案

數據歸檔:   乘客排隊信息按天歸檔

兜底策略:  長時間(可配置)排隊狀態未變更(可能出現異常),強制退出

九、數據監控&報警

乘客排隊Grafana監控: 監控指標:  城市、蜂巢、車型、普通隊列數、渠道隊列數、優先隊列數 報警: 隊列數超過閾值釘釘報警

十、時間規劃

方案調研的接口(20個接口)增加改造方案、責任人,進度項

接口名稱

接口路徑

調用方

QPS

RT(995)

平均RT

備注

改造方案

責任人

進度

入隊

/queue/enter

XXX

XXX

XXX

XXX

注意: 接口自測 和 CR是在開發階段完成的,監控報警不影響測試的開發,可以在測試階段開發。

十一、關聯組

十二、所需資源

總結

重構需要考慮到細節很多,需要考慮到每一個可能出現瓶頸的地方,以及后續優化,擴展問題。

所有改動項,必須責任到個人(避免遺漏),另外提測之前必須全部自測通過(單元測試)。

責任編輯:張燕妮 來源: 淺談架構
相關推薦

2020-07-17 14:35:05

黑客宕機

2010-08-30 09:58:20

虛擬化整合案例

2010-08-26 09:49:57

虛擬化整合案例

2011-11-09 09:45:07

數據中心能效治理服務器

2017-03-30 14:42:08

服務器系統linux

2024-11-04 09:29:23

2012-06-13 09:44:04

性能案例

2023-12-11 06:27:39

MySQL線上業務優化后臺上傳文件

2019-05-16 14:15:19

開源技術 工具

2010-10-09 10:39:45

2010-08-30 17:52:31

Windows Azu云計算數據中心

2019-03-22 13:46:13

公共云云計算云端

2015-01-13 17:35:30

BPM選型

2013-05-03 16:50:22

三維實景

2023-07-02 06:47:42

LOFTER系統架構

2010-10-21 13:08:37

云計算

2013-03-01 09:55:28

負載均衡分布式存儲集群

2022-03-09 20:18:49

TypeScript類型函數

2024-02-27 13:07:49

用戶畫像數據分析HR

2021-01-25 09:20:04

數據庫架構分布式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 18gay男同69亚洲网站 | 精品美女视频在线观看免费软件 | 欧美激情a∨在线视频播放 成人免费共享视频 | 国产一区二区三区精品久久久 | a级在线免费视频 | 久久久免费观看视频 | www.xxxx欧美| 国产伦精品一区二区三毛 | 91综合在线视频 | 色www精品视频在线观看 | 国内自拍偷拍一区 | 成人免费xxxxx在线视频 | 国产一级久久久久 | 黄久久久 | 成人免费视频观看视频 | 国产成人精品一区二区三 | 国产精品99久久久久久动医院 | 韩日在线| 欧美日韩专区 | 亚洲一区二区三区国产 | 日韩av在线免费 | aaaa日韩 | 欧美一级在线 | 精品国产乱码久久久久久88av | 久久久久国产一区二区三区 | 亚洲精品一区二区 | 草草视频在线免费观看 | 毛片视频免费 | 福利视频网 | 国产视频1区2区 | 男人天堂久久 | dy天堂| 午夜日韩精品 | 欧美国产日韩一区二区三区 | 中文字幕在线观看 | 久久中文字幕一区 | 99精品网 | 国产精品一区二区免费 | 中文字幕视频在线观看免费 | 91福利在线观看视频 | 精品国产91|