自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實時數(shù)倉混沌演練實踐

大數(shù)據(jù) 數(shù)據(jù)倉庫
基于中間件、數(shù)據(jù)庫、JVM、基礎(chǔ)資源、網(wǎng)絡(luò)、服務(wù)等注入常見的異常,根據(jù)實際業(yè)務(wù)中梳理的應(yīng)用核心場景進(jìn)行混沌演練,檢驗系統(tǒng)的脆弱性和應(yīng)急響應(yīng)能力,從而提升團(tuán)隊的穩(wěn)定性保障處理能力。

一、背景介紹

目前實時數(shù)倉提供的投放實時指標(biāo)優(yōu)先級別越來越重要,不再是單獨的報表展示等功能,特別是提供給下游規(guī)則引擎的相關(guān)數(shù)據(jù),直接對投放運營的廣告投放產(chǎn)生直接影響,數(shù)據(jù)延遲或者異常均可能產(chǎn)生直接或者間接的資產(chǎn)損失。

圖片圖片

從投放管理平臺的鏈路全景圖來看,實時數(shù)倉是不可或缺的一環(huán),可以快速處理海量數(shù)據(jù),并迅速分析出有效信息,同時支持投放管理平臺的手動控盤。實時節(jié)點事故,將可能導(dǎo)致整個投放鏈路無法正常運行,另外,投放規(guī)則引擎是自動化操作,服務(wù)需要24小時運行,所以需要配置及時有效的數(shù)據(jù)質(zhì)量監(jiān)控預(yù)警,能快速識別到波動異常或者不符合業(yè)務(wù)的數(shù)據(jù),從而計劃引入混沌工程,希望可以通過主動注入故障的方式、盡可能提前感知風(fēng)險、發(fā)現(xiàn)潛在問題,并針對性地進(jìn)行防范、加固,避免故障發(fā)生時所帶來的嚴(yán)重后果,提高實時數(shù)倉整體抗風(fēng)險能力。

二、演練范圍

為了能更細(xì)致反應(yīng)出混沌演練情況,根據(jù)演練的內(nèi)容不同,將實時數(shù)倉混沌分為兩部分:技術(shù)側(cè)和業(yè)務(wù)側(cè)。

技術(shù)側(cè)混沌:基于中間件、數(shù)據(jù)庫、JVM、基礎(chǔ)資源、網(wǎng)絡(luò)、服務(wù)等注入常見的異常,根據(jù)實際業(yè)務(wù)中梳理的應(yīng)用核心場景進(jìn)行混沌演練,檢驗系統(tǒng)的脆弱性和應(yīng)急響應(yīng)能力,從而提升團(tuán)隊的穩(wěn)定性保障處理能力。

圖片圖片

業(yè)務(wù)側(cè)混沌:對于電商活動密集型的公司來說,各種到達(dá)率、曝光率,以及更加宏觀的 GMV、用戶拉新數(shù)、用戶召喚數(shù)等,都能表現(xiàn)出業(yè)務(wù)的健康程度,在實際生活中,為了描述一種穩(wěn)定狀態(tài),我們需要一組指標(biāo)構(gòu)成一種模型,而不是單一指標(biāo)。無論是否采用混沌工程,識別出這類指標(biāo)的健康狀態(tài)都是至關(guān)重要的,所以要圍繞它們建立一整套完善的數(shù)據(jù)采集、監(jiān)控、預(yù)警機(jī)制,當(dāng)業(yè)務(wù)指標(biāo)發(fā)生波動較大時,我們能搞快速感知、定位、修復(fù)止血。

圖片圖片

過往數(shù)倉混沌工程均是技術(shù)側(cè),此次在投放鏈路已搭建完成主備鏈路的前提下,期望通可以通過多輪業(yè)務(wù)側(cè)混沌,提高系統(tǒng)整體的數(shù)據(jù)異動感知能力。

三、演練計劃

工欲善其事,必先利其器,在執(zhí)行混沌演練前,需要準(zhǔn)備好前置工作,制定合理的演練SOP、方案、計劃,對演練環(huán)境、腳本、數(shù)據(jù)、工具,場景及爆炸半徑等進(jìn)行可能性評估,在確認(rèn)可行性ok的情況下,約好關(guān)聯(lián)方時間,再進(jìn)行實踐操作。

圖片圖片

本篇主要和大家分享基于業(yè)務(wù)側(cè)的實時數(shù)倉混沌演練過程:

