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

突破局限!廣告計(jì)費(fèi)系統(tǒng)高可用升級之路

開發(fā) 前端
廣告計(jì)費(fèi)系統(tǒng)的穩(wěn)定性是確保廣告商正常結(jié)算和交易的基礎(chǔ),對于建立信任與合作關(guān)系至關(guān)重要;持續(xù)優(yōu)化廣告計(jì)費(fèi)系統(tǒng)的穩(wěn)定性和可用性是非常必要的,以適應(yīng)變化的業(yè)務(wù)需求,同時(shí)最大化系統(tǒng)效率和資源利用。

1 背景介紹

服務(wù)穩(wěn)定性和高可用性在現(xiàn)代業(yè)務(wù)中扮演著至關(guān)重要的角色。服務(wù)穩(wěn)定性指的是系統(tǒng)能夠持續(xù)地提供可靠、無故障的服務(wù),而高可用性則強(qiáng)調(diào)系統(tǒng)在遇到故障或異常情況時(shí)依然能夠保持正常運(yùn)作。這兩個(gè)方面的重要性在于它們直接影響到用戶體驗(yàn)、業(yè)務(wù)連續(xù)性和企業(yè)聲譽(yù)。當(dāng)服務(wù)不穩(wěn)定或不可用時(shí),用戶可能會(huì)面臨訪問中斷、數(shù)據(jù)丟失或延遲等問題,從而降低用戶滿意度并可能導(dǎo)致客戶流失。另外,對于廣告投放和計(jì)費(fèi)業(yè)務(wù),高可用性尤為重要。廣告是互聯(lián)網(wǎng)企業(yè)最常見的盈利手段,即使短暫的中斷也可能導(dǎo)致巨大的財(cái)務(wù)損失。因此,投資和優(yōu)化服務(wù)穩(wěn)定性與高可用性是必須考慮的關(guān)鍵因素。

本次主要介紹廣告計(jì)費(fèi)系統(tǒng)在穩(wěn)定性和可用性方面所做的優(yōu)化改進(jìn)和升級。

1.1 廣告計(jì)費(fèi)方式介紹

互聯(lián)網(wǎng)廣告大家應(yīng)該都不陌生,日常 pc 和 app 應(yīng)該見過很多彈窗廣告,視頻廣告等,那么這些廣告是怎樣計(jì)費(fèi)的,先來了解下幾種常見的計(jì)費(fèi)模式。

圖片圖片

廣告投放主要是為了提高曝光和轉(zhuǎn)化,使用得比較多的為 CPT、CPM、CPC、 CPA 和 CPS 幾種;不同的計(jì)費(fèi)方式會(huì)對廣告主和平臺(tái)的收益產(chǎn)生不同的影響:

  • CPT(Cost Per Time):按時(shí)間計(jì)費(fèi)的商業(yè)產(chǎn)品,比如頻道頁的頂部展位,用于店鋪快速引流;
  • CPM(Cost Per Mille):按曝光計(jì)費(fèi)的商業(yè)產(chǎn)品,比如開屏廣告、視頻廣告、朋友圈廣告,用于品牌推廣或app拉新促活;
  • CPC(Cost Per Click):按點(diǎn)擊計(jì)費(fèi)的商業(yè)產(chǎn)品,電商行業(yè)常用于站內(nèi)廣告資源位推廣商品;
  • CPA(Cost Per Action):按行為計(jì)費(fèi)的商業(yè)產(chǎn)品,如打電話、關(guān)注、收藏;
  • CPS(Cost Per Sale):按成交計(jì)費(fèi)的商業(yè)產(chǎn)品,多用于站外引流,如:淘寶聯(lián)盟、京東聯(lián)盟、多多進(jìn)寶;

圖片圖片

1.2 廣告計(jì)費(fèi)系統(tǒng)功能介紹

圖片圖片

