五六月份工作復盤

做的第一個中臺系統(tǒng)

1.主要工作內(nèi)容

原有用戶觸達邏輯分散在各個系統(tǒng),比較雜亂咙鞍,實現(xiàn)各種觸達消息的統(tǒng)一發(fā)送织堂、記錄叠艳、控制,對上游業(yè)務屏蔽消息發(fā)送的復雜性易阳,將用戶觸達邏輯封裝獨立出來附较,建立保險的消息觸達平臺。觸達渠道包括:短信潦俺、PUSH拒课、在線客服、微信公眾號事示、人工早像。新平臺可以靈活支持不同的產(chǎn)品,觸達策略可跟蹤肖爵、可追溯卢鹦、效果可驗證,可配置化劝堪。根據(jù)保單不同的生命周期階段及系統(tǒng)的現(xiàn)狀冀自,觸達功能的實現(xiàn)可分為在線任務和離線任務:

●在線任務:訂單狀態(tài)變更后之后的觸達根據(jù)時效性要求,通過消費mysql-binlog/kafka消息來捕獲投保成功事件秒啦,根據(jù)配置的觸達策略進行觸達熬粗;

●離線任務:部分場景根據(jù)配置的策略每天定時生成觸達批次、觸達任務和觸達明細余境,根據(jù)具體的觸達策略來進行觸達

2. 工作思路

2.1 業(yè)務設計

由于在之前公司接觸過消息系統(tǒng)的設計驻呐、開發(fā)與維護,所以參照以往的規(guī)則設計消息觸達系統(tǒng)芳来,總體思路不變含末,只是為了數(shù)據(jù)統(tǒng)計的方便拆分更細,同時為了支持離線任務的執(zhí)行即舌,引入了批次等設計答渔。

2.1.1數(shù)據(jù)庫設計

1.觸發(fā)策略表
2.策略應用配置
3.觸達批次表
4.觸達任務表
5.觸達明細表

2.2 技術設計

對于實時的在線任務,我們開啟相關數(shù)據(jù)庫的Binlog功能侥涵,使用kafka實時監(jiān)聽數(shù)據(jù)表字段的新增和更新,消費者消費消息完成后續(xù)的觸達任務宋雏。對于離線任務我們使用多線程的離線任務定期掃描明細表芜飘,創(chuàng)建新的任務批次進行發(fā)送。

這里的幾個關鍵技術就是MySql的Binlog磨总,Kafka的接入凳鬓,離線任務的編寫疏叨。

3. 知識點整理

3.1 Binlog

● binlog是記錄所有數(shù)據(jù)庫表結構變更(例如CREATE、ALTER TABLE…)以及表數(shù)據(jù)修改(INSERT耳奕、UPDATE、DELETE…)的二進制日志情屹。

● binlog不會記錄SELECT和SHOW這類操作,因為這類操作對數(shù)據(jù)本身并沒有修改,但你可以通過查詢通用日志來查看MySQL執(zhí)行過的所有語句汹桦。

● 如果update操作沒有造成數(shù)據(jù)變化,也是會記入binlog鉴裹。

這個二進制日志包括兩類文件:

索引文件(文件名后綴為.index)用于記錄哪些日志文件正在被使用舞骆。

日志文件(文件名后綴為.00000*)記錄數(shù)據(jù)庫所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句事件。

Binlog的三個用途:

恢復:這里網(wǎng)上有大把的文章指導你径荔,如何利用binlog日志恢復數(shù)據(jù)庫數(shù)據(jù)督禽。

復制: 主從同步。主庫有一個log dump線程总处,將binlog傳給從庫從庫有兩個線程狈惫,一個I/O線程,一個SQL線程鹦马,I/O線程讀取主庫傳過來的binlog內(nèi)容并寫入到relay log,SQL線程從relay log里面讀取內(nèi)容胧谈,寫入從庫的數(shù)據(jù)庫。

審計:用戶可以通過二進制日志中的信息來進行審計菠红,判斷是否有對數(shù)據(jù)庫進行注入攻擊第岖。

3.2 Kafka

3.2.1 Kafka的特性

高吞吐量、低延遲:kafka每秒可以處理幾十萬條消息试溯,它的延遲最低只有幾毫秒蔑滓,每個topic可以分多個partition, consumer group 對partition進行consume操作

可擴展性:kafka集群支持熱擴展

持久性、可靠性:消息被持久化到本地磁盤遇绞,并且支持數(shù)據(jù)備份防止數(shù)據(jù)丟失

容錯性:允許集群中節(jié)點失敿ぁ(若副本數(shù)量為n,則允許n-1個節(jié)點失敗)

高并發(fā):支持數(shù)千個客戶端同時讀寫

3.2.2 Kafka的使用場景

日志收集:一個公司可以用Kafka可以收集各種服務的log摹闽,通過kafka以統(tǒng)一接口服務的方式開放給各種consumer蹄咖,例如hadoop、Hbase付鹿、Solr等澜汤。

消息系統(tǒng):解耦和生產(chǎn)者和消費者、緩存消息等舵匾。

用戶活動跟蹤:Kafka經(jīng)常被用來記錄web用戶或者app用戶的各種活動俊抵,如瀏覽網(wǎng)頁、搜索坐梯、點擊等活動徽诲,這些活動信息被各個服務器發(fā)布到kafka的topic中,然后訂閱者通過訂閱這些topic來做實時的監(jiān)控分析,或者裝載到hadoop谎替、數(shù)據(jù)倉庫中做離線分析和挖掘偷溺。

運營指標:Kafka也經(jīng)常用來記錄運營監(jiān)控數(shù)據(jù)。包括收集各種分布式應用的數(shù)據(jù)钱贯,生產(chǎn)各種操作的集中反饋挫掏,比如報警和報告。