1.編寫演練SOP

SOP是一種標(biāo)準(zhǔn)的作業(yè)程序,就是將某一事件的操作步驟和要求,進(jìn)行細(xì)化、量化及優(yōu)化,形成一種標(biāo)準(zhǔn)的操作過程,關(guān)于業(yè)務(wù)側(cè)混沌,尤其是實時數(shù)倉數(shù)據(jù)相關(guān)的演練,我們也是第一次做,目前在業(yè)界也沒有找到相關(guān)的演練指導(dǎo)參考,處于探索階段,為了方便項目進(jìn)度的順利進(jìn)行及后續(xù)演練操作更加規(guī)范、高效,在演練前期大家經(jīng)過溝通、討論后,項目前期梳理的SOP演練模板,如下:

圖片圖片

2.演練方案調(diào)研

先收集實時數(shù)倉投放鏈路核心指標(biāo)范圍,在此基礎(chǔ)上,拉取一段時間內(nèi)的歷史數(shù)據(jù)進(jìn)行分析,找到每個指標(biāo)對應(yīng)的健康波動閥值,從而在配置相應(yīng)的DQC規(guī)則監(jiān)控,對于波動不在健康閥值的異常指標(biāo),在分鐘級別(預(yù)期15min)內(nèi)及時告警,并快速排查響應(yīng)。為此,在演練前期,我們經(jīng)歷過一系列的方案調(diào)研、探索,如下:

「下文提供的方案,指標(biāo)數(shù)據(jù)都是以設(shè)備激活數(shù)為例進(jìn)行分析」

方案一: 按照天維度,收集最近一段時間,同一天每個整點設(shè)備激活數(shù),占當(dāng)天大盤占比,統(tǒng)計出最小值、最大值,作為該指標(biāo)的健康波動閥值;

圖片圖片

  • 方案二: 按照天維度,收集一段時間內(nèi),同一天相鄰整點指標(biāo)波動數(shù)據(jù)找規(guī)律,比如每天上午9點到10點的波動數(shù)據(jù),然后分別通過一系列的數(shù)學(xué)分布方法進(jìn)行數(shù)據(jù)統(tǒng)計,從而希望找一個相對穩(wěn)定的波動區(qū)間;

圖片圖片

  • 方案三: 按照天維度,收集一段時間內(nèi),相鄰天整點指標(biāo)波動數(shù)據(jù)找規(guī)律,比如昨天上午9點到前天上午9點的波動數(shù)據(jù),然后分別通過一系列的數(shù)學(xué)分布方法進(jìn)行數(shù)據(jù)統(tǒng)計,從而希望找一個相對穩(wěn)定的波動區(qū)間;

圖片圖片

  • 方案四:在前面三種方案的基礎(chǔ)上,指標(biāo)在工作日和周末的波動可能不一樣,所以我們在日維度統(tǒng)計的基礎(chǔ)上,我們也調(diào)研了周維度同比波動分布情況,比如每周一上午9點到上午10點的波動數(shù)據(jù),然后分別通過一系列的數(shù)學(xué)分布方法進(jìn)行數(shù)據(jù)統(tǒng)計,從而希望找一個相對穩(wěn)定的波動區(qū)間;

圖片圖片

  • 方案五:同理,我們也調(diào)研了周維度環(huán)比波動分布情況,比如本周一上午9點到上周一上午9點的波動數(shù)據(jù),然后分別通過一系列的數(shù)學(xué)分布方法進(jìn)行數(shù)據(jù)統(tǒng)計,從而希望找一個相對穩(wěn)定的波動區(qū)間;

圖片圖片

  • 方案六:基于主備鏈路,在source源相同的情況下,經(jīng)過實時數(shù)倉計算出的指標(biāo),在同一段時間兩條鏈路sink出來的結(jié)果數(shù)據(jù),正常應(yīng)該是保持一致,或者波動較小,比如10分鐘延遲的主備鏈路,波動不超過10%,平均差異做到一致性做到90%以上。