從圖中可以看出,廣告計(jì)費(fèi)系統(tǒng)主要功能包括兩大部分

  • 廣告檢索階段: 根據(jù)廣告信息生成唯一的扣費(fèi)憑證,作為扣費(fèi)階段的扣費(fèi)依據(jù)。能否正常生成扣費(fèi)憑證直接決定了后續(xù)能否正常扣費(fèi),因此,提高系統(tǒng)的可用性能夠降低對收入的影響。
  • 廣告計(jì)費(fèi)階段: 我們對扣費(fèi)請求進(jìn)行了一系列的處理,包括反作弊措施、扣費(fèi)操作以及事后處理等邏輯。這一階段的核心任務(wù)是確保扣費(fèi)不遺漏,并保障扣費(fèi)的實(shí)時(shí)性??圪M(fèi)的實(shí)時(shí)性不僅對上游超時(shí)量產(chǎn)生影響,還關(guān)乎下游業(yè)務(wù)的及時(shí)性。多種下游業(yè)務(wù)場景,如推廣活動(dòng)、廣告主通知等,都依賴于準(zhǔn)確的計(jì)費(fèi)結(jié)果。例如,當(dāng)預(yù)算不足時(shí),系統(tǒng)需要自動(dòng)下線推廣活動(dòng);當(dāng)余額不足時(shí),系統(tǒng)應(yīng)向廣告主發(fā)送提醒通知。

2 升級背景

2.1 初始流程

圖片圖片

在廣告計(jì)費(fèi)階段,我們采用異步線程處理扣費(fèi)請求,以提升系統(tǒng)的并發(fā)性能和響應(yīng)速度。當(dāng)扣費(fèi)請求失敗時(shí),我們將相關(guān)信息存儲(chǔ)到 Redis 中,以便后續(xù)定時(shí)任務(wù)進(jìn)行失敗數(shù)據(jù)處理。通過定時(shí)任務(wù)的方式,我們能夠處理失敗的扣費(fèi)請求,避免遺漏,確??圪M(fèi)過程的完整性和準(zhǔn)確性。

  • 優(yōu)點(diǎn): 異步處理扣費(fèi)邏輯,可以提高服務(wù)吞吐量和響應(yīng)性能,減少上游等待時(shí)間
  • 缺點(diǎn):
  1. 高并發(fā)情況下丟失扣費(fèi),對丟失的扣費(fèi)補(bǔ)償無法做到及時(shí)處理
  2. 目前的定時(shí)任務(wù)每次只能在一臺(tái)服務(wù)器上執(zhí)行,導(dǎo)致服務(wù)壓力分布不均衡
  3. 扣費(fèi)鏈路較長,涉及的內(nèi)部線程池較多,容易發(fā)生交叉使用導(dǎo)致死鎖的情況

2.1 升級契機(jī)

2.1.1 問題發(fā)現(xiàn)

起初,我們收到了線上的告警通知:扣費(fèi)服務(wù)的線程池任務(wù)隊(duì)列大小遠(yuǎn)遠(yuǎn)超出了報(bào)警設(shè)定的閾值,而且隊(duì)列大小隨著時(shí)間推移還在持續(xù)變大。詳細(xì)告警內(nèi)容如下:

圖片圖片

圖片圖片

相應(yīng)的,廣告業(yè)務(wù)指標(biāo):點(diǎn)擊數(shù)、收入等也出現(xiàn)了非常明顯的下滑,幾乎同時(shí)發(fā)出了業(yè)務(wù)告警通知。其中,點(diǎn)擊數(shù)指標(biāo)對應(yīng)的曲線表現(xiàn)如下:

圖片圖片

2.1.2 原因分析

通過線程池的報(bào)警通知,可以清楚地發(fā)現(xiàn)有線程受到了阻塞,導(dǎo)致需要不斷創(chuàng)建新線程來處理請求。通過生成線程快照,我們發(fā)現(xiàn)用于扣費(fèi)業(yè)務(wù)的線程池中的所有線程都處于等待狀態(tài),并且全部卡在了 countDownLatch.await() 方法處,這表明它們正在等待計(jì)數(shù)器變?yōu)?后釋放共享鎖。