流式處理:比如spark streaming和storm

3.2.3 Kafka的結構

Kafka原理圖

Producer:Producer即生產(chǎn)者喷舀,消息的產(chǎn)生者砍濒,是消息的入口。

kafka cluster

-Broker:Broker是kafka實例硫麻,每個服務器上有一個或多個kafka的實例爸邢,我們姑且認為每個broker對應一臺服務器。每個kafka集群內(nèi)的broker都有一個不重復的編號拿愧,如圖中的broker-0杠河、broker-1等……

-Topic:消息的主題,可以理解為消息的分類浇辜,kafka的數(shù)據(jù)就保存在topic券敌。在每個broker上都可以創(chuàng)建多個topic。

-Partition:Topic的分區(qū)柳洋,每個topic可以有多個分區(qū)待诅,分區(qū)的作用是做負載,提高kafka的吞吐量熊镣。同一個topic在不同的分區(qū)的數(shù)據(jù)是不重復的卑雁,partition的表現(xiàn)形式就是一個一個的文件夾!

-Replication:每一個分區(qū)都有多個副本绪囱,副本的作用是做備胎测蹲。當主分區(qū)(Leader)故障的時候會選擇一個備胎(Follower)上位,成為Leader鬼吵。在kafka中默認副本的最大數(shù)量是10個扣甲,且副本的數(shù)量不能大于Broker的數(shù)量,follower和leader絕對是在不同的機器齿椅,同一機器對同一個分區(qū)也只可能存放一個副本(包括自己)琉挖。

-Message:每一條發(fā)送的消息主體。

Consumer:消費者涣脚,即消息的消費方示辈,是消息的出口。

Consumer Group:我們可以將多個消費組組成一個消費者組涩澡,在kafka的設計中同一個分區(qū)的數(shù)據(jù)只能被消費者組中的某一個消費者消費。同一個消費者組的消費者可以消費同一個topic的不同分區(qū)的數(shù)據(jù),這也是為了提高kafka的吞吐量妙同!

Zookeeper:kafka集群依賴zookeeper來保存集群的的元信息射富,來保證系統(tǒng)的可用性。

3.2.4 Kafka分區(qū)和確認機制

熟悉負載均衡的朋友應該知道粥帚,當我們向某個服務器發(fā)送請求的時候胰耗,服務端可能會對請求做一個負載,將流量分發(fā)到不同的服務器芒涡,那在kafka中柴灯,如果某個topic有多個partition,producer又怎么知道該將數(shù)據(jù)發(fā)往哪個partition呢费尽?kafka中有幾個原則:

1赠群、partition在寫入的時候可以指定需要寫入的partition,如果有指定旱幼,則寫入對應的partition查描。

2、如果沒有指定partition柏卤,但是設置了數(shù)據(jù)的key冬三,則會根據(jù)key的值hash出一個partition。

3缘缚、如果既沒指定partition勾笆,又沒有設置key,則會輪詢選出一個partition桥滨。

保證消息不丟失是一個消息隊列中間件的基本保證窝爪,那producer在向kafka寫入消息的時候,怎么保證消息不丟失呢该园?其實上面的寫入流程圖中有描述出來酸舍,那就是通過ACK應答機制!在生產(chǎn)者向隊列寫入數(shù)據(jù)的時候可以設置參數(shù)來確定是否確認kafka接收到數(shù)據(jù)里初,這個參數(shù)可設置的值為0啃勉、1all双妨。

0代表producer往集群發(fā)送數(shù)據(jù)不需要等到集群的返回淮阐,不確保消息發(fā)送成功。安全性最低但是效率最高刁品。

1代表producer往集群發(fā)送數(shù)據(jù)只要leader應答就可以發(fā)送下一條泣特,只確保leader發(fā)送成功。

all代表producer往集群發(fā)送數(shù)據(jù)需要所有的follower都完成從leader的同步才會發(fā)送下一條挑随,確保leader發(fā)送成功和所有的副本都完成備份状您。安全性最高,但是效率最低。

3.4 離線任務

這里使用的是Linux的crontab膏孟。

crontab

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末眯分,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柒桑,更是在濱河造成了極大的恐慌弊决,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魁淳,死亡現(xiàn)場離奇詭異飘诗,居然都是意外死亡,警方通過查閱死者的電腦和手機界逛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門昆稿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仇奶,你說我怎么就攤上這事貌嫡。” “怎么了该溯?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵岛抄,是天一觀的道長。 經(jīng)常有香客問我狈茉,道長夫椭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任氯庆,我火速辦了婚禮蹭秋,結果婚禮上,老公的妹妹穿的比我還像新娘堤撵。我一直安慰自己仁讨,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布实昨。 她就那樣靜靜地躺著洞豁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荒给。 梳的紋絲不亂的頭發(fā)上丈挟,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音志电,去河邊找鬼曙咽。 笑死,一個胖子當著我的面吹牛挑辆,可吹牛的內(nèi)容都是我干的例朱。 我是一名探鬼主播孝情,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洒嗤!你這毒婦竟也來了咧叭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烁竭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吉挣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體派撕,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年睬魂,在試婚紗的時候發(fā)現(xiàn)自己被綠了终吼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡氯哮,死狀恐怖际跪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喉钢,我是刑警寧澤姆打,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站肠虽,受9級特大地震影響幔戏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜税课,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一闲延、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧韩玩,春花似錦垒玲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叮雳,卻和暖如春想暗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背帘不。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工说莫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寞焙。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓储狭,卻偏偏與公主長得像互婿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辽狈,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355