方案1到5,都嘗試過一遍,每個方案場景數(shù)據(jù)通過最大值、最小值、平均值、各百分位分布、方差、標(biāo)準(zhǔn)差等統(tǒng)計出來的數(shù)據(jù)分析,很難找到一個相當(dāng)穩(wěn)定的波動規(guī)律,也無法框定指標(biāo)具體的閥值區(qū)間,實際演練過程,如果設(shè)置的波動告警閥值過大,真實生產(chǎn)上業(yè)務(wù)數(shù)據(jù)波動異常時,無法及時告警發(fā)現(xiàn);設(shè)置過小,將導(dǎo)致告警頻繁,對其準(zhǔn)確性、有效性可能存在質(zhì)疑,而且,實時投放的核心指標(biāo)有幾十個,每個指標(biāo)對應(yīng)的健康閥值都不一樣,要收集、分析成本非常高,從演練的效果上看,也不是很明顯。

整體評估下來,演練主要采用的是方案六:涉及到的實時投放核心指標(biāo)數(shù)共收集29個,一段時間內(nèi)(15min),主備鏈路指標(biāo)波動差異不超過10%。

3.演練方式

紅藍(lán)對抗演練,將團(tuán)隊分為紅(防)藍(lán)(攻)兩組。

測試人員組成藍(lán)軍:負(fù)責(zé)制定混沌演練方案,執(zhí)行目標(biāo)系統(tǒng)故障注入,詳細(xì)記錄演練過程;

實時數(shù)倉開發(fā)為紅軍:負(fù)責(zé)發(fā)現(xiàn)故障、應(yīng)急響應(yīng)、排除故障,同時驗證系統(tǒng)在不同故障場景下的容錯能力、監(jiān)控能力、人員響應(yīng)能力、恢復(fù)能力等可靠性能力。

圖片圖片

四、演練流程

整體演練過程,大致分為三個階段:準(zhǔn)備階段、攻防階段及復(fù)盤階段。

圖片圖片

1.準(zhǔn)備階段

  • 方案準(zhǔn)備完評審?fù)ㄟ^后,確認(rèn)好鏈路計劃;
  • 藍(lán)軍按計劃根據(jù)事先制定的攻擊方案,提前準(zhǔn)備好相應(yīng)的測試數(shù)據(jù)、腳本;
  • 紅軍按計劃根據(jù)事先制定的攻擊方案,在演練前,提前確保環(huán)境可用,并進(jìn)行監(jiān)控防御、應(yīng)急響應(yīng)措施。

2.攻防階段

  • 藍(lán)隊根據(jù)事先制定的攻擊方案,模擬真實的攻擊行為,按照約定的時間在演練鏈路(備用鏈路)進(jìn)行攻擊,進(jìn)行故障注入,同時記錄好相應(yīng)的操作步驟,方便后續(xù)報告梳理;
  • 紅隊在藍(lán)軍攻擊后,通過飛書/郵件告警等通知方式實時關(guān)注監(jiān)控系統(tǒng)運行情況,如有異常告警,需第一時間進(jìn)行問題排查定位,在評估修復(fù)方案;
  • 在攻防對抗的過程中,藍(lán)軍可根據(jù)紅軍的防御措施進(jìn)行調(diào)整和改進(jìn)攻擊策略,盡力突破系統(tǒng)的防御并達(dá)到既定目標(biāo),同時紅軍也可分析藍(lán)軍的攻擊手法和行為模型,不斷改進(jìn)防御措施來加強(qiáng)防御。

3.復(fù)盤和改進(jìn)階段

  • 在混沌演練結(jié)束后,進(jìn)行總結(jié)和評估,分析紅隊和藍(lán)隊的表現(xiàn),評估系統(tǒng)的安全性和抗攻擊能力;
  • 總結(jié)經(jīng)驗教訓(xùn),總結(jié)成功的防御措施和失敗的攻擊手法,以便于改進(jìn)系統(tǒng)的安全策略;
  • 根據(jù)評估結(jié)果和總結(jié)經(jīng)驗,制定改進(jìn)計劃,修補(bǔ)系統(tǒng)中的漏洞和薄弱點,提升系統(tǒng)的抗風(fēng)險能力。

五、攻防實戰(zhàn)

本次演練共計有29個指標(biāo)波動case,整體演練操作大同小異。

圖片圖片

以其中case17 “召回商品收藏uv在某個渠道下整點波動異?!睘槔?,具體的演練操作流程如下。

1.數(shù)據(jù)準(zhǔn)備

  • 通過后臺數(shù)據(jù)庫,拉出生產(chǎn)主(備)鏈路,某個渠道(如`media_id` = '2')下某個整點(如`hour` = 10)下,召回商品收藏uv對應(yīng)的整體統(tǒng)計值N。