具體導(dǎo)致線程阻塞的原因:

1. 數(shù)據(jù)庫中的數(shù)據(jù)抽取任務(wù)存在慢查詢,導(dǎo)致數(shù)據(jù)庫出現(xiàn)阻塞現(xiàn)象,進(jìn)而使得創(chuàng)建扣費(fèi)訂單的耗時(shí)增加。

2. 由于創(chuàng)建扣費(fèi)訂單的耗時(shí)增加,導(dǎo)致扣費(fèi)任務(wù)的整體執(zhí)行時(shí)間變長。此外,扣費(fèi)服務(wù)中存在線程池使用不當(dāng)?shù)那闆r,父子任務(wù)使用了同一個(gè)線程池。當(dāng)線程池中的所有線程都在執(zhí)行父任務(wù),且所有父任務(wù)都存在未執(zhí)行完的子任務(wù)時(shí),就發(fā)生了死鎖現(xiàn)象。

通過下面一張圖再來直觀地看下死鎖的情況:

一次扣費(fèi)行為被視為父任務(wù),其中包含多個(gè)子任務(wù),這些子任務(wù)用于執(zhí)行反作弊策略。假設(shè)線程池的核心線程數(shù)為2,目前正在執(zhí)行扣費(fèi)父任務(wù)1和2。此外,反作弊子任務(wù)1和3已完成執(zhí)行,而反作弊子任務(wù)2和4仍在任務(wù)隊(duì)列中等待調(diào)度。

由于反作弊子任務(wù)2和4尚未執(zhí)行完畢,導(dǎo)致扣費(fèi)父任務(wù)1和2也無法完成執(zhí)行,從而發(fā)生了死鎖現(xiàn)象。這種情況下,核心線程永遠(yuǎn)無法釋放,最終導(dǎo)致任務(wù)隊(duì)列不斷積壓,直至程序遭遇 OOM 崩潰。

圖片圖片

2.1.3 解決方案

1. 通過重啟服務(wù),可以快速恢復(fù)業(yè)務(wù)正常運(yùn)行。

2. 通過規(guī)范線程池的使用,為父子任務(wù)分配獨(dú)立的線程池,可以避免死鎖情況的發(fā)生,確保任務(wù)的順利執(zhí)行。

2.1.4 問題反思

雖然隔離父子任務(wù)的線程池可以有效地解決死鎖問題,但這次線上事故也暴露了計(jì)費(fèi)系統(tǒng)補(bǔ)償機(jī)制的不完善。盡管我們設(shè)置了定時(shí)任務(wù)來處理失敗的扣費(fèi),但這種方式存在明顯的缺點(diǎn)。

1. 無法及時(shí)執(zhí)行:由于定時(shí)任務(wù)的執(zhí)行是按照預(yù)設(shè)的時(shí)間間隔進(jìn)行的,因此對于一些突發(fā)性的扣費(fèi)失敗情況,可能無法做到及時(shí)處理。

2. 對于此次的問題,由于失敗的扣費(fèi)數(shù)據(jù)還未被加入到 Redis 中,系統(tǒng)就重啟了,這給線上的收入造成了不良影響。

針對上述問題,我們對扣費(fèi)系統(tǒng)的高可用方案進(jìn)行了升級。

3 升級版

3.1 改進(jìn)后流程

圖片圖片

首先整個(gè)扣費(fèi)流程仍然是異步化處理,當(dāng)收到實(shí)時(shí)扣費(fèi)請求后,系統(tǒng)先將扣費(fèi)信息打印日志用于災(zāi)難恢復(fù),然后發(fā)送 MQ 消息,這兩步完成后扣費(fèi)動(dòng)作就算結(jié)束了。