--渠道小時整點維度下,商品收藏uv匯總數(shù)據(jù)
select
  `指標(biāo)名稱`,
  `日期`,
  '2' as `指標(biāo)ID`,
  `小時段`,
  sum(`指標(biāo)值`)
from table_a
where
  date = date_format(now(), '%Y%m%d')
  and `指標(biāo)名稱` in ( '商品收藏uv' )
  and `小時段` = 10
  AND `指標(biāo)id` = '2'
GROUP BY
  `指標(biāo)名稱`,
  `日期`,
  `小時段`
order by
  指標(biāo)名稱;
  • 拉出備用鏈路,某個渠道(如`media_id` = '2')下某個整點(如`hour` = 10)下,具體的一條明細(xì)數(shù)據(jù),記錄商品收藏uv對應(yīng)的值為n,把n改為n+0.1N,后續(xù)注入進(jìn)備用鏈路,從而使得主備波動差異在10%。
-- 明細(xì)數(shù)據(jù)
select
  t.指標(biāo)名稱,t.賬戶id,t.計劃ID,t.設(shè)備類型,t.指標(biāo)值
from
  (
    select
      `賬戶id`,
      `計劃id`,
      `指標(biāo)名稱`,
      `指標(biāo)值`,
      `設(shè)備類型` ,
      row_number() over (partition by 指標(biāo)名稱 order by 指標(biāo)值 desc ) as rn
    from  table_a
    where
      date = date_format(now(), '%Y%m%d')
      and `指標(biāo)名稱` in ('商品收藏uv')
      and `設(shè)備類型` = '召回'
      and `小時段` = 10
      AND `指標(biāo)id` = '2'
  ) t
where
  t.rn = 1
ORDER BY 指標(biāo)名稱;
整理后得到需要注入的數(shù)據(jù)數(shù)據(jù),見標(biāo)黃部分。

圖片圖片

2.故障注入odps

  • 將需要注入的數(shù)據(jù)導(dǎo)入odps。

導(dǎo)入前,需要在datawork空間中新建測試表du_qa_dw_dev.hundun_case,用于導(dǎo)入演練數(shù)據(jù)

-- drop table if  EXISTS du_qa_dw_dev.hundun_case;
CREATE TABLE IF NOT EXISTS hundun_case
(
    message  STRING COMMENT '消息內(nèi)容'
)
COMMENT '混沌演練'
;
  • 往du_qa_dw_dev.hundun_case表里灌數(shù)。

圖片圖片

圖片圖片

  • 驗證數(shù)據(jù)導(dǎo)入是否成功。

圖片圖片

3.odps同步到kafka

執(zhí)行flink同步腳本,將odsp du_qa_dw_dev.hundun_case表表數(shù)據(jù)同步到對應(yīng)的kafka topic中。

flink任務(wù)腳本:

--SQL
--********************************************************************--
--odps同步到kakfa腳本,用于實時數(shù)倉混沌演練異常注入使用
--********************************************************************--
-- 基本函數(shù)
CREATE FUNCTION JsonParseField AS 'com.alibaba.blink.udx.log.JsonParseField';
CREATE FUNCTION jsonStringUdf AS 'com.alibaba.blink.udx.udf.JsonStringUdfV2';
---同步賬號表
CREATE TABLE `source` (
message                        VARCHAR  
) WITH (
   'connector' = 'du-odps',
  'endPoint' = '***',
  'project' = '***',
  'tableName' = 'hundun_case_01',
  'accessId' = '*******',
  'accessKey' = '*******'


);


CREATE TABLE `kafka_sink` (
  `messageKey`  VARBINARY,
  `message`  VARBINARY,
  PRIMARY KEY (`messageKey`) NOT ENFORCED
) WITH (
  'connector' = 'du-kafka',
  'topic' = '********',
   'properties.bootstrap.servers' = '*******',
  'properties.compression.type' = 'gzip',
  'properties.batch.size' = '40960',
  'properties.linger.ms' = '1000',
  'key.format' = 'raw',
  'value.format' = 'raw',
  'value.fields-include' = 'EXCEPT_KEY'
);


INSERT INTO kafka_sink
SELECT
cast(MD5(message) as VARBINARY),
cast(message as VARBINARY)
FROM source
;

4.kafka平臺查詢數(shù)據(jù)

執(zhí)行完flink同步任務(wù)后,可通過后臺查詢,對應(yīng)的數(shù)據(jù)是否同步成功。

圖片圖片

5.異常注入通知

在異常注入完成后,可以通過飛書群通知,告知紅軍,如收到告警,需第一時間群告知。

藍(lán)軍:藍(lán)軍已完成數(shù)據(jù)準(zhǔn)備,請紅軍在演練前確保環(huán)境OK且已完成規(guī)則配置,另外務(wù)必將演練時間計劃及時同步通知到下游關(guān)聯(lián)方;

藍(lán)軍:已完成注入。

6.告警觸發(fā)通知

  • 紅軍在演練前,可通過監(jiān)控平臺提前配置好防御規(guī)則。

圖片圖片

  • 在異常注入后,如符合預(yù)期,在15min內(nèi)發(fā)現(xiàn)指標(biāo)波動異常,紅軍需及時同步到演練群中。

中危**雙鏈路主備一致監(jiān)控

服務(wù)名:**** 環(huán)境:****** 告警時間:****** 觸發(fā)條件:**雙鏈路比對波動異常,持續(xù)10分鐘 告警詳情:指標(biāo):prd_collect_uv主對比備下降:[-10%] 主:1066 備:956

業(yè)務(wù)域:實時數(shù)倉

應(yīng)用負(fù)責(zé)人:***

  • 如不符合預(yù)期,未在15min內(nèi)發(fā)現(xiàn)指標(biāo)波動異常,紅軍需及時定位、跟進(jìn)問題,并在修復(fù)后,溝通后續(xù)演練驗證修復(fù)結(jié)果。

紅軍:15min內(nèi)未收到告警,定位中

紅軍:原因已找到,由于***造成,導(dǎo)致告警數(shù)據(jù)沒有及時發(fā)出,正在修復(fù)處理

紅軍:已修復(fù),請紅軍重新發(fā)起攻擊

7.演練過程記錄

收集、匯總記錄演練過程中的每個操作,含時間點、執(zhí)行人、操作等,如下:

圖片圖片

六、演練總結(jié)

圖片

七、未來展望

實時數(shù)倉業(yè)務(wù)側(cè)的混沌演練,從0到1,在經(jīng)過一系列的探索實踐后,通過主備鏈路比對方式,演練期間對于異常波動的指標(biāo),可以快速識別感知,從演練結(jié)果上,取得了不錯的成效,但也存在一定的局限性,如:

  • 演練期間,通過人工注入的異常數(shù)據(jù),如無法快速清除,可能影響到備用鏈路使用。
  • 對于沒有備鏈路的實時指標(biāo)波動,需要制定更精細(xì)化的可行方案,找尋指標(biāo)健康波動范圍。

這些都需要團(tuán)隊進(jìn)一步去探索、解決,同時在演練的過程中,我們將不斷積累、豐富演練case、完善演練庫,后續(xù)計劃通過引入工具(平臺)、建立演練協(xié)助機(jī)制、定期定時演練等手段,使混沌演練更加自動化、規(guī)范化、常態(tài)化,提高實時數(shù)倉整體數(shù)據(jù)穩(wěn)定。

圖片


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

2023-10-13 07:25:50

2023-07-27 07:44:07

云音樂數(shù)倉平臺

2022-06-27 09:09:34

快手Flink數(shù)倉建設(shè)

2021-07-22 18:29:58

AI

2022-09-28 07:08:25

技術(shù)實時數(shù)倉

2021-08-31 10:18:34

Flink 數(shù)倉一體快手

2022-08-01 15:58:48

數(shù)據(jù)倉庫架構(gòu)數(shù)據(jù)

2023-05-06 07:19:48

數(shù)倉架構(gòu)技術(shù)架構(gòu)

2018-10-19 14:16:09

Flink數(shù)據(jù)倉庫數(shù)據(jù)系統(tǒng)

2021-07-16 10:55:45

數(shù)倉一體Flink SQL

2021-07-13 07:04:19

Flink數(shù)倉數(shù)據(jù)

2022-12-15 17:50:14

2024-09-03 14:59:00

2021-01-18 05:20:52

數(shù)倉hive架構(gòu)

2021-12-10 12:08:25

高可用數(shù)倉Hologres

2022-07-07 10:19:05

數(shù)據(jù)畫像

2024-07-25 08:12:11

2022-05-23 13:30:48

數(shù)據(jù)胡實踐

2023-05-25 08:24:46

Kafka大數(shù)據(jù)
點贊
收藏

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