3.2 改進(jìn)點(diǎn)1

使用了 MQ 代替異步線程池來處理扣費(fèi)請求,MQ 相比較異步線程池的主要優(yōu)點(diǎn)是解耦和可靠性。MQ 提供了一種基于消息的分布式通信機(jī)制,可以將數(shù)據(jù)以消息的形式發(fā)送到隊(duì)列中,由消費(fèi)者進(jìn)行異步處理。這種解耦能力使得生產(chǎn)者與消費(fèi)者之間的耦合度降低,提高了系統(tǒng)的可伸縮性和靈活性。更重要的是,MQ 還具有高度可靠性,在消息傳遞過程中能夠確保消息的可靠投遞和持久化存儲(chǔ),即使在消費(fèi)者不可用或重啟時(shí)也能保證消息不丟失。

這樣做的好處是利用 MQ 的可靠性投遞和重試機(jī)制不僅確保了機(jī)器的流量均衡同時(shí)還保證了整個(gè)扣費(fèi)流程的最終一致性。

圖片圖片

圖片圖片

3.3 改進(jìn)點(diǎn)2

針對 MQ 不可用的情況采用了降級方案。當(dāng) MQ 不可用時(shí),使用異步線程處理作為降級方案;這樣可以使系統(tǒng)保持可用性并繼續(xù)運(yùn)行。異步線程處理允許將數(shù)據(jù)直接提交給線程池進(jìn)行處理,而不依賴于MQ的消息傳遞機(jī)制。這樣可以在MQ不可用的情況下,臨時(shí)繞過MQ,通過異步線程池來處理扣費(fèi)請求,以確保系統(tǒng)的穩(wěn)定性和扣費(fèi)功能的可用性。

雖然這種降級方案可能會(huì)導(dǎo)致一些延遲或性能損失,但它可以有效地應(yīng)對 MQ 故障或不可用的情況,并避免完全的系統(tǒng)停機(jī)。當(dāng) MQ 恢復(fù)正常后,系統(tǒng)可以再次切換回 MQ 作為主要的消息傳遞機(jī)制,從而實(shí)現(xiàn)正常的異步處理流程。

圖片圖片

3.4 改進(jìn)點(diǎn)3

在獲取扣費(fèi)憑證時(shí),扣費(fèi)信息是存儲(chǔ)在 Redis 中的。當(dāng) Redis 不可用時(shí),借助了 TiKV 來確保系統(tǒng)的持續(xù)可用性。

召回階段獲取扣費(fèi)憑證時(shí) Redis 和 TiKV 同時(shí)存儲(chǔ)扣費(fèi)信息。主存儲(chǔ)同步寫入 Redis,調(diào)用方等待結(jié)果;從存儲(chǔ)異步寫入 TiKV,在不影響系統(tǒng)性能的前提下,使用TiKV作為備份。

圖片圖片

圖片圖片

3.5 改進(jìn)點(diǎn)4

任務(wù)補(bǔ)償除了 MQ 的重試機(jī)制,還新增了 Spark 任務(wù)用于恢復(fù)大批量扣費(fèi)失敗的情況;Spark 任務(wù)可以從相關(guān)日志文件中提取關(guān)鍵信息,并對需要進(jìn)行扣費(fèi)操作的數(shù)據(jù)進(jìn)行篩選和分析。一旦扣費(fèi)失敗的數(shù)據(jù)被確認(rèn),Spark 任務(wù)會(huì)重新發(fā)送扣費(fèi) MQ,系統(tǒng)重新進(jìn)行消費(fèi),做到跟系統(tǒng)無縫銜接。

通過使用Spark進(jìn)行日志采集和數(shù)據(jù)處理,可以有效地自動(dòng)化和加速扣費(fèi)失敗數(shù)據(jù)的確認(rèn)過程。Spark 的并行計(jì)算和分布式架構(gòu)使得它能夠處理大規(guī)模的日志數(shù)據(jù),并通過靈活的數(shù)據(jù)轉(zhuǎn)換和篩選功能提取所需的信息。這種離線方式可以提供更高的可靠性和效率,同時(shí)減少對人工干預(yù)的依賴,從而提升整體的數(shù)據(jù)處理效能和系統(tǒng)穩(wěn)定性。

圖片圖片

4 結(jié)語

廣告計(jì)費(fèi)系統(tǒng)的穩(wěn)定性是確保廣告商正常結(jié)算和交易的基礎(chǔ),對于建立信任與合作關(guān)系至關(guān)重要;持續(xù)優(yōu)化廣告計(jì)費(fèi)系統(tǒng)的穩(wěn)定性和可用性是非常必要的,以適應(yīng)變化的業(yè)務(wù)需求,同時(shí)最大化系統(tǒng)效率和資源利用。有助于為廣告行業(yè)持續(xù)創(chuàng)造價(jià)值,并保持競爭優(yōu)勢。

關(guān)于作者

張蓉,轉(zhuǎn)轉(zhuǎn)商業(yè)高級開發(fā)工程師,目前負(fù)責(zé)廣告檢索、計(jì)費(fèi)以及特征工程等系統(tǒng)。

責(zé)任編輯:武曉燕 來源: 轉(zhuǎn)轉(zhuǎn)技術(shù)
相關(guān)推薦

2022-07-08 14:17:18

Kubernetes集群高可用Linux

2019-10-11 10:52:42

Web架構(gòu)MongoDB

2013-06-27 09:43:45

物理1000TB光盤

2015-05-04 14:17:16

數(shù)據(jù)庫架構(gòu)高可用

2010-10-28 15:37:36

高可用架構(gòu)

2010-01-12 15:04:01

VB.NET異常處理

2021-07-16 18:44:42

RocketMQ知識

2021-05-24 09:28:41

軟件開發(fā) 技術(shù)

2014-08-20 10:20:18

2024-03-08 09:46:53

2015-05-07 14:24:36

everRun

2013-02-08 01:00:45

Google廣告系統(tǒng)升級

2017-10-23 09:10:52

2017-10-09 09:12:35

攜程運(yùn)維架構(gòu)

2025-03-19 08:21:15

2015-05-08 11:12:21

微天使聯(lián)盟

2025-03-20 10:35:40

2012-12-28 13:35:37

網(wǎng)絡(luò)無線網(wǎng)絡(luò)

2023-12-20 09:26:20

高可用高吞吐高擴(kuò)展性

2011-08-30 22:39:22

筆記本技巧
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 美女在线观看av | 久久综合九色综合欧美狠狠 | 成人黄色在线 | 日韩一区二区不卡 | 国产高清久久久 | 日本免费视频 | 成人午夜影院 | 欧美日韩国产一区二区三区 | 久久久久久女 | 日韩av啪啪网站大全免费观看 | 欧美乱操 | 小草久久久久久久久爱六 | 国产视频久 | 成人国产精品色哟哟 | 国产一级在线观看 | 91久久精品国产91久久 | 一级黄色毛片 | 中文字幕精品一区 | 最新中文字幕第一页视频 | 四虎影视在线 | 91免费观看国产 | 91pao对白在线播放 | 成人精品免费视频 | 在线观看国产视频 | 亚洲人在线观看视频 | 成人不卡在线 | 亚洲精品一区二三区不卡 | 最新中文字幕在线 | 色妹子综合网 | 色婷婷亚洲一区二区三区 | wwwxxx日本在线观看 | 草草影院ccyy | 国产精品国产成人国产三级 | 密桃av| 亚洲日韩欧美一区二区在线 | 国产黄色大片 | 久久久一二三 | 国内精品视频免费观看 | 久久人人爽人人爽人人片av免费 | 狠狠干网站 | 五月天天丁香婷婷在线中 |