我認(rèn)知中的營(yíng)銷(xiāo)活動(dòng)及其系統(tǒng)

前言

這是一篇大長(zhǎng)文谜慌,是對(duì)我上份工作的總結(jié)然想,對(duì)主要工作內(nèi)容的總結(jié)、也是對(duì) “2020技術(shù)驛站” 補(bǔ)交的作業(yè)畦娄,望前東家前團(tuán)隊(duì)能更好又沾,也祝愿自己在新的環(huán)境中能繼續(xù)滿心歡喜的前行。
18年參加工作熙卡,到今年3月底離職杖刷,一共歷經(jīng)了1年8個(gè)月的時(shí)間,開(kāi)始的半年做廣告相關(guān)的驳癌,之后到離職一直是在做營(yíng)銷(xiāo)活動(dòng)滑燃。第一段工作經(jīng)歷的飛速成長(zhǎng)期就發(fā)生在這段做營(yíng)銷(xiāo)的時(shí)間。運(yùn)氣比較好颓鲜,遇見(jiàn)了一個(gè)很棒的團(tuán)隊(duì)表窘,很棒的leader和師父,也有幸一開(kāi)始就參與了千萬(wàn)峰值的項(xiàng)目甜滨,雖然到我們的模塊沒(méi)有那么高乐严,但也是整個(gè)項(xiàng)目的規(guī)模和量級(jí)也是業(yè)內(nèi)很難經(jīng)歷的,也正是這些東西讓我發(fā)現(xiàn)了把一件事做好很難衣摩,想做好一件事對(duì)自己技術(shù)底蘊(yùn)昂验、技術(shù)深度&廣度的要求都非常的高。
然后請(qǐng)大家原諒我本文對(duì)營(yíng)銷(xiāo)活動(dòng)類(lèi)系統(tǒng)的以偏概全艾扮,內(nèi)容僅僅是我對(duì)營(yíng)銷(xiāo)及營(yíng)銷(xiāo)系統(tǒng)的認(rèn)知及技術(shù)方面的相關(guān)積累既琴。


何為營(yíng)銷(xiāo)

入職的第一天,老板就跟我說(shuō)泡嘴,我們是C端的營(yíng)銷(xiāo)甫恩,但是還挺懵懂的,對(duì)營(yíng)銷(xiāo)基本是一無(wú)所知酌予。在我印象中營(yíng)銷(xiāo)就是銷(xiāo)售人員的各種推銷(xiāo)說(shuō)辭和各種app 上的push磺箕,直到現(xiàn)在才有了一點(diǎn)基礎(chǔ)的認(rèn)知,當(dāng)然啦抛虫,一年多的經(jīng)歷松靡,我的見(jiàn)解也大概率是片面的,大家就這么一看莱褒。
指企業(yè)發(fā)現(xiàn)或發(fā)掘準(zhǔn)消費(fèi)者需求,讓消費(fèi)者了解該產(chǎn)品進(jìn)而購(gòu)買(mǎi)該產(chǎn)品的過(guò)程涎劈。
營(yíng)銷(xiāo)學(xué)關(guān)于企業(yè)如何發(fā)現(xiàn)广凸、創(chuàng)造和交付價(jià)值以滿足一定目標(biāo)市場(chǎng)的需求,同時(shí)獲取利潤(rùn)的學(xué)科阅茶。
上面是對(duì)營(yíng)銷(xiāo)常見(jiàn)的兩個(gè)定義,個(gè)人而言比較認(rèn)可的是第二種谅海。以市場(chǎng)需求為目標(biāo)脸哀,發(fā)現(xiàn)、創(chuàng)造和交付價(jià)值扭吁,從而獲取利潤(rùn)撞蜂。市場(chǎng)需求實(shí)際上是公司的業(yè)務(wù)范疇,發(fā)現(xiàn)侥袜、創(chuàng)造和交付價(jià)值通常是挖掘用戶需求并刺激使用的過(guò)程蝌诡。而作為營(yíng)銷(xiāo)人員的我們要做的就是根據(jù)公司業(yè)務(wù)范疇,通過(guò)某些形式進(jìn)行獲客&經(jīng)營(yíng)枫吧,刺激用戶使其發(fā)生交易行為浦旱,從而產(chǎn)生利潤(rùn)。
這里的某些形式九杂,也就是我們核心的關(guān)注點(diǎn)了颁湖。

無(wú)法吃透所有領(lǐng)域的營(yíng)銷(xiāo)

營(yíng)銷(xiāo)的業(yè)務(wù)場(chǎng)景十分的多,某兩大手機(jī)廠商門(mén)前兩個(gè)卡通人物的互動(dòng)例隆、電視上插播的洗發(fā)水廣告甥捺、春晚的搖一搖、朋友圈的明星推廣镀层、購(gòu)物支付時(shí)的返現(xiàn)和優(yōu)惠券镰禾,這些都是在不同領(lǐng)域下的不同形式的營(yíng)銷(xiāo)手段。
而每個(gè)領(lǐng)域都有自己專(zhuān)屬的特點(diǎn)鹿响,我們無(wú)法照搬或者復(fù)制方案羡微,需要具體業(yè)務(wù)具體分析。
至于本文要講的線上營(yíng)銷(xiāo)惶我,毫不夸張的說(shuō)互聯(lián)網(wǎng)目前涉及到哪些領(lǐng)域妈倔,就有哪些領(lǐng)域的營(yíng)銷(xiāo),電商绸贡、醫(yī)療侠碧、教育、金融剪返、游戲&文娛等等扁誓。每個(gè)領(lǐng)域都有自己特有的盈利方式,面向人群的行為屬性差異也非常大尿瞭,這就導(dǎo)致?tīng)I(yíng)銷(xiāo)的方式都差異較大闽烙。
我們需要做的實(shí)際上是:掌握營(yíng)銷(xiāo)的核心思想&本質(zhì),洞察業(yè)務(wù)特點(diǎn)以此構(gòu)建營(yíng)銷(xiāo)模型,對(duì)營(yíng)銷(xiāo)模型進(jìn)行多樣化的落地實(shí)現(xiàn)黑竞,從而最大力度刺激用戶捕发。
對(duì)我個(gè)人而言,接觸也相對(duì)較窄很魂,除了自己親自實(shí)踐的信貸領(lǐng)域扎酷,其他的也都是來(lái)自間接經(jīng)驗(yàn),但不妨礙對(duì)營(yíng)銷(xiāo)有一個(gè)較深刻的理解遏匆。

線上營(yíng)銷(xiāo)的落地


上面提到了“通過(guò)某些形式進(jìn)行獲客&經(jīng)營(yíng)”法挨、“構(gòu)建營(yíng)銷(xiāo)模型,對(duì)營(yíng)銷(xiāo)模型進(jìn)行多樣化的落地實(shí)現(xiàn)”幅聘,對(duì)于互聯(lián)網(wǎng)行業(yè)來(lái)說(shuō)落地的方式有很多凡纳,常見(jiàn)的有廣告營(yíng)銷(xiāo)、營(yíng)銷(xiāo)活動(dòng)等喊暖,通常來(lái)說(shuō)這些都是柔和在一起進(jìn)行的惫企,比如投放一個(gè)營(yíng)銷(xiāo)活動(dòng)的廣告。
廣告方面就是在信息流中根據(jù)不同的人群屬性投放對(duì)應(yīng)的物料陵叽,或者通過(guò)有影響力的事或人代言產(chǎn)品并在高曝光的場(chǎng)合出現(xiàn)狞尔,對(duì)于信息流來(lái)說(shuō)就是買(mǎi)流量,通過(guò)自己的DSP系統(tǒng)或者第三方流量買(mǎi)賣(mài)系統(tǒng)進(jìn)行競(jìng)價(jià)投放巩掺。
營(yíng)銷(xiāo)活動(dòng)通常是結(jié)合產(chǎn)品流程偏序,以“小游戲”、“優(yōu)惠刺激”等方式胖替,利用人們的貪心/好奇心等若干心理來(lái)構(gòu)成的營(yíng)銷(xiāo)方式研儒。大家感觸最深的應(yīng)該是“幫我砍一刀”吧。而這些營(yíng)銷(xiāo)活動(dòng)通常是基于背后的權(quán)益系統(tǒng)(優(yōu)惠券独令、紅包等)端朵、觸達(dá)系統(tǒng)(push、短信等)燃箭、活動(dòng)流程系統(tǒng)(規(guī)則引擎冲呢、基礎(chǔ)活動(dòng)單元等)、支撐性組件招狸、算法平臺(tái)等來(lái)共同構(gòu)建出來(lái)的敬拓。
而面向活動(dòng)的營(yíng)銷(xiāo)系統(tǒng),就是本文要闡述的重點(diǎn)了

詳細(xì)說(shuō)說(shuō)活動(dòng)

這里的活動(dòng)具體指的就是上面所提到的營(yíng)銷(xiāo)活動(dòng)
活動(dòng)實(shí)質(zhì)上就是 在時(shí)間裙戏、場(chǎng)景乘凸、成本限制下,對(duì)不同用戶根據(jù)不同規(guī)則進(jìn)行權(quán)益投放累榜,以達(dá)到獲客营勤、經(jīng)營(yíng)、品牌傳播等目的最終構(gòu)成交易的行為。
雖然最終目的都是賺錢(qián)葛作,但中間階段的目標(biāo)是不同的(對(duì)于打工仔來(lái)說(shuō)就是KPI不同)醒第,也就促成了各種各樣的活動(dòng)形式:
通常有離線觸達(dá)類(lèi)刺激復(fù)購(gòu)和獲客、常規(guī)流程內(nèi)補(bǔ)貼提高交易欲望进鸠、周期性“游戲”類(lèi)提升用戶活躍度的經(jīng)營(yíng)or獲客目的、大型營(yíng)銷(xiāo)活動(dòng)的品牌宣傳獲客形病。

常規(guī)離線觸達(dá)活動(dòng)

對(duì)于常規(guī)的離線觸達(dá)類(lèi)活動(dòng)客年,目的基本是刺激復(fù)購(gòu)或獲客。
這種活動(dòng)通常分為兩類(lèi):
1漠吻、干巴巴的文字游戲
這種活動(dòng)形式較為簡(jiǎn)單量瓜,一般通過(guò)“誘惑性“、”誤導(dǎo)性“途乃,利用人們的”貪心“心理玩文字游戲绍傲,進(jìn)行獲客和經(jīng)營(yíng)行為,說(shuō)實(shí)話就是一種合法的”短信詐騙“耍共,通常是廣撒網(wǎng)的形式烫饼。
隨著各種營(yíng)銷(xiāo)短信的爆炸式增長(zhǎng),這種方式基本沒(méi)有太大的效果试读,但礙于成本低基數(shù)大杠纵,也是一種常規(guī)存在的形式。
2钩骇、濕漉漉的文字游戲
這部分通常是真正的結(jié)合一些優(yōu)惠活動(dòng)比藻,直接給予用戶一些優(yōu)惠券,或者引導(dǎo)用戶參與活動(dòng)倘屹。這種形式通常為流程內(nèi)補(bǔ)貼或者游戲類(lèi)活動(dòng)的附屬子活動(dòng)银亲,作為宣傳的推銷(xiāo)的作用。
這種活動(dòng)其中涉及的到的技術(shù):(后面會(huì)詳細(xì)的進(jìn)行介紹)
觸達(dá)平臺(tái):通常包含文案模版的配置管理纽匙、內(nèi)容發(fā)送控制等(主要為對(duì)接各大電信運(yùn)營(yíng)商平臺(tái)务蝠、內(nèi)部push平臺(tái)、公眾號(hào)平臺(tái)等)
算法平臺(tái):稍微高級(jí)一點(diǎn)的觸達(dá)平臺(tái)定義好模版后哄辣,有一些關(guān)鍵字和語(yǔ)句是可以通用戶喜好進(jìn)行填充的请梢,效果更佳。
短鏈服務(wù):一個(gè)1k的鏈接毫無(wú)疑問(wèn)是不適合進(jìn)行投放的力穗,大多是通過(guò)短鏈服務(wù)進(jìn)行鏈接的精簡(jiǎn)來(lái)進(jìn)行投放毅弧。

常規(guī)產(chǎn)品流程內(nèi)補(bǔ)貼


我們的產(chǎn)品,從用戶遇見(jiàn)当窗,到開(kāi)始使用够坐,再到發(fā)生交易通常是擁有一個(gè)漫長(zhǎng)的流程的。
拿購(gòu)物來(lái)講:
看到某app的廣告,不小心點(diǎn)擊去元咙,下載梯影、注冊(cè)登陸、點(diǎn)擊產(chǎn)品庶香、加入購(gòu)物車(chē)甲棍、提交訂單、綁定銀行卡赶掖、喚起收銀臺(tái)感猛、完成支付、點(diǎn)擊評(píng)價(jià)奢赂、后期查看陪白。


每一個(gè)環(huán)節(jié)都可能面臨用戶的流失,尤其是前幾步代價(jià)較高的&用戶不熟悉的階段膳灶,毫無(wú)疑問(wèn)在獲客之后咱士,如何推進(jìn)流程、如何促使復(fù)購(gòu)轧钓,每一個(gè)環(huán)節(jié)都是不可忽略的序厉,所以我們通常需要對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行刺激,刺激的大了成本不夠毕箍、刺激的小沒(méi)有用脂矫、不對(duì)口味沒(méi)有用。
這就要求我們需要建立在每一個(gè)操作環(huán)節(jié)建立營(yíng)銷(xiāo)行為霉晕,并且根據(jù)環(huán)節(jié)特點(diǎn)和不同人群定制營(yíng)銷(xiāo)手段和激勵(lì)措施庭再。比如說(shuō)“綁卡返現(xiàn)”、“購(gòu)物給券”牺堰、“登陸有禮”拄轻、“再購(gòu)更便宜”等很多惡心的措施。
對(duì)于我們系統(tǒng)而言伟葫,產(chǎn)品流程高度業(yè)務(wù)可配變的十分的重要恨搓,對(duì)應(yīng)背后的流程編排引擎要求較高。
對(duì)營(yíng)銷(xiāo)系統(tǒng)而言筏养,需要能簡(jiǎn)單配置可上線的簡(jiǎn)單激勵(lì)活動(dòng)斧抱,背后需要更多的活動(dòng)單元、更靈活的規(guī)則引擎渐溶。

周期性“游戲”類(lèi)活動(dòng)

這類(lèi)活動(dòng)較前幾種而言辉浦,活動(dòng)的存在感更強(qiáng)了,有用戶感知更深刻的活動(dòng)形式茎辐,比如說(shuō)邀請(qǐng)得獎(jiǎng)勵(lì)宪郊、購(gòu)物得抽獎(jiǎng)機(jī)會(huì)掂恕、集卡贏大獎(jiǎng)等等。
這類(lèi)活動(dòng)一般有一整套的活動(dòng)規(guī)則弛槐,也會(huì)有大部分用戶樂(lè)在其中“薅羊毛”(這類(lèi)活動(dòng)有羊毛懊亡,但是實(shí)際上不多),通常是小恩小惠用于提升產(chǎn)品活躍度的乎串,像是分享店枣、邀請(qǐng)等功能通常也會(huì)有一定的獲客效果。
這類(lèi)活動(dòng)的活動(dòng)形式:
闖關(guān)小游戲叹誉、搖一搖艰争、紅包雨抽獎(jiǎng)、集卡桂对、戰(zhàn)隊(duì)比拼等,對(duì)于我們的系統(tǒng)而言對(duì)應(yīng)的通常是:任務(wù)系統(tǒng)鸠匀、簽到系統(tǒng)蕉斜、抽獎(jiǎng)系統(tǒng)、邀請(qǐng)關(guān)系系統(tǒng)缀棍、用戶代幣系統(tǒng)宅此、價(jià)值交換系統(tǒng)等基礎(chǔ)活動(dòng)單元。偶爾會(huì)加上活動(dòng)編排引擎涉及1-2個(gè)基礎(chǔ)單元等爬范。

大型營(yíng)銷(xiāo)活動(dòng)

這種活動(dòng)重在品牌推廣和新業(yè)務(wù)獲客父腕,最常見(jiàn)的有央視春晚歷年的活動(dòng)、某熱播節(jié)日活動(dòng)青瀑、自造節(jié)大促活動(dòng)等璧亮,這個(gè)大家應(yīng)該都有所感知,也都沒(méi)少剁手也沒(méi)少轉(zhuǎn)發(fā)斥难。當(dāng)然啦枝嘶,這類(lèi)活動(dòng)是最適合薅羊毛的,通常來(lái)說(shuō)是真有東西的哑诊,有一點(diǎn)技術(shù)基礎(chǔ)的同學(xué)現(xiàn)在就可以動(dòng)手啦群扶,馬甲號(hào)用起來(lái)積少成多~
從技術(shù)角度來(lái)看,這類(lèi)活動(dòng)都較為復(fù)雜镀裤,針對(duì)預(yù)熱期竞阐、白熱期、冷卻器都有不同的活動(dòng)形式存在暑劝,但這些形式是作為一個(gè)活動(dòng)整體存在的骆莹。通常能把我們現(xiàn)有組件的能力都給用上,所以就不一一列舉可能用到的系統(tǒng)啦担猛。
在技術(shù)特點(diǎn)上具有:活動(dòng)邏輯復(fù)雜汪疮、性能要求較高峭火、資損風(fēng)險(xiǎn)較大、數(shù)據(jù)分析困難等特點(diǎn)智嚷。
這類(lèi)活動(dòng)是對(duì)于營(yíng)銷(xiāo)系統(tǒng)最大的挑戰(zhàn)卖丸,很多的降級(jí)措施、應(yīng)急預(yù)案盏道、性能調(diào)優(yōu)其實(shí)都是對(duì)這類(lèi)活動(dòng)特殊準(zhǔn)備的稍浆。

營(yíng)銷(xiāo)系統(tǒng)設(shè)計(jì)的問(wèn)題域

需求特點(diǎn)

上面著重說(shuō)了常見(jiàn)的營(yíng)銷(xiāo)活動(dòng)類(lèi)型,粗略介紹了面向的場(chǎng)景猜嘱。如果大家經(jīng)常使用一個(gè)產(chǎn)品或者關(guān)注一個(gè)產(chǎn)品衅枫,就會(huì)發(fā)現(xiàn)各類(lèi)營(yíng)銷(xiāo)活動(dòng)層出不窮,每個(gè)細(xì)節(jié)都是營(yíng)銷(xiāo)的樣子朗伶,幾乎每天看都會(huì)有新的不同弦撩。
這種直觀感受側(cè)面反映出營(yíng)銷(xiāo)活動(dòng)相關(guān)需求的特點(diǎn):
1、需求量無(wú)比巨大论皆,且多變
2益楼、時(shí)間緊急,倒排需求通常占80%以上
面對(duì)這樣的情況点晴,增加人力&臨時(shí)借調(diào)感凤,是一種解決方案,但也只能算是下策粒督,不可能為營(yíng)銷(xiāo)投入50%以上的人力(但是我感覺(jué)pdd可能是50%以上退敦,也可能是營(yíng)銷(xiāo)系統(tǒng)已經(jīng)非常成熟)纹因,臨時(shí)借調(diào)研發(fā)效率、質(zhì)量等都有不小的風(fēng)險(xiǎn)坎吻。
作為一個(gè)技術(shù)人員掏膏,我們要做的就是“以技術(shù)手段解決工程效率問(wèn)題”敦锌,這就要求我們能需要做一種功能豐富且更加靈活易用營(yíng)銷(xiāo)系統(tǒng)馒疹,來(lái)達(dá)到小需求簡(jiǎn)單配置可上線,大活動(dòng)釋放降低80%以上的人力成本的目的乙墙。

技術(shù)特點(diǎn)

1颖变、性能要求較高(成敗往往就在峰值)
營(yíng)銷(xiāo)活動(dòng)的訪問(wèn)量通常較大生均,而且峰值突出。拿春晚活動(dòng)腥刹、娛樂(lè)節(jié)目來(lái)說(shuō)马胧,通常是伴隨口播等引導(dǎo)動(dòng)作帶領(lǐng)用戶參與的,80%的用戶都會(huì)集中在那一分鐘左右涌入衔峰,而只是依賴(lài)于加機(jī)器是不現(xiàn)實(shí)的佩脊,降級(jí)限流等只會(huì)白白浪費(fèi)流量并且造成負(fù)面營(yíng)銷(xiāo),營(yíng)銷(xiāo)大促場(chǎng)景下垫卤,我們需要的就是抗威彰。

安全&風(fēng)險(xiǎn)

上面頻頻提到了薅羊毛,這其實(shí)就是營(yíng)銷(xiāo)系統(tǒng)面臨的非常重要的一個(gè)問(wèn)題:資損
資損的來(lái)源通常有活動(dòng)設(shè)計(jì)穴肘、代碼實(shí)現(xiàn)歇盼、羊毛黨的大量存在等多方面的原因,尤其是在這樣的需求特點(diǎn)及大環(huán)境因素下评抚,營(yíng)銷(xiāo)系統(tǒng)是一個(gè)極易發(fā)生資損的點(diǎn)豹缀。

下面就來(lái)看一下是如何用技術(shù)的手段解決上述問(wèn)題,及其中核心系統(tǒng)&組件的實(shí)現(xiàn)原理盈咳。

我認(rèn)為營(yíng)銷(xiāo)系統(tǒng)的樣子

先看一下上面提到的兩個(gè)概念或者說(shuō)實(shí)體:
營(yíng)銷(xiāo):營(yíng)銷(xiāo)學(xué)關(guān)于企業(yè)如何發(fā)現(xiàn)、創(chuàng)造和交付價(jià)值以滿足一定目標(biāo)市場(chǎng)的需求,同時(shí)獲取利潤(rùn)的學(xué)科边翼。
活動(dòng):在時(shí)間鱼响、場(chǎng)景、成本限制下组底,對(duì)不同用戶根據(jù)不同規(guī)則進(jìn)行權(quán)益投放丈积,以達(dá)到獲客、經(jīng)營(yíng)债鸡、品牌傳播等目的最終構(gòu)成交易的行為江滨。
然后結(jié)合業(yè)務(wù)領(lǐng)域,根據(jù)營(yíng)銷(xiāo)場(chǎng)景下的問(wèn)題域(現(xiàn)在&將來(lái))厌均,通過(guò)技術(shù)手段解決效率&質(zhì)量問(wèn)題唬滑,以此最終確定系統(tǒng)的職責(zé)、定位及內(nèi)部架構(gòu)棺弊。
這一板塊的內(nèi)容十分龐大晶密。

聊一下方案選擇

對(duì)于方案的選擇通常有這么幾個(gè)標(biāo)準(zhǔn):人力成本研發(fā)質(zhì)量成本模她、研發(fā)效率成本稻艰、機(jī)器成本
一個(gè)系統(tǒng)方案的實(shí)現(xiàn),最優(yōu)的是人力侈净、機(jī)器投入較少的情況下尊勿,能夠確保質(zhì)量的最快支持需求僧凤。
對(duì)于營(yíng)銷(xiāo)類(lèi)系統(tǒng)來(lái)說(shuō)就是:
建設(shè)非常通用且高性能的基礎(chǔ)設(shè)施組件,實(shí)現(xiàn)相對(duì)通用的系統(tǒng)支持常規(guī)迭代元扔,緊急且重大的需求依賴(lài)基礎(chǔ)設(shè)施進(jìn)行特化實(shí)現(xiàn)躯保。
像支付域、廣告域的這些系統(tǒng)摇展,面對(duì)的需求雖然也不少但是主要邏輯是確定的吻氧,一般都是對(duì)鏈路、功能進(jìn)行豐富和優(yōu)化咏连。而營(yíng)銷(xiāo)場(chǎng)景下的需求講真的盯孙,千奇百怪,除了上述所說(shuō)的一些固定類(lèi)型的活動(dòng)形式及基礎(chǔ)的活動(dòng)單元祟滴,很多時(shí)候伴隨運(yùn)營(yíng)的臨時(shí)且全新的想法振惰,我們需要面臨決策,全新臨時(shí)方案 or 通用解決方案的抉擇垄懂。
通用的系統(tǒng)這個(gè)大家都能接受骑晶,但對(duì)于當(dāng)前所要實(shí)現(xiàn)的邏輯顯然不能復(fù)用的情況,我的建議是采用全新的臨時(shí)方案僅依賴(lài)基礎(chǔ)組件草慧,新的數(shù)據(jù)存儲(chǔ)桶蛔、新的server,一切只為解決當(dāng)前臨時(shí)需求漫谷。因?yàn)榫惋L(fēng)險(xiǎn)和成本來(lái)說(shuō)仔雷,實(shí)現(xiàn)一個(gè)臨時(shí)方案相對(duì)于改一個(gè)相對(duì)復(fù)雜的系統(tǒng)要簡(jiǎn)單的多,并且風(fēng)險(xiǎn)完全收斂舔示,我們也能集中精力解決當(dāng)前問(wèn)題碟婆,而不是竭盡所能把系統(tǒng)建設(shè)的啥都可配制化,看似系統(tǒng)牛逼惕稻,但為了暫時(shí)的需求竖共,投入產(chǎn)出比太低。
營(yíng)銷(xiāo)場(chǎng)景下永遠(yuǎn)都有臨時(shí)且重大的需求俺祠,我們要做的是成本投入較小的情況下快速迭代公给。

營(yíng)銷(xiāo)系統(tǒng)架構(gòu)

系統(tǒng)功能:
1、對(duì)業(yè)務(wù)系統(tǒng)或直接對(duì)用戶提供營(yíng)銷(xiāo)能力輸出
2蜘渣、向業(yè)務(wù)方提供營(yíng)銷(xiāo)業(yè)務(wù)的配置化能力
3妓布、提供效果洞察、成本宋梧、資損監(jiān)控能力


理想目標(biāo):
常規(guī)活動(dòng)配置化可上線匣沼,大型活動(dòng)節(jié)省80%以上成本。
活動(dòng)效果可洞察捂龄,資損&故障易發(fā)現(xiàn)
系統(tǒng)架構(gòu):


活動(dòng)流程層主要為構(gòu)建實(shí)現(xiàn)營(yíng)銷(xiāo)活動(dòng)流程實(shí)現(xiàn)能力的標(biāo)準(zhǔn)化輸出释涛,以活動(dòng)單元能力或活動(dòng)組件基礎(chǔ)能力為原子單位加叁,進(jìn)行活動(dòng)流程編排。
活動(dòng)單元層:提供常用營(yíng)銷(xiāo)活動(dòng)的能力(比如抽獎(jiǎng)唇撬、秒殺它匕、邀請(qǐng)),每個(gè)單元面向一類(lèi)營(yíng)銷(xiāo)形式窖认,對(duì)外暴露標(biāo)準(zhǔn)接口豫柬。內(nèi)部依賴(lài)于活動(dòng)組件。
活動(dòng)組件:提供標(biāo)準(zhǔn)的單一的營(yíng)銷(xiāo)功能(簽到扑浸、分享)或業(yè)務(wù)能力(價(jià)值交換烧给、標(biāo)簽輸出)或系統(tǒng)能力(調(diào)度組件、權(quán)益高效發(fā)放)等喝噪。
權(quán)益系統(tǒng):主要包含業(yè)務(wù)場(chǎng)景下內(nèi)部權(quán)益础嫡、現(xiàn)金權(quán)益、外部權(quán)益酝惧,提供權(quán)益的實(shí)際發(fā)放榴鼎、核銷(xiāo)能力。
數(shù)據(jù)處理:主要針對(duì)數(shù)據(jù)庫(kù)(mysql晚唇、redis)巫财、日志數(shù)據(jù)等數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,為監(jiān)控哩陕、數(shù)據(jù)一致性提供數(shù)據(jù)源
監(jiān)控方面:對(duì)業(yè)務(wù)方提供可視化平项、標(biāo)準(zhǔn)化的效果展示,及資損監(jiān)控&系統(tǒng)監(jiān)控等能力萌踱。
對(duì)賬補(bǔ)單:提供數(shù)據(jù)一致性的最后一層保障葵礼。

常用組件

要開(kāi)始深入技術(shù)細(xì)節(jié)啦号阿,這塊內(nèi)容背后的知識(shí)體系基本就是我這1年8個(gè)月的基礎(chǔ)技術(shù)能力的成長(zhǎng)了并鸵,選幾個(gè)具有代表性的組件來(lái)說(shuō)。

唯一單號(hào)服務(wù)

這個(gè)組件非常非常重要扔涧,所以會(huì)說(shuō)的相對(duì)仔細(xì)园担。
在繁多的業(yè)務(wù)場(chǎng)景下n多系統(tǒng)的交互場(chǎng)景下,我們通常需要一個(gè)唯一id來(lái)作冪等處理枯夜,同時(shí)海量的數(shù)據(jù)(DB弯汰、log等)我們也需要一個(gè)唯一單號(hào)作為線索完成高效的數(shù)據(jù)分析工作,所以說(shuō)每個(gè)請(qǐng)求湖雹、每個(gè)環(huán)節(jié)我們都是需要唯一id的咏闪。
看到上述背景,不難想到唯一單號(hào)服務(wù)所面臨的核心問(wèn)題
功能性要求
1摔吏、唯一性保障
2鸽嫂、業(yè)務(wù)相關(guān)性且安全
系統(tǒng)要求
3纵装、高性能
4、高可用
這四點(diǎn)即是難點(diǎn)据某,也是唯一單號(hào)的特征橡娄。
唯一單號(hào)服務(wù)的實(shí)現(xiàn)方案有很多種,最常見(jiàn)的有自增鍵癣籽、UUID挽唉、雪花算法、Leaf-segment三種方案筷狼。
自增鍵
利用自增鍵是最容易想到的一種方式瓶籽,實(shí)現(xiàn)方式通常有mysql主鍵自增、redis incr桑逝。但這兩種方式很顯然都會(huì)存在單點(diǎn)的問(wèn)題棘劣,而且自增主鍵性能受限、redis 易發(fā)生數(shù)據(jù)丟失(性能只是相對(duì)mysql更好)楞遏,但實(shí)現(xiàn)大學(xué)作業(yè)的時(shí)候還是可以用的茬暇,真實(shí)生產(chǎn)環(huán)境是肯定不會(huì)選用的。
uuid
UUID(Universally Unique Identifier)的標(biāo)準(zhǔn)型式包含32個(gè)16進(jìn)制數(shù)字寡喝,以連字號(hào)分為五段糙俗,形式為xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx的36個(gè)字符,具體標(biāo)準(zhǔn)可見(jiàn):http://www.ietf.org/rfc/rfc4122.txt(墻),目前業(yè)界有5種常用的生成uuid的方式预鬓。
這種方式優(yōu)點(diǎn)是性能高巧骚,純本地生成,無(wú)網(wǎng)絡(luò)IO發(fā)生格二。
缺點(diǎn)也很突出:
存儲(chǔ)方面:
1劈彪、不易存儲(chǔ)(實(shí)在太長(zhǎng)了)
2、這類(lèi)id由于通常要落庫(kù)并掛索引顶猜,對(duì)于mysql來(lái)講沧奴,UUID的無(wú)序性會(huì)使數(shù)據(jù)位置頻繁變動(dòng),嚴(yán)重影響性能长窄,尤其是作為主鍵的情況下(主鍵越短越好)
業(yè)務(wù)相關(guān)&安全性:
1滔吠、最常用的基于mac地址生成的方式會(huì)暴露mac。
2挠日、無(wú)任何業(yè)務(wù)標(biāo)示疮绷,排查問(wèn)題和統(tǒng)計(jì)時(shí)十分不便。
雪花算法
雪花算法最初是推特用于標(biāo)記消息的嚣潜,跟uuid結(jié)構(gòu)類(lèi)似冬骚,通過(guò)劃分命名空間實(shí)現(xiàn),基于時(shí)間戳+機(jī)器碼+業(yè)務(wù)標(biāo)示實(shí)現(xiàn),這種方式極易橫向擴(kuò)展只冻,由于是本地生成夜涕,且每臺(tái)機(jī)器碼值都不同,可用性和性能都得到了保證属愤。并且靈活的結(jié)構(gòu)添加業(yè)務(wù)標(biāo)示也變的輕松了許多女器。


實(shí)現(xiàn)方式與uuid相似,雖然相對(duì)提及會(huì)小一些住诸,存儲(chǔ)方面的問(wèn)題稍微得到緩解驾胆。
但是有一個(gè)很?chē)?yán)重的風(fēng)險(xiǎn)點(diǎn)贱呐,一旦發(fā)生時(shí)鐘回?fù)苎俎保蔷秃軕K了
mongoDB使用的就是這樣方式驳阎。
Leaf-segment
這種方式是我除雪花算法外最看好的實(shí)現(xiàn)方式
依賴(lài)于mysql存儲(chǔ)保證數(shù)據(jù)不丟,并且利用行鎖保證單調(diào)遞增馁蒂,一張表維護(hù)多個(gè)活動(dòng)的id呵晚,通過(guò)異步化的方式批量批發(fā)單號(hào)對(duì)外提供服務(wù)保證性能饵隙,多個(gè)單號(hào)批發(fā)商對(duì)外提供服務(wù)并容忍單號(hào)浪費(fèi)以此保證可用性。
這段話可能說(shuō)不明白直接看代碼和圖:

 `activity_id` bigint(20) NOT NULL AUTO_INCREMENT,
 `activity_name` varchar(512) NOT NULL,
 `sn` bigint(20) NOT NULL DEFAULT '0',
 `step` bigint(20) NOT NULL DEFAULT '10000',
 /**
* 每次批發(fā)時(shí):
* 1金矛、返回sn ~ maxSn(sn + step) (就是所批發(fā)走的號(hào)段)
* 2、sn = sn + step + 1
* 提供服務(wù)時(shí):
* 內(nèi)存中輸出小于maxSn的sn饼酿,并對(duì)sn++即可 
**/

mysql可以只用一個(gè)嗜湃,通常來(lái)說(shuō)內(nèi)存中大量的號(hào)段足以支撐mysql恢復(fù),如果想用多個(gè)mysql同樣需要進(jìn)行劃分命名空間肩榕。

規(guī)則引擎

在任何配置化的場(chǎng)景下規(guī)則引擎都是核心的存在筐乳,通常來(lái)說(shuō)表達(dá)式在可視化的配置化后臺(tái)乔妈,結(jié)合配置模版+配置元數(shù)據(jù)編譯成“規(guī)則”蝙云,規(guī)則在執(zhí)行時(shí)被翻譯成表達(dá)式或者執(zhí)行從而達(dá)到業(yè)務(wù)邏輯可編排,決策邏輯可配制的作用。


規(guī)則引擎一抓一大把明郭,大家自行百度即可贾铝。
基礎(chǔ)的規(guī)則引擎中表達(dá)式的生成與解釋也是營(yíng)銷(xiāo)場(chǎng)景非常常用的垢揩,比如波蘭表達(dá)式等敛瓷,涉及標(biāo)簽的地方就大概率涉及波蘭表達(dá)式琐驴。

價(jià)值交換組件

這里的價(jià)值交換組件指的是營(yíng)銷(xiāo)場(chǎng)景下绝淡,營(yíng)銷(xiāo)活動(dòng)系統(tǒng)中各種“積分”、“代幣”悬包、“機(jī)會(huì)”等價(jià)值載體的交換體系布近,不同的活動(dòng)單元中所使用的價(jià)值載體是不同的撑瞧,要串聯(lián)幾個(gè)組件完成整個(gè)“大活動(dòng)”的正常運(yùn)作,出上層的規(guī)則引擎外脏嚷,更重要的就是不同價(jià)值載體之間的轉(zhuǎn)換,比如說(shuō)“抽獎(jiǎng)機(jī)會(huì)”<——>"任務(wù)積分"<——>"權(quán)益"高每。
價(jià)值交換組件的場(chǎng)景更像是一種存在匯率的轉(zhuǎn)賬系統(tǒng)(但是相對(duì)轉(zhuǎn)賬來(lái)說(shuō),要簡(jiǎn)單的多,通常是單向并不可退的乔煞,僅僅作為系統(tǒng)邏輯轉(zhuǎn)換的內(nèi)部存在).
可以簡(jiǎn)單看一下價(jià)值交換組件的內(nèi)部實(shí)現(xiàn):


cache雄右、異步記賬等存粹為了性能,其中最核心的點(diǎn)就是數(shù)據(jù)一致性問(wèn)題囤屹,這個(gè)點(diǎn)會(huì)在后面單獨(dú)介紹。

用戶標(biāo)簽體系

用戶標(biāo)簽通常分為用戶實(shí)時(shí)業(yè)務(wù)狀態(tài)標(biāo)簽智厌、用戶畫(huà)像特征標(biāo)簽兩種角钩。實(shí)時(shí)業(yè)務(wù)特征通常來(lái)源于實(shí)時(shí)業(yè)務(wù)系統(tǒng)的接口或者DB惨险,而用戶畫(huà)像特征標(biāo)簽這個(gè)通常是算法平臺(tái)提供,用戶標(biāo)簽所要承受的qps數(shù)是除唯一單號(hào)服務(wù)外最大的恭朗,所以通常性能要求高(承載qps量大律罢、耗時(shí)短)沧踏,但可用性要求倒是沒(méi)那么高(一個(gè)合理的系統(tǒng),在不知道用戶信息的情況下也應(yīng)該能正常作出兜底反應(yīng)的)
通常來(lái)說(shuō),我認(rèn)為一個(gè)合理的在線標(biāo)簽系統(tǒng)是這樣的:


單獨(dú)具有流量控制功能,保證大部分流量可用寒屯,降級(jí)掉一部分請(qǐng)求,對(duì)常用的標(biāo)簽進(jìn)行緩存控制<標(biāo)簽key,用戶id野揪,統(tǒng)一有效時(shí)間>,根據(jù)需要獲取可接受時(shí)間范圍內(nèi)用戶標(biāo)簽挣惰。
未命中緩存的標(biāo)簽锤岸,交由標(biāo)簽任務(wù)管理器進(jìn)行處理赏枚,決定單個(gè)標(biāo)簽處理最大時(shí)長(zhǎng)、標(biāo)簽并行&串行處理機(jī)制及處理順序、處理任務(wù)調(diào)度等,底層維護(hù)并發(fā)模型(線程數(shù)市咆、任務(wù)存放機(jī)制等)
再下一層,維護(hù)對(duì)外部接口、業(yè)務(wù)數(shù)據(jù)或接口、用戶畫(huà)像數(shù)據(jù)的處理單元贸呢。

短鏈服務(wù)

上文在觸達(dá)單元中就提到了短鏈服務(wù),首先業(yè)務(wù)常見(jiàn)猜谚、技術(shù)特點(diǎn)鮮明坚芜,所以單獨(dú)拿出來(lái)說(shuō)了。
短鏈服務(wù)的應(yīng)用場(chǎng)景非常多,除了短信中的鏈接,平日里的鏈接分享球榆、網(wǎng)頁(yè)分享篱昔、二維碼分享其實(shí)斗志這種方式舀射,只是表現(xiàn)形式不同而已房待。
短鏈接實(shí)現(xiàn)思路很簡(jiǎn)單:



找一個(gè)短鏈接試試看:3.cn/j/10nd-pE9



至于這里為什么用的是302而不是301框冀,是因?yàn)榕R時(shí)重定向時(shí)能夠統(tǒng)計(jì)到短鏈接點(diǎn)擊次數(shù)惯裕,通常也會(huì)被用作效果分析撑刺。用301永久重定向也是可以的挠铲。
至于后面“10nd-pE9”這個(gè)碼安聘,通常被稱(chēng)為短碼音羞,生成方式有很多種舍肠,比如上面提到的唯一單號(hào)财边,還有就是摘要法(存在小概率重復(fù)的可能性黑滴,但能夠保證鏈接夠短)。
如果是小型企業(yè)大可以利用現(xiàn)成的短鏈服務(wù)提供商,比如百度的:https://dwz.cn/

基礎(chǔ)活動(dòng)單元

抽獎(jiǎng)活動(dòng)單元將常見(jiàn)的活動(dòng)形式進(jìn)行了一定程度上的抽象,做了通用化處理莺债,以應(yīng)對(duì)其高頻的需求椎侠。這里拿幾個(gè)經(jīng)典的活動(dòng)形式進(jìn)行闡述我纪。
活動(dòng)單元的建立,可以根據(jù)具體的業(yè)務(wù)場(chǎng)景下的各種運(yùn)營(yíng)的需求來(lái)進(jìn)行拆分抽象丐吓。

談?wù)劤楠?jiǎng)

拿抽獎(jiǎng)來(lái)說(shuō)浅悉,搖一搖是抽獎(jiǎng)券犁,九宮格轉(zhuǎn)盤(pán)是抽獎(jiǎng)术健,n選一砸金蛋也是抽獎(jiǎng),大家點(diǎn)的火熱朝天的紅包雨其實(shí)也是抽獎(jiǎng)粘衬,這類(lèi)抽獎(jiǎng)活動(dòng)對(duì)用戶活躍度非常有幫助荞估,用戶分享意愿也很強(qiáng),基本是大型活動(dòng)每次必選的組成部分稚新。所以就完全可以對(duì)其進(jìn)行抽獎(jiǎng)建立一個(gè)通用的抽獎(jiǎng)模型勘伺。
整體看下來(lái)一個(gè)抽獎(jiǎng)系統(tǒng)是這樣的:


其中的核心組件有:
概率模型
用戶控制用戶中獎(jiǎng)的概率,實(shí)現(xiàn)方式很簡(jiǎn)單:
1褂删、確定可抽獎(jiǎng)總區(qū)間飞醉,確定獎(jiǎng)品區(qū)間段,一次性進(jìn)行抽獎(jiǎng)屯阀。


2缅帘、Alias Method
可以直接看這一篇實(shí)現(xiàn):http://www.keithschwarz.com/darts-dice-coins/
大致意思:把N種可能性拼裝成一個(gè)方形(整體)噪裕,分成N列,每列高度為1且最多兩種可能性股毫,可能性抽象為某種顏色膳音,即每列最多有兩種顏色,且第n列中必有第n種可能性铃诬,這里將第n種可能性稱(chēng)為原色祭陷。 想象拋出一個(gè)硬幣,會(huì)落在其中一列趣席,并且是落在列上的一種顏色兵志。這樣就得到兩個(gè)數(shù)組:一個(gè)記錄落在原色的概率是多少,記為Prob數(shù)組宣肚,另一個(gè)記錄列上非原色的顏色名稱(chēng)想罕,記為Alias數(shù)組,若該列只有原色則記為null霉涨。

抽獎(jiǎng)機(jī)會(huì)控制
提供用戶可抽獎(jiǎng)機(jī)會(huì)的控制按价,是一種價(jià)值的載體。抽獎(jiǎng)系統(tǒng)對(duì)外暴露次數(shù)增加接口笙瑟,內(nèi)部抽獎(jiǎng)行為消耗抽獎(jiǎng)次數(shù)楼镐。
獎(jiǎng)池控制
每個(gè)用戶群面向自己的獎(jiǎng)品集合,高價(jià)值的用戶或者潛在用戶面向價(jià)值較高的獎(jiǎng)品往枷,風(fēng)險(xiǎn)用戶或者下沉用戶面向低價(jià)值的優(yōu)惠券等框产,就是這么黑。
這里通常依賴(lài)于表達(dá)式引擎错洁,根據(jù)標(biāo)簽計(jì)算用戶所選獎(jiǎng)池秉宿。
中獎(jiǎng)限制
曾經(jīng)的我也以為獎(jiǎng)可以隨便中,除了面向獎(jiǎng)品集合之外屯碴,通常對(duì)用戶會(huì)額外加n多限制條件描睦。
比如說(shuō),a獎(jiǎng)品最多中2次窿锉,b獎(jiǎng)品最價(jià)值不能超過(guò)2元酌摇,命中iphone大獎(jiǎng)后其他不能再中大獎(jiǎng)并且其他獎(jiǎng)品概率下降。
庫(kù)存控制
所有的獎(jiǎng)品都是有成本預(yù)算的嗡载,不能無(wú)限制發(fā)放窑多,這就要求對(duì)獎(jiǎng)品進(jìn)行庫(kù)存控制。
這里有一個(gè)設(shè)計(jì)的思路洼滚,分別設(shè)置庫(kù)存供應(yīng)量埂息、庫(kù)存消耗量,剩余庫(kù)存=庫(kù)存供應(yīng)量-庫(kù)存消耗量,這樣相對(duì)于拿一個(gè)數(shù)值表示庫(kù)存進(jìn)行增減操作要靈活的多并且安全很多千康,尤其適合在庫(kù)存增加時(shí)享幽。
另外,庫(kù)存的消耗操作很顯然是一個(gè)存在競(jìng)態(tài)條件的復(fù)合操作拾弃,我們需要保證其原子性值桩,可以利用上鎖等措施串行化,也可以利用現(xiàn)有工具的原子能力(比如reids 操作的原子性:incrby豪椿、lua等)

裂變營(yíng)銷(xiāo)

這里還有一個(gè)值得提的是列表營(yíng)銷(xiāo)奔坟,當(dāng)下正火的營(yíng)銷(xiāo)方式,最經(jīng)典的莫過(guò)于“幫我砍一刀”搭盾。
分開(kāi)來(lái)看咳秉,營(yíng)銷(xiāo)上面說(shuō)過(guò)了,裂變概括來(lái)說(shuō)鸯隅,按生物學(xué)來(lái)說(shuō)是細(xì)胞核的裂變澜建,由一個(gè)裂變成2個(gè),2個(gè)裂變成4個(gè)蝌以。換作人來(lái)說(shuō)炕舵,就是當(dāng)前用戶是否能夠幫忙獲客。
對(duì)于裂變營(yíng)銷(xiāo)而言饼灿,通常包含三個(gè)環(huán)節(jié)幕侠,設(shè)計(jì)裂變流程帝美,裂變流程變?yōu)檗D(zhuǎn)化漏斗碍彭,漏斗分析。



裂變營(yíng)銷(xiāo)重在邏輯悼潭,性能等要求一般不會(huì)很高庇忌。
對(duì)于系統(tǒng)設(shè)計(jì)而言有幾塊格外的重要:
1、底層邀請(qǐng)關(guān)系組件
裂變營(yíng)銷(xiāo)往往是從人出發(fā)舰褪,以人結(jié)束皆疹,造出一顆顆龐大的樹(shù),所以我們需要維護(hù)整個(gè)樹(shù)的結(jié)構(gòu)占拍,不僅僅是為了存儲(chǔ)活動(dòng)的邀請(qǐng)記錄供激勵(lì)使用略就,對(duì)后期判斷“散點(diǎn)”也是尤為重要的。
2晃酒、標(biāo)簽組件
活動(dòng)的重心在于拉人表牢,什么樣的人能拉人,是相當(dāng)重要的贝次,要建立與裂變營(yíng)銷(xiāo)關(guān)聯(lián)性很強(qiáng)的人群畫(huà)像標(biāo)簽十分重要崔兴。
這塊了解的不多,暫時(shí)就這些~

數(shù)據(jù)的一致性處理

數(shù)據(jù)一致性一直是各種系統(tǒng)很頭痛的點(diǎn),尤其是分布式系統(tǒng)越來(lái)越昌盛的今天敲茄。數(shù)據(jù)一致性也存在cap位谋、base這樣的著名的理論,實(shí)際上平衡一致性與性能堰燎、可用性等特性是需要根據(jù)產(chǎn)品特點(diǎn)來(lái)做的掏父,像跟錢(qián)相關(guān)的一致性要求會(huì)非常的高(不能出錯(cuò)),積分?jǐn)?shù)量這種虛擬權(quán)益類(lèi)其次秆剪,簽到記錄等用戶就不太關(guān)心了损同。

營(yíng)銷(xiāo)場(chǎng)景下的一致性要求

營(yíng)銷(xiāo)場(chǎng)景的數(shù)據(jù)一致性要求其實(shí)是相對(duì)寬松的,只需要在較短的時(shí)間內(nèi)保證最終一致就可以了鸟款。
拿抽獎(jiǎng)活動(dòng)舉例膏燃,一次抽獎(jiǎng)行為的發(fā)生,涉及到次數(shù)減扣何什、庫(kù)存減扣组哩、抽獎(jiǎng)記錄更新、獎(jiǎng)品發(fā)放等一系列的操作处渣,很有可能會(huì)發(fā)生部分失敗伶贰,按照常理來(lái)說(shuō)像獎(jiǎng)品發(fā)放失敗這樣的情況,短時(shí)間未到賬用戶大概率也是無(wú)感知的罐栈,通常需要繞道卡券包等黍衙,所以這種情況我們只需要一定時(shí)間段內(nèi)給用戶補(bǔ)上即可,需要保證的主要是和成本密切相關(guān)的次數(shù)荠诬、庫(kù)存等琅翻。
當(dāng)然啦,一致性要求雖然沒(méi)有那么高柑贞,但是還是要盡可能照顧到的方椎,沒(méi)有數(shù)據(jù)一致性的保證,性能钧嘶、可能性再高的系統(tǒng)可能都是一堆垃圾棠众。

常見(jiàn)的一致性實(shí)現(xiàn)方案

先來(lái)看一下什么是數(shù)據(jù)一致性:數(shù)據(jù)的變更,與現(xiàn)實(shí)世界變更的預(yù)期結(jié)果保持一致有决。
后來(lái)在這個(gè)基礎(chǔ)上延伸出:

各種一致性

強(qiáng)一致性(也稱(chēng)線性一致性): 任何一次讀都能讀到某個(gè)數(shù)據(jù)的最近一次寫(xiě)的數(shù)據(jù)闸拿,系統(tǒng)中的所有進(jìn)程,看到的操作順序书幕,都和全局時(shí)鐘下的順序一致新荤。
弱一致性:用戶讀到某一操作對(duì)系統(tǒng)特定數(shù)據(jù)的更新需要一段時(shí)間,我們稱(chēng)這段時(shí)間為“不一致性窗口”按咒。
最終一致性:是弱一致性的一種特例迟隅,保證用戶最終能夠讀取到某操作對(duì)系統(tǒng)特定數(shù)據(jù)的更新但骨。
順序一致性:任何一次讀都能讀到某個(gè)數(shù)據(jù)的最近一次寫(xiě)的數(shù)據(jù),系統(tǒng)的所有進(jìn)程的順序一致智袭,而且是合理的奔缠。(相對(duì)于強(qiáng)一致性少了系統(tǒng)時(shí)鐘)
事務(wù)的誕生,很大程度上就是為了保證數(shù)據(jù)的一致性吼野。

基礎(chǔ)理論

cap:指的是在一個(gè)分布式系統(tǒng)中校哎,一致性(Consistency)、可用性(Availability)瞳步、分區(qū)容錯(cuò)性(Partition tolerance)只能滿足兩其中兩點(diǎn)闷哆。
base:BASE 是 Basically Available(基本可用)、Soft state(軟狀態(tài))和 Eventually consistent (最終一致性)三個(gè)短語(yǔ)的縮 寫(xiě)单起。BASE理論是對(duì)CAP中AP的一個(gè)擴(kuò)展抱怔,保證可用性和分區(qū)容錯(cuò)的情況下,允許存在軟狀態(tài)嘀倒,但會(huì)保證最終一致性屈留。

兩階段提交

這部分理論知識(shí)蠻陳舊的就不展開(kāi)說(shuō)了,大體能懂就好:二階段提交的算法思路可以概括為: 參與者將操作成敗通知協(xié)調(diào)者测蘑,再由協(xié)調(diào)者根據(jù)所有參與者的反饋情報(bào)決定各參與者是否要提交操作還是中止操作灌危。



兩階段的缺點(diǎn):
1、同步阻塞問(wèn)題碳胳。
2勇蝙、協(xié)調(diào)者的單點(diǎn)故障問(wèn)題。
3挨约、第二階段執(zhí)行中味混,協(xié)調(diào)者與參與者共同掛掉的場(chǎng)景導(dǎo)致不一致。

三階段提交

三階段提交協(xié)議在協(xié)調(diào)者和參與者中都引入超時(shí)機(jī)制烫罩,并且把兩階段提交協(xié)議的第一個(gè)階段分成了兩步惜傲,引入了中間狀態(tài): 詢問(wèn),然后再鎖資源贝攒,最后真正提交。
解決了“同步阻塞”时甚、”單點(diǎn)故障“等小缺點(diǎn)隘弊,及二階段無(wú)法解決的“協(xié)調(diào)者與參與者共同掛掉的場(chǎng)景導(dǎo)致不一致”這個(gè)很重要的問(wèn)題。



說(shuō)實(shí)話不管是兩階段或者三階段荒适,都無(wú)法徹底解決一致性問(wèn)題梨熙。

剛性&柔性事務(wù)

剛性事務(wù):具備我們熟知的的ACID的特性的事務(wù),通常的實(shí)現(xiàn)有WAL(white ahead log)(這是目前市面上幾乎所有數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方式)冯勉,還有一種是影子分頁(yè)膘掰。
柔性事務(wù):基于base理論實(shí)現(xiàn)的追求最終一致性的事務(wù)模型,通常實(shí)現(xiàn)方式包括TCC補(bǔ)償性事務(wù)应狱、異步確保型质欲、最大努力型树埠。
tcc分布式事務(wù)是一種二階段的變種,將操作分為嘗試嘶伟、提交怎憋、撤銷(xiāo),是一種實(shí)時(shí)鏈路上的的操作行為九昧。大致模型是這樣的:事務(wù)發(fā)起者發(fā)起一個(gè)事務(wù)绊袋,參與者進(jìn)行事務(wù)的提交操作,如果其中幾個(gè)參與者本地事務(wù)失敗铸鹰,會(huì)告知失敗癌别,其他已提交的參與者事務(wù)進(jìn)行補(bǔ)償操作進(jìn)行回滾。
異步確保型事務(wù)則為將同步阻塞的事務(wù)操作變?yōu)橐徊讲僮魈A苊鈱?duì)數(shù)據(jù)庫(kù)事務(wù)的爭(zhēng)用规个,對(duì)操作進(jìn)行匯總處理,通常對(duì)于熱點(diǎn)資源的操作采用這種方式姓建。
最大努力型事務(wù)诞仓,依賴(lài)于補(bǔ)單消息的補(bǔ)償機(jī)制或者重試機(jī)制,對(duì)事務(wù)進(jìn)行最大程度的推進(jìn)速兔,以此保證最終一致性墅拭。

營(yíng)銷(xiāo)場(chǎng)景下的數(shù)據(jù)一致性設(shè)計(jì)

首先看完上述的上面各種的一致性定義和分布式事務(wù)實(shí)現(xiàn)可以發(fā)現(xiàn),數(shù)據(jù)的一致性實(shí)現(xiàn)是比較困難的涣狗,也是業(yè)界一直在尋求最優(yōu)解的問(wèn)題之一谍婉,但就目前而言,實(shí)時(shí)鏈路上的各種分布式事務(wù)能保證一定程度上的數(shù)據(jù)一致性镀钓,而且通常來(lái)說(shuō)只是局部某個(gè)環(huán)節(jié)(不可能把所有事情都扔進(jìn)事務(wù)里面)穗熬,并且還會(huì)有一定的瑕疵。
對(duì)于整個(gè)業(yè)務(wù)邏輯推進(jìn)中數(shù)據(jù)一致性的根本保證丁溅,還是最原始的:“建立業(yè)務(wù)流轉(zhuǎn)的狀態(tài)機(jī)唤蔗,依賴(lài)于唯一單號(hào),異步對(duì)賬補(bǔ)單窟赏,達(dá)到最終一致性”
對(duì)于營(yíng)銷(xiāo)場(chǎng)景下妓柜,性能要求較高,但一致性要求沒(méi)有那么強(qiáng)涯穷。
建議的實(shí)現(xiàn)方式有兩種:
1棍掐、核心操作采用TCC事務(wù)模型實(shí)現(xiàn),保證核心鏈路上核心數(shù)據(jù)的一致性拷况,對(duì)于附屬操作可通過(guò)異步對(duì)賬補(bǔ)單保證最終的一致性作煌。
2掘殴、實(shí)時(shí)鏈路不做分布式事務(wù)處理,完全依賴(lài)于對(duì)賬補(bǔ)單實(shí)現(xiàn)粟誓。
每種方式都有自己的優(yōu)缺點(diǎn)奏寨,第一種方式所需的對(duì)賬補(bǔ)單量級(jí)較小,常見(jiàn)的掉單失敗等在實(shí)時(shí)主鏈路上就給干掉了努酸,對(duì)于數(shù)據(jù)不一致引發(fā)的問(wèn)題的影響時(shí)長(zhǎng)會(huì)減少服爷,但是引入了TCC事務(wù),增加了三方協(xié)調(diào)和更多的網(wǎng)絡(luò)IO获诈,數(shù)據(jù)操作邏輯的復(fù)雜度會(huì)直線上升仍源,性能會(huì)有一定程度的下降,可能會(huì)產(chǎn)生新的風(fēng)險(xiǎn)和問(wèn)題舔涎。
而第二種方案笼踩,主鏈路代碼精煉,性能會(huì)很好亡嫌,但對(duì)于數(shù)據(jù)不一致引發(fā)的問(wèn)題的影響時(shí)長(zhǎng)會(huì)較長(zhǎng)嚎于,并且對(duì)賬補(bǔ)單系統(tǒng)規(guī)模會(huì)變的龐大,要處理的任務(wù)也會(huì)變多挟冠。
既然各有優(yōu)缺點(diǎn)于购,我們就需要根據(jù)不同營(yíng)銷(xiāo)場(chǎng)景來(lái)選擇,像是營(yíng)銷(xiāo)組件完全是組件內(nèi)操作本地事務(wù)或者不需要事務(wù)即可解決知染,對(duì)于常規(guī)活動(dòng)依賴(lài)于活動(dòng)單元組件這些建議使用第一種方案肋僧,直接建立較為完備的措施,一勞永逸控淡。而像是性能要求非常高并且邏輯相對(duì)簡(jiǎn)單的臨時(shí)活動(dòng)嫌吠,第二種方案就足夠了,釋放出人力處理性能優(yōu)化掺炭。像是非常大型的營(yíng)銷(xiāo)活動(dòng)辫诅,就需要根據(jù)具體場(chǎng)景來(lái)衡量了,數(shù)據(jù)一致性可能產(chǎn)生的影響面涧狮,性能炕矮、可用性、一致性的折中勋篓。
這塊內(nèi)容沒(méi)有標(biāo)準(zhǔn)答案吧享,包括了解的各種業(yè)務(wù)場(chǎng)景都是這樣的,數(shù)據(jù)一致性通常需要根據(jù)場(chǎng)景定制化開(kāi)發(fā)譬嚣,并不存在通用解決方案。而我們需要做的就是積累一致性處理經(jīng)驗(yàn)和數(shù)據(jù)一致性保證的可選方案(除了TCC這些钞它,業(yè)界存在很多解決方案拜银,除了TCC這種還有事務(wù)型消息殊鞭、本地消息表等,但是都逃不出上面的那一堆概念的基礎(chǔ)理論知識(shí))尼桶。

我所接觸過(guò)的性能優(yōu)化


營(yíng)銷(xiāo)場(chǎng)景下性能要求通常是比較高的操灿,尤其是非常規(guī)的面對(duì)大促的營(yíng)銷(xiāo)活動(dòng),而且性能優(yōu)化中涉及到的技術(shù)相關(guān)的點(diǎn)會(huì)非常之多泵督,常用的軟件研發(fā)工具的選擇趾盐、高性能系統(tǒng)的架構(gòu)模型、語(yǔ)言的選擇小腊、底層的網(wǎng)絡(luò)原理救鲤、代碼編寫(xiě)上比如并發(fā)模型的優(yōu)化、語(yǔ)言底層的優(yōu)化等等秩冈。
除了優(yōu)化的具體行為本缠,我們還需要有科學(xué)的性能衡量標(biāo)準(zhǔn),高效的檢驗(yàn)?zāi)芰Α?br> 總結(jié)來(lái)說(shuō)性能優(yōu)化的策略:
在最開(kāi)始的時(shí)候先說(shuō)結(jié)論入问,給出一個(gè)性能優(yōu)化的順序:
1丹锹、確定合理的架構(gòu)方案(最大程度上決定了我們的系統(tǒng)能扛多少)
2、確定技術(shù)選型(包括語(yǔ)言芬失、工具楣黍,對(duì)內(nèi)存、epoll的高效利用幾乎是現(xiàn)在性能工具選型的根本)
3棱烂、代碼邏輯優(yōu)化(很多時(shí)候性能優(yōu)化就是砍IO租漂,少計(jì)算,上緩存垢啼,異步化窜锯,減少鎖,還有工具的正確使用)
4芭析、最后才是工具锚扎、語(yǔ)言的底層調(diào)優(yōu)(這一步很多時(shí)候根本不需要,但是咱們得知道)
***技術(shù)不是炫技馁启,最小成本把事做成就好驾孔。

什么是高性能

衡量性的性能的標(biāo)準(zhǔn)通常有很多,比如常見(jiàn)的平均響應(yīng)時(shí)間惯疙、最大并發(fā)數(shù)等翠勉,其實(shí)最核心的就是吞吐量,單位時(shí)間霉颠、單位資源內(nèi)对碌,系統(tǒng)所能支持的請(qǐng)求處理數(shù)或者事務(wù)處理數(shù)。優(yōu)化最大并發(fā)數(shù)蒿偎、縮短響應(yīng)時(shí)間最終目標(biāo)都是吞吐量朽们。
高性能mysql一書(shū)在第二怀读、三章一開(kāi)始的位置,就先說(shuō)的衡量標(biāo)準(zhǔn)和測(cè)試方式骑脱,這點(diǎn)是非常贊同的菜枷,因?yàn)橹挥忻鞔_了什么是高性能,才能進(jìn)行合理的設(shè)計(jì)系統(tǒng)叁丧,進(jìn)行調(diào)優(yōu)及壓測(cè)啤誊,非常推薦大家去看一下那兩章。

如何合理的壓測(cè)


除了評(píng)定標(biāo)準(zhǔn)拥娄,在優(yōu)化的具體行為之前最應(yīng)該熟悉的就是如何壓測(cè)蚊锹,如何高效的壓測(cè)。
對(duì)于壓測(cè)而言重要的有這么幾點(diǎn):
0条舔、重中之重枫耳,要有合理的壓測(cè)方案和周知下游、qa孟抗、op迁杨,也就是下面的說(shuō)的幾點(diǎn),切勿啥都不準(zhǔn)備上來(lái)就開(kāi)干凄硼。
1铅协、數(shù)據(jù)完全隔離
如果想切實(shí)的了解系統(tǒng)在生產(chǎn)環(huán)境的抗壓能力,那就必須要在生產(chǎn)環(huán)境進(jìn)行壓測(cè)摊沉,那么數(shù)據(jù)隔離是首要的狐史,不能影響線上不能因?yàn)閴簻y(cè)產(chǎn)生故障或者資損,隔離的方式很簡(jiǎn)單:用戶id區(qū)分
我們可以使用現(xiàn)在沒(méi)有在用及近一段時(shí)間也不會(huì)有的用戶賬號(hào)進(jìn)行壓測(cè)说墨,但是這樣需要面臨清理數(shù)據(jù)(一個(gè)相當(dāng)頭疼的活)
打壓測(cè)表示骏全,這需要我們?cè)谙到y(tǒng)設(shè)計(jì)時(shí)就需要做到的,每個(gè)系統(tǒng)都要天然的支持壓測(cè)尼斧。
第二種方式無(wú)疑是日常壓測(cè)中最合適的姜贡,也是系統(tǒng)設(shè)計(jì)時(shí)需要考慮的。
2棺棵、靈活高效的壓測(cè)系統(tǒng)楼咳,需要qps實(shí)時(shí)可控,要有紅線觸發(fā)機(jī)制烛恤,比如說(shuō)壓測(cè)前確定最大值母怜,壓測(cè)qps調(diào)節(jié)過(guò)程無(wú)論如何都不能超過(guò)預(yù)值。
對(duì)于流量控制缚柏,也就是qps的調(diào)控所依賴(lài)的算法其實(shí)很簡(jiǎn)單苹熏,就是限流算法的變相使用,常見(jiàn)的有計(jì)數(shù)器控制法、令牌通控制法柜裸、漏桶控制缕陕,并且基于滑動(dòng)窗口對(duì)于流量進(jìn)行整形粱锐,保證均勻疙挺,不出現(xiàn)過(guò)高的瞬發(fā)峰值,這部分內(nèi)容之前單獨(dú)寫(xiě)過(guò)怜浅,可以看一下Go系列文章中限流算法實(shí)戰(zhàn)铐然,還有高性能系統(tǒng)中的限流算法原理。
3恶座、壓測(cè)的核心關(guān)注點(diǎn)
壓測(cè)過(guò)程中需要有合理的指標(biāo):
關(guān)于你的服務(wù):cpu(cpu idel搀暑、user、cpu.load)跨琳、內(nèi)存(這個(gè)通常來(lái)說(shuō)問(wèn)題不大)自点,
剩下的你需要看下游系統(tǒng)的壓力,切勿把下游打掛脉让。
除此之外桂敛,壓測(cè)的目的是發(fā)現(xiàn)問(wèn)題解決問(wèn)題,而不是僅僅是測(cè)試系統(tǒng)能扛多少溅潜,所以一定要關(guān)注核心依賴(lài)术唬,比如說(shuō)mysql、redis等滚澜,發(fā)現(xiàn)各種問(wèn)題才能避免線上掛的慘粗仓,大多時(shí)候通常是代碼寫(xiě)的有問(wèn)題,但是在三方應(yīng)用上暴露出來(lái)设捐,比如說(shuō)hgetall借浊。但是有時(shí)候線上機(jī)器也是可能存在問(wèn)題的,需要壓測(cè)來(lái)檢驗(yàn)萝招。
4蚂斤、合理的壓測(cè)過(guò)程
壓測(cè)需要循序漸進(jìn)的來(lái),有問(wèn)題能及時(shí)發(fā)現(xiàn)即寒,并且一上來(lái)流量太大高估了自己的系統(tǒng)橡淆,可能瞬間打掛。
壓測(cè)的流量規(guī)律需要根據(jù)線上真實(shí)流量的變化趨勢(shì)母赵,或者預(yù)測(cè)趨勢(shì)來(lái)進(jìn)行壓測(cè)逸爵,不能想當(dāng)然。建議對(duì)線上流量進(jìn)行復(fù)制凹嘲,以供壓測(cè)使用师倔,這樣壓測(cè)的鏈路才是真實(shí)的。
5周蹭、完整的留存
壓測(cè)數(shù)據(jù)完整留存趋艘、壓測(cè)日志完整留存疲恢、火焰圖記錄完整留存。
這一塊兒是關(guān)鍵也是我們壓測(cè)的最終產(chǎn)出瓷胧,發(fā)現(xiàn)那些地方存在問(wèn)題或風(fēng)險(xiǎn)之后显拳,我們需要根據(jù)這些來(lái)具體分析,以此得出優(yōu)化結(jié)論搓萧。

高性能技術(shù)選型

曾經(jīng)見(jiàn)到這樣一句話杂数,大概是這樣的 don’t do it,cache it瘸洛,asyn it揍移,pipline it 其實(shí)性能優(yōu)化就是這樣,尤其是對(duì)于高性能業(yè)務(wù)系統(tǒng)的設(shè)計(jì)而言反肋。
1那伐、don’t do it
對(duì)于主鏈路而言,是否存在可以不做的的事情石蔗,如果有那就砍掉罕邀,額外的IO和計(jì)算只會(huì)導(dǎo)致性能的下降。
2抓督、cache it & asyn it
如果沒(méi)辦法不做是否可以直接緩存結(jié)果及異步處理燃少。但是如果使用緩存和異步處理,會(huì)面臨非常的大的數(shù)據(jù)一致性問(wèn)題铃在,尤其是緩存阵具。
3、pipline it
對(duì)于無(wú)法異步化和緩存的IO處理定铜,直接建議同一個(gè)鏈接pipline批量處理阳液。
通常來(lái)說(shuō),高性能系統(tǒng)其實(shí)就是基于上面的幾個(gè)思想揣炕,結(jié)合業(yè)務(wù)場(chǎng)景給出解決方案帘皿。

高性能工具的最大化利用

我們開(kāi)發(fā)時(shí)毫無(wú)疑問(wèn)會(huì)依賴(lài)于一些開(kāi)源的或者內(nèi)部的工具,比如說(shuō)redis畸陡、nginx鹰溜、mysql、kafka等丁恭,想要提升性能要做的第一件事兒就是結(jié)合業(yè)務(wù)場(chǎng)景對(duì)這些工具充分利用曹动,下面詳細(xì)來(lái)看。(由于篇幅過(guò)長(zhǎng)牲览,就僅僅只說(shuō)一下nginx和redis吧)

nginx + lua

對(duì)于營(yíng)銷(xiāo)系統(tǒng)而言墓陈,很多時(shí)候性能要求苛刻,但是邏輯相對(duì)簡(jiǎn)單,這種時(shí)候就完全可以采用nginx+lua構(gòu)建openresty應(yīng)用贡必,迅速解決問(wèn)題兔港。還有邏輯不太變的接入層,也非常適合這種方式仔拟。
nginx作為一個(gè)高性能的http和反向代理web服務(wù)器衫樊,不同于 Apache的一點(diǎn)就是,Nginx 采用單線程理逊,非阻塞橡伞,異步IO的工作模型。整體來(lái)說(shuō)就是對(duì)epoll的充分使用晋被,用它來(lái)作為第一層承接流量再合適不過(guò)。
這里要說(shuō)的不僅是nginnx刚盈,更多的是配合lua的使用模式羡洛,Lua是一種輕量級(jí)、可嵌入式的腳本語(yǔ)言藕漱,在nginx之上運(yùn)行l(wèi)ua腳本來(lái)實(shí)現(xiàn)相對(duì)簡(jiǎn)單的接入層邏輯或者部分業(yè)務(wù)邏輯欲侮。
市面上常見(jiàn)的方式是由章亦春將Lua和Nginx粘合的ngx_lua模塊,并且將Nginx核心肋联、LuaJIT威蕉、ngx_lua模塊、許多有用的Lua庫(kù)和常用的第三方Nginx模塊組合在一起成為OpenResty橄仍,使用Lua編寫(xiě)腳本韧涨,然后部署到Nginx Web容器中運(yùn)行。從而非常輕松就能開(kāi)發(fā)出高性能的Web服務(wù)侮繁。
其中ngx_lua是Nginx的一個(gè)模塊掰盘,將Lua嵌入到Nginx中半等,從而可以使用Lua來(lái)編寫(xiě)腳本,部署到Nginx中運(yùn)行,即Nginx變成了一個(gè)Web容器管跺。
常見(jiàn)的lua工具庫(kù)有:

lua-resty-memcached
lua-resty-mysql
lua-resty-redis
lua-resty-dns
lua-resty-limit-traffic
lua-resty-template

對(duì)于nginx+lua的使用方式通常有:
1、最基礎(chǔ)的負(fù)載均衡
2官脓、單機(jī)閉環(huán)仿贬,利用lua實(shí)現(xiàn)nginx-lua-static-merger,直接在接入層進(jìn)行本機(jī)靜態(tài)資源讀取完成靜態(tài)資源合并品抽。
3储笑、分布式閉環(huán),解決單機(jī)閉環(huán)中數(shù)據(jù)不一致問(wèn)題(分布式集中存儲(chǔ))桑包、存儲(chǔ)瓶頸(實(shí)現(xiàn)分片邏輯)
4南蓬、作為接入網(wǎng)關(guān)使用,比如說(shuō)過(guò)濾請(qǐng)求、防DDOS赘方、Nginx Proxy Cache完成緩存烧颖、更細(xì)粒度的限流、降級(jí)預(yù)案等
在極端的性能場(chǎng)景下窄陡,nginx+lua完全可以實(shí)現(xiàn)業(yè)務(wù)邏輯炕淮,插入數(shù)據(jù)到redis中后續(xù)異步處理,性能非常之高跳夭。
至于其中的原理可以看下涂圆,我之前的一篇文章《高并發(fā) Nginx + lua是如何抗住的》,其核心就是基于epoll實(shí)現(xiàn)的單線程處理多鏈接的思路币叹。

Redis + lua

上面說(shuō)的是nginx+lua润歉,這一篇幅要講的是redis+lua,但是需要注意的一點(diǎn)是颈抚,redis+lua的性能其實(shí)一般踩衩,這一點(diǎn)要格外謹(jǐn)慎,我們要利用的是其操作的原子性贩汉。
我們想要進(jìn)行高性能的數(shù)據(jù)操作時(shí)驱富,很多時(shí)候都會(huì)直接選用redis做存儲(chǔ)或者緩存,但是依賴(lài)于redis數(shù)據(jù)做操作但涉及具有競(jìng)態(tài)條件的復(fù)合操作時(shí)就會(huì)比較麻煩匹舞,大概率會(huì)涉及分布式鎖褐鸥,其實(shí)redis+lua就是一種變通的方式,將密集的redis操作更裝成lua腳本赐稽,這樣既解決了原子性問(wèn)題叫榕,又把這部分邏輯變的可插拔(據(jù)說(shuō)游戲領(lǐng)域經(jīng)常會(huì)存在這樣的動(dòng)態(tài)邏輯替換)
但是切記不要在lua中實(shí)現(xiàn)過(guò)多復(fù)雜的邏輯,尤其像是各種json處理又憨,會(huì)導(dǎo)致redis性能急劇下降翠霍。

redis+pipline

對(duì)于redis性能的充分利用,正確的打開(kāi)方式是redis+pipline蠢莺,一次性灌命令的方式實(shí)現(xiàn)redis若干邏輯處理寒匙,其他工具也是一樣的。
在redis+pipline編碼時(shí)需要注意躏将,pipeline 期間將“獨(dú)占”鏈接锄弱,此期間將不能進(jìn)行非“管道”類(lèi)型的其他操作,直到 pipeline 關(guān)閉祸憋;如果你的 pipeline的指令集通常比較龐大会宪,為了不干擾鏈接中的其他操作,可以為pipeline操作新建鏈接蚯窥,讓pipeline和其他正常操作分離掸鹅。還要注意pipeline所能容忍的操作個(gè)數(shù)塞帐,也就是socket-output緩沖區(qū)大小/返回結(jié)果的數(shù)據(jù)尺寸,這些是受限于server的物理內(nèi)存或網(wǎng)絡(luò)接口的緩沖能力巍沙。
這一塊說(shuō)白了就是網(wǎng)絡(luò)連接的高效利用葵姥,最基礎(chǔ)的手段是使用短鏈接一個(gè)請(qǐng)求一個(gè)鏈接干到底或者使用連接池+長(zhǎng)鏈接,而pipline就是在這基礎(chǔ)上句携,進(jìn)一步利用緩沖隊(duì)列榔幸,對(duì)命令進(jìn)行一次性傳輸和結(jié)果的一次性返回,kafka所謂的微批處理其實(shí)也是這種實(shí)現(xiàn)思路矮嫉。如果仔細(xì)看各種工具對(duì)于網(wǎng)絡(luò)IO的優(yōu)化思路削咆,幾乎都是這樣的策略--減少網(wǎng)絡(luò)IO的產(chǎn)生并且充分利用epoll,我們業(yè)務(wù)系統(tǒng)優(yōu)化的思路毫無(wú)疑問(wèn)也是這樣的蠢笋。

redis的集群方案

對(duì)于redis的充分利用還有很重要的一點(diǎn)是其集群方案拨齐,一般就是兩種類(lèi)codis方案、官方的cluster方案挺尿,這些都是從單點(diǎn)到主從再到主動(dòng)+哨兵一步步演變過(guò)來(lái)的奏黑,主要一步步解決了單點(diǎn)、可用性编矾、吞吐量等問(wèn)題。
簡(jiǎn)單的看一下這兩種方案的實(shí)現(xiàn)思路:
codis方案(中心化配置存儲(chǔ))


cluster方案(去中心化實(shí)現(xiàn)思路)

推薦這一篇博客馁害,說(shuō)的很清楚:https://www.cnblogs.com/pingyeaa/p/11294773.html
看完集群方案窄俏,其中一點(diǎn)非常明顯,為了提高系統(tǒng)的吞吐量碘菜,數(shù)據(jù)是分片存儲(chǔ)的凹蜈,而分片的核心就是hashtag,hashtag是一種在我們知道redis主庫(kù)選擇的hash規(guī)則后忍啸,支持自主定義所存儲(chǔ)的redis服務(wù)器的能力仰坦。
關(guān)于hashtag的使用有兩點(diǎn)需要注意:
1、保證分片的均勻
通常來(lái)說(shuō)后我們需要讓每個(gè)服務(wù)器承擔(dān)基本一致的流量壓力计雌,最合適的方式就是根據(jù)用戶id求余(針對(duì)分片數(shù)量求余)來(lái)做分片處理悄晃,這個(gè)結(jié)論是在假設(shè)用戶id是均勻的基礎(chǔ)上成立的,如果用戶id不均勻那就在id的基礎(chǔ)上加一層hash值再做處理凿滤。
2妈橄、使用lua時(shí)的坑
在使用lua時(shí),是根據(jù)第一個(gè)key值進(jìn)行分片選擇的翁脆,所以說(shuō)獨(dú)立原子操作時(shí)根據(jù)key值hash后選擇的分片眷蚓,使用lua操作會(huì)找不到,或者lua操作的key值獨(dú)立的原子操作會(huì)找不到反番,這一點(diǎn)一定要注意沙热。

分布式鎖實(shí)現(xiàn)

這一塊按理說(shuō)是一致性部分的內(nèi)容叉钥,但是因?yàn)槊芮泻托阅芟嚓P(guān),所以就在這里說(shuō)吧篙贸。
分布式鎖是用來(lái)保證分布式環(huán)境下數(shù)據(jù)操作的原子性的投队,和我們常用的鎖的使用方式一樣,加鎖+邏輯處理+解鎖(主動(dòng)解鎖歉秫、超時(shí)釋放)
常見(jiàn)的分布式鎖的實(shí)現(xiàn)方式有三種:
1蛾洛、基于redis的紅鎖實(shí)現(xiàn)及其簡(jiǎn)化版本
2、利用 Zookeeper 的順序臨時(shí)節(jié)點(diǎn)雁芙,來(lái)實(shí)現(xiàn)分布式鎖和等待隊(duì)列轧膘。
3、Google 公司實(shí)現(xiàn)的粗粒度分布式鎖服務(wù)兔甘,底層利用了 Paxos 一致性算法谎碍。
后面兩種實(shí)現(xiàn)方式通常適用于較粗的鎖粒度,并且具有等待隊(duì)列洞焙,看起來(lái)更像是一把鎖蟆淀,但不太適用于高性能場(chǎng)景。而對(duì)于營(yíng)銷(xiāo)這樣的場(chǎng)景來(lái)看澡匪,基于redis的分布式鎖更適合熔任。
分布式鎖通常會(huì)存在以下幾個(gè)問(wèn)題:
1、鎖超時(shí)后唁情,其他請(qǐng)求加鎖后的誤釋放問(wèn)題疑苔。通常可以利用唯一單號(hào)來(lái)鑒別加鎖者解決甸鸟。
2惦费、鎖的可用性問(wèn)題,這個(gè)問(wèn)題通常發(fā)生在單點(diǎn)的redis服務(wù)上抢韭,紅鎖已經(jīng)給了完整的解決方案(超過(guò)半數(shù)加鎖成功)薪贫,但是這種方式一定程度上損耗了性能。
需要注意的是分布式鎖的實(shí)現(xiàn)刻恭,像分布式事務(wù)一樣瞧省,不管哪種方式都存在一定的問(wèn)題,比如redis的紅鎖吠各,redis本人也是說(shuō)存在瑕疵的臀突,我們最需要的是根據(jù)場(chǎng)景來(lái)進(jìn)行鑒別選擇,解決痛點(diǎn)問(wèn)題贾漏,容忍帶來(lái)的其他問(wèn)題候学。

關(guān)于存儲(chǔ)

存儲(chǔ)的選擇

數(shù)據(jù)的存儲(chǔ)對(duì)所有的系統(tǒng)都是非常的重要,而且是重中之重纵散,在寫(xiě)這塊內(nèi)容的十分鐘之前恰巧看到了剛看了oceanbase的發(fā)展之路梳码,頗為震撼隐圾。
對(duì)于營(yíng)銷(xiāo)場(chǎng)景下的存儲(chǔ),很顯然沒(méi)有金融領(lǐng)域那么的苛刻掰茶,但是數(shù)據(jù)的可靠存儲(chǔ)依然十分重要暇藏,但是相對(duì)多了一些選擇。
對(duì)于常規(guī)場(chǎng)景而言濒蒋,使用基于磁盤(pán)的關(guān)系型數(shù)據(jù)庫(kù)mysql就足夠了盐碱,特性十分豐富,也經(jīng)過(guò)了大環(huán)境的檢驗(yàn)沪伙,但不要覺(jué)著所有的存儲(chǔ)只能拿mysql來(lái)做瓮顽。
在極端的性能場(chǎng)景下,我們可以稍微激進(jìn)點(diǎn)围橡,拿redis做存儲(chǔ)暖混,雖然有過(guò)redis掛掉瘋狂補(bǔ)數(shù)據(jù)的經(jīng)歷,但是依然覺(jué)著在某些場(chǎng)景下是可行的翁授,至少比mysql提升了近一個(gè)數(shù)量級(jí)拣播,如果想用redis做存儲(chǔ),首先必須要要有預(yù)案措施也就是redis掛了怎么辦收擦,其次要有數(shù)據(jù)的落盤(pán)行為必須保證可恢復(fù)贮配,這里比較好用的有日志留存用戶相關(guān)數(shù)據(jù)快照、異步落庫(kù)塞赂,在建立恢復(fù)機(jī)制后牧嫉,我們就可以依賴(lài)于redis快照數(shù)據(jù)+掛掉這部分時(shí)間的日志或者數(shù)據(jù)庫(kù)數(shù)據(jù)來(lái)推演出當(dāng)前redis中的數(shù)據(jù)了。切記需要根據(jù)具體的業(yè)務(wù)場(chǎng)景來(lái)定制化選擇减途,最痛的點(diǎn)及其他方面的容忍度,就算是激進(jìn)也得有個(gè)度曹洽。

數(shù)據(jù)拆分

在性能場(chǎng)景下鳍置,單mysql或者redis存儲(chǔ)完全滿足不了(查詢性能(cpu瓶頸)+IO瓶頸),這適合就要面對(duì)數(shù)據(jù)的拆分送淆,來(lái)應(yīng)對(duì)CPU+IO兩大問(wèn)題税产。
而數(shù)據(jù)拆分無(wú)外乎垂直拆分、水平拆分偷崩,對(duì)于redis字典型非關(guān)系數(shù)據(jù)庫(kù)而言辟拷,使用hashtag+散列的key值很顯然同時(shí)做到了。對(duì)于mysql而言其實(shí)就是分庫(kù)分表(水平+垂直)
但是在拆分過(guò)程中非常重要的幾點(diǎn):
1阐斜、分庫(kù)分表衫冻,需要了解瓶頸在哪,然后才能合理地拆分谒出,不能為了分庫(kù)分表而拆分隅俘。
2邻奠、選key很重要,既要考慮到拆分均勻为居,也要考慮到非partition key的查詢碌宴,可以利用上面提到的用戶id或者訂單id進(jìn)行拆分
另外,分褲分表會(huì)帶來(lái)大量的問(wèn)題蒙畴,為了問(wèn)題盡可能的少贰镣、系統(tǒng)易維護(hù)拆分規(guī)則越簡(jiǎn)單越好。
相關(guān)工具:
redis:codis膳凝、cluster等方式自帶hashtag功能碑隆。
mysql:sharding-sphere、或者自定義實(shí)現(xiàn)鸠项。

若干的語(yǔ)言


確定完架構(gòu)方案干跛、工具選擇,剩下的就是語(yǔ)言和相關(guān)的優(yōu)化了祟绊,在選擇語(yǔ)言時(shí)依然是上面提到的幾個(gè)標(biāo)準(zhǔn):人力成本楼入、研發(fā)質(zhì)量成本研發(fā)效率成本牧抽、機(jī)器成本嘉熊,具體來(lái)說(shuō):
1、從語(yǔ)言的特性出發(fā)扬舒,衡量各種成本的變化情況
2阐肤、從當(dāng)前人員構(gòu)成和公司內(nèi)基礎(chǔ)設(shè)施出發(fā),衡量各種成本的變化情況
兩者結(jié)合考慮讲坎,并根據(jù)當(dāng)前項(xiàng)目的緊急程度確定方案的選擇孕惜。如果是基礎(chǔ)設(shè)施的建設(shè),直接從第一點(diǎn)考慮就OK了晨炕。
然后下面仔細(xì)的說(shuō)一下各種語(yǔ)言及其擅長(zhǎng)的領(lǐng)域衫画,大家準(zhǔn)備好,可以開(kāi)噴了瓮栗,本章不涉及語(yǔ)言的開(kāi)發(fā)細(xì)節(jié)削罩,只說(shuō)特性和適用程度。

Java

這是我的第一門(mén)編程語(yǔ)言费奸,大概是大二的時(shí)候開(kāi)始接觸弥激,對(duì)于語(yǔ)言的熟悉發(fā)生在大三下學(xué)期和實(shí)習(xí)之后。
Java的優(yōu)勢(shì)很明顯愿阐,生態(tài)十分龐大微服,性能相對(duì)優(yōu)良,但極端性能場(chǎng)景下還是需要c系换况,研發(fā)效率處于中等位置职辨,研發(fā)質(zhì)量較高盗蟆,并且Java相關(guān)人才比較好招。由于它的生態(tài)Java看起來(lái)適合非常多的場(chǎng)景:Hadoop舒裤、spring等喳资,語(yǔ)言特性很多,工具庫(kù)異常豐富腾供。
對(duì)于營(yíng)銷(xiāo)系統(tǒng)而言仆邓,Java非常適合開(kāi)發(fā)重業(yè)務(wù)的系統(tǒng),比如活動(dòng)單元及活動(dòng)流程層伴鳖,在Java的基礎(chǔ)上我們能夠把業(yè)務(wù)邏輯盡可能的抽象节值,對(duì)于底層細(xì)節(jié)而言,像垃圾回收(適合各種場(chǎng)景的垃圾回收器:G1榜聂、cms搞疗、ZGC)網(wǎng)絡(luò)IO的處理(官方庫(kù)中基于水平觸發(fā)epoll的IO處理,netty中給予邊緣觸發(fā))等等一切都是非常完備的须肆,對(duì)于中規(guī)中矩的系統(tǒng)非常適合匿乃。

Go

這是我的第二門(mén)編程語(yǔ)言,19年幾乎一年都在寫(xiě)go豌汇,go是一門(mén)非常年輕的語(yǔ)言幢炸,看現(xiàn)在的發(fā)展也迅猛無(wú)比,
優(yōu)點(diǎn):(網(wǎng)上通常有各種各樣的介紹拒贱,對(duì)于營(yíng)銷(xiāo)而言主要是以下兩點(diǎn))
1宛徊、天然的并發(fā)性
2、相對(duì)較高的開(kāi)發(fā)效率
缺點(diǎn)也十分的明顯:
1逻澳、生態(tài)較差闸天,你用Java可輕松找到的工具,如果用go恐怕要自己實(shí)現(xiàn)了斜做。
2号枕、相對(duì)Java較為垃圾的垃圾回收,以至于性能沒(méi)有那么極致陨享。
3、if err != nil
對(duì)于營(yíng)銷(xiāo)場(chǎng)景而言:
go由于天然的并發(fā)性和對(duì)epoll的高效支持钝腺,對(duì)于網(wǎng)絡(luò)IO處理非常的擅長(zhǎng)抛姑,最經(jīng)典的應(yīng)用莫過(guò)于前東家開(kāi)源的bfe。落地到營(yíng)銷(xiāo)場(chǎng)景而言艳狐,go很適合做流量調(diào)度型基礎(chǔ)組件定硝。
其他的話,go適合做系統(tǒng)級(jí)應(yīng)用開(kāi)發(fā)毫目,docker蔬啡、k8s這些都是基于go來(lái)實(shí)現(xiàn)的诲侮,如果做基礎(chǔ)架構(gòu),go是一個(gè)非常不錯(cuò)的選擇箱蟆。

下面要說(shuō)的PHP和C++ 沒(méi)有真正的實(shí)戰(zhàn)過(guò)沟绪,沒(méi)有太多的發(fā)言權(quán),只是簡(jiǎn)單的說(shuō)幾句空猜,像python這種只寫(xiě)過(guò)兩個(gè)時(shí)間的绽慈,就不拿出來(lái)獻(xiàn)丑了。

PHP

世界上最好的語(yǔ)言的PHP辈毯,簡(jiǎn)直就是為web場(chǎng)景而生的坝疼,極致的開(kāi)發(fā)效率,對(duì)于最原始的營(yíng)銷(xiāo)場(chǎng)景更是如此谆沃。由于前東家的PHP做了很大程度上的優(yōu)化钝凶,所以已經(jīng)不僅僅是原生的PHP了,這點(diǎn)需要考慮進(jìn)去唁影,如果是原生的PHP性能場(chǎng)景可以排除掉了耕陷。

C++

c++比較適合極端的場(chǎng)景,比如說(shuō)需要內(nèi)存精確控制的場(chǎng)景像是搜索領(lǐng)域夭咬,對(duì)于營(yíng)銷(xiāo)場(chǎng)景而言啃炸,C++使用程度其實(shí)一般。如果存在老的C++營(yíng)銷(xiāo)系統(tǒng)卓舵,拿go或者Java來(lái)重構(gòu)掉是一個(gè)不錯(cuò)的選擇南用。

對(duì)于語(yǔ)言和工具方面,工作一年多的時(shí)間里也做了一些積累掏湾,大家可以參考一下之前的博客:《redis系列》《kafka系列》《go語(yǔ)言開(kāi)發(fā)系列》《Java concurrent 系列》《高性能系統(tǒng)構(gòu)建系列》裹虫,后面這些內(nèi)容也都會(huì)持續(xù)更新的~
http://www.reibang.com/u/636e09dd8775

單獨(dú)提一下epoll

在重IO的業(yè)務(wù)系統(tǒng)中,一個(gè)工具或者語(yǔ)言對(duì)于epoll的支持程度大概率決定了是否用它融击,它是IO中性能的基礎(chǔ)筑公。
Java對(duì)epoll的支持相對(duì)較好,原生網(wǎng)絡(luò)包中提供了基于水平觸發(fā)的epoll尊浪,netty補(bǔ)充實(shí)現(xiàn)了基于邊緣觸發(fā)的epoll(Dubbo就是基于它實(shí)現(xiàn)的)
Go匣屡,采用協(xié)程+epoll的方式進(jìn)行網(wǎng)絡(luò)編程,效率十分之高拇涤,這也是go適合做流量調(diào)度的根本原因
nginx最大的性能來(lái)源其實(shí)就是epoll捣作,同時(shí)支持邊緣觸發(fā)和水平觸發(fā)兩種模式,再加上精確的內(nèi)存操作所以性能炸裂。
redis的單線程處理多鏈接的模式底層也是基于epoll實(shí)現(xiàn)的,可以看一下redis ae庫(kù)中的實(shí)現(xiàn)艰毒。
如果想看一下互聯(lián)網(wǎng)時(shí)代網(wǎng)絡(luò)的發(fā)展史朝扼,可以從C10k問(wèn)題起再到

如何高效的進(jìn)行并發(fā)編程


并發(fā)編程是充分利用cpu高效處理的一種手段也拜,如果涉及并發(fā)有兩點(diǎn)是無(wú)法忽略的:1以舒、并發(fā)編程模型 2、鎖的處理慢哈。
并發(fā)編程模型
對(duì)于并發(fā)編程模型通常來(lái)說(shuō)是伴隨著語(yǔ)言的蔓钟,比如go實(shí)現(xiàn)的基于協(xié)程和管道的CSP模型,Java基于內(nèi)存共享的線程模型岸军,在我們選擇語(yǔ)言的時(shí)候就已經(jīng)確定了奋刽。這兩者有著非常大的區(qū)別:CSP 并發(fā)模型的核心概念是:“不要通過(guò)共享內(nèi)存來(lái)通信,而應(yīng)該通過(guò)通信來(lái)共享內(nèi)存”艰赞。兩種方式各有各的好處佣谐,根據(jù)場(chǎng)景選擇即可,這也是語(yǔ)言選擇的一個(gè)重要的點(diǎn)方妖。
我們需要根據(jù)具體場(chǎng)景來(lái)選擇狭魂,即使語(yǔ)言有限制,go使用內(nèi)存共享党觅,Java來(lái)實(shí)現(xiàn)基于管道通信也未嘗不可雌澄。
鎖的使用
這是這一篇章的核心內(nèi)容,對(duì)于鎖的使用杯瞻。對(duì)于優(yōu)化來(lái)說(shuō)通常有下面幾點(diǎn):
1镐牺、避免加鎖
一些能夠犧牲空間來(lái)進(jìn)行線程或者協(xié)程私有數(shù)據(jù)空間,就沒(méi)必要使用鎖了魁莉,加鎖完全是為了并發(fā)下邏輯的正確睬涧,如果有更好的解決方式,請(qǐng)避免使用鎖旗唁。
2畦浓、鎖選擇
拿Java舉例,就synchronized检疫、ReentrantLock來(lái)分析比較的話讶请,看到網(wǎng)上有好多博客都在說(shuō)sychronized 在爭(zhēng)用頻次非常高的情況下性能會(huì)急劇下降,這種觀點(diǎn)是存在時(shí)效性的屎媳,就當(dāng)前1.8版本使用體驗(yàn)而言夺溢,sychronized在大量爭(zhēng)用的情況性能其實(shí)還好并不會(huì)出現(xiàn)所謂的急劇下降,倒是在激烈爭(zhēng)用時(shí)sychronized的性能要好一些烛谊,這個(gè)問(wèn)題去官網(wǎng)確認(rèn)了下企垦,官方是建議使用sychronized的,這次的體驗(yàn)也是sychronized更好晒来。因?yàn)楫?dāng)前JVM是對(duì)于sychronized做出了優(yōu)化了,借鑒ReentrantLock的CAS加鎖方式郑现,并且引入了偏向鎖湃崩、輕量級(jí)鎖等特性后荧降,常規(guī)情況下兩者比較相似,實(shí)踐中得到的體驗(yàn)是sychronized性能更好一點(diǎn)攒读。
3朵诫、鎖粒度
如果非得需要鎖,粒度要盡可能的控制到小薄扁,避免不必要的加鎖剪返。因?yàn)橥綁K越長(zhǎng),線程持有鎖的時(shí)間就越長(zhǎng)邓梅,其他線程等待的時(shí)間就越長(zhǎng)脱盲,如果整個(gè)都是加鎖的,那么整個(gè)程序就變成串行處理了日缨。
但是要主要不要頻繁加解鎖钱反。
4、相關(guān)并發(fā)工具的選擇
最簡(jiǎn)單的方式其實(shí)就是盡可能使用原生經(jīng)過(guò)反復(fù)驗(yàn)證的官方工具(concurrenthashmap匣距、waitgroup等)面哥,不要嘗試使用自己編寫(xiě)工具,大概率出問(wèn)題毅待,但是為了學(xué)習(xí)尚卫,就很有必要了。

代碼優(yōu)化

代碼邏輯優(yōu)化

其他的代碼優(yōu)化語(yǔ)言層面感受到的有CPU使用減少尸红、IO減少吱涉、語(yǔ)言底層優(yōu)化三方面:
對(duì)于cpu來(lái)說(shuō):
1、md5驶乾、Json序列化反序列化等這些都是非常耗性能的邑飒,如非必要,建議砍掉级乐。
2疙咸、充分回憶起大學(xué)時(shí)的《數(shù)據(jù)結(jié)構(gòu)和算法》,例如可以用Hash O(1)打表解決的,請(qǐng)不要幾層for一通干风科。
3撒轮、謹(jǐn)慎使用明確存在性能風(fēng)險(xiǎn)的工具,比如go中的定時(shí)器贼穆,踩坑之深题山,至今難忘。
4故痊、不要覺(jué)著起協(xié)程或者線程效率高顶瞳,很多時(shí)候無(wú)端的起協(xié)程和線程得到的收益是很小的。
對(duì)于IO來(lái)說(shuō):
還是上面提到的那個(gè)思想,基于epoll的基礎(chǔ)上慨菱,砍IO焰络、pipline
最主要的是在IO操作評(píng)估時(shí),要根據(jù)具體的日志來(lái)量化分析統(tǒng)計(jì)符喝,而不是看代碼闪彼,拍腦門(mén)決定。

語(yǔ)言底層優(yōu)化&其他

對(duì)于語(yǔ)言底層的優(yōu)化协饲,在日常開(kāi)發(fā)中其實(shí)接觸的不會(huì)很多畏腕,很多的是出現(xiàn)在面試中,哈哈哈哈哈哈茉稠。實(shí)際操作過(guò)程中描馅,也偶爾會(huì)涉及到,主要是對(duì)于GC相關(guān)的內(nèi)存分配战惊。
對(duì)于GC而言流昏,垃圾回收器的選擇還有代碼精減(減少臨時(shí)對(duì)象等)要比瞎折騰調(diào)參數(shù)強(qiáng)的多,如果選擇了合適的垃圾回收器吞获,然后才是具體參數(shù)的調(diào)優(yōu)况凉,這一塊要充分利用語(yǔ)言的原生工具,比如說(shuō)jmap各拷、jstack刁绒、火焰圖工具等,確定問(wèn)題的根源烤黍,再動(dòng)手知市。
再其次,才是即時(shí)編譯等參數(shù)速蕊。

可怕的資損


營(yíng)銷(xiāo)場(chǎng)景下最大的問(wèn)題其實(shí)是資損嫂丙,營(yíng)銷(xiāo)場(chǎng)景下因?yàn)槠溥壿嫸嘧兦遗R時(shí),rd的開(kāi)發(fā)周期極短规哲,并且方案往往很難有時(shí)間反復(fù)推敲跟啤,不管是運(yùn)營(yíng)邏輯還是很代碼代碼實(shí)現(xiàn)都存在較大的風(fēng)險(xiǎn),是極易發(fā)生資損的唉锌。而面對(duì)這些問(wèn)題隅肥,也是建立一個(gè)較為完善的營(yíng)銷(xiāo)系統(tǒng)的目的所在。

經(jīng)典案例

1袄简、某東
京東無(wú)門(mén)檻優(yōu)惠券被大量羊毛黨領(lǐng)取腥放,在優(yōu)惠疊加后可以用極低價(jià)格(接近0元)購(gòu)買(mǎi)數(shù)百元的小家電,涉及資損金額數(shù)千萬(wàn)
2绿语、某多
騰訊視頻“0.2元開(kāi)通VIP”處理秃症、東航0.4折白菜機(jī)票bug候址。

如何可防可控

對(duì)于資損問(wèn)題,最重要的有幾個(gè)方案:
1:嚴(yán)控流程問(wèn)題
保證運(yùn)營(yíng)方案种柑、技術(shù)設(shè)計(jì)宗雇、代碼cr等主要環(huán)節(jié)發(fā)現(xiàn)問(wèn)題,并及時(shí)解決莹规。
2:完善資損監(jiān)控
這時(shí)候資損的發(fā)現(xiàn)環(huán)境,很多時(shí)候資損總是不經(jīng)意間發(fā)生泌神,我們最需要的是在資損發(fā)生的第一時(shí)間能夠發(fā)現(xiàn)良漱,而不是等幾小時(shí)、幾天后鑄成大錯(cuò)才意識(shí)到欢际。資損監(jiān)控需要針對(duì)活動(dòng)流程定制化開(kāi)發(fā)母市,資損監(jiān)控最好是在設(shè)計(jì)階段就要考慮進(jìn)來(lái)的,根據(jù)運(yùn)營(yíng)邏輯损趋、系統(tǒng)設(shè)計(jì)來(lái)確定資損點(diǎn)從而定制化開(kāi)發(fā)患久,這樣不光完善了資損監(jiān)控,更加后悔使rd同學(xué)方案設(shè)計(jì)及代碼開(kāi)發(fā)時(shí)更謹(jǐn)慎浑槽。一般來(lái)說(shuō)圍繞以下四點(diǎn)進(jìn)行監(jiān)控能發(fā)現(xiàn)絕大部分的資損問(wèn)題:
1蒋失、單個(gè)權(quán)益是否超標(biāo)
2、單個(gè)用戶領(lǐng)到的權(quán)益量是否超標(biāo)
3桐玻、是否存在不符合條件的用戶領(lǐng)取到對(duì)應(yīng)權(quán)益
4篙挽、是否存在異常峰值流量進(jìn)行刷單
3:監(jiān)控止損
對(duì)于止損問(wèn)題,是一個(gè)比較難處理的環(huán)節(jié)镊靴,通常需要在保證活動(dòng)正常運(yùn)行的情況下進(jìn)行止損铣卡,比較重大的問(wèn)題可以直接活動(dòng)下線(會(huì)存在監(jiān)管合規(guī)風(fēng)險(xiǎn))
在活動(dòng)設(shè)計(jì)時(shí)應(yīng)具有專(zhuān)門(mén)針對(duì)資損的預(yù)案處理,比如:
權(quán)益方面:
1偏竟、權(quán)益的回收機(jī)制(降低資損程度)
2煮落、權(quán)益迅速降級(jí)機(jī)制(原本發(fā)紅包,改為優(yōu)惠券)
活動(dòng)流程方案:
1踊谋、一鍵不中獎(jiǎng)
2蝉仇、活動(dòng)規(guī)則范圍內(nèi)增加門(mén)檻
3:接入專(zhuān)業(yè)風(fēng)控&反欺詐能力
這里主要是針對(duì)專(zhuān)業(yè)羊毛黨用戶的,防止作弊流量刷單褪子,杜絕黑名單用戶參與活動(dòng)量淌。

總結(jié)

整篇文章到這里就很急促的結(jié)束啦,想寫(xiě)的業(yè)務(wù)內(nèi)容還有技術(shù)內(nèi)容還有很多嫌褪,受限于篇幅和時(shí)間原因就先寫(xiě)這么多吧呀枢,文章寫(xiě)的越長(zhǎng),對(duì)它的整體控制能力稍微有點(diǎn)開(kāi)始下降了笼痛。
整體來(lái)看一個(gè)營(yíng)銷(xiāo)系統(tǒng)的核心就是:以技術(shù)能力解決營(yíng)銷(xiāo)場(chǎng)景下的效率裙秋、質(zhì)量琅拌、風(fēng)險(xiǎn)等問(wèn)題,高效穩(wěn)定的提供營(yíng)銷(xiāo)能力輸出摘刑。
系統(tǒng)實(shí)線時(shí)的關(guān)注點(diǎn):1进宝、性能 2、數(shù)據(jù)一致性 3枷恕、高度配置化能力 4党晋、完備的效果洞察&監(jiān)控能力 5、系統(tǒng)的可擴(kuò)展性



鄒志全記于北京徐块、杭州
2020.03.24 - 2020.05.23

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末未玻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胡控,更是在濱河造成了極大的恐慌扳剿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昼激,死亡現(xiàn)場(chǎng)離奇詭異庇绽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)橙困,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)瞧掺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人纷宇,你說(shuō)我怎么就攤上這事夸盟。” “怎么了像捶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵上陕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拓春,道長(zhǎng)释簿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任硼莽,我火速辦了婚禮庶溶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懂鸵。我一直安慰自己偏螺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布匆光。 她就那樣靜靜地躺著套像,像睡著了一般。 火紅的嫁衣襯著肌膚如雪终息。 梳的紋絲不亂的頭發(fā)上夺巩,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天贞让,我揣著相機(jī)與錄音,去河邊找鬼柳譬。 笑死喳张,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的美澳。 我是一名探鬼主播销部,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼制跟!你這毒婦竟也來(lái)了柴墩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凫岖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后逢净,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哥放,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年爹土,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甥雕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胀茵,死狀恐怖社露,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琼娘,我是刑警寧澤峭弟,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站脱拼,受9級(jí)特大地震影響瞒瘸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熄浓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一情臭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赌蔑,春花似錦俯在、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至石景,卻和暖如春劈猿,著一層夾襖步出監(jiān)牢的瞬間拙吉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工揪荣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筷黔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓仗颈,卻偏偏與公主長(zhǎng)得像佛舱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挨决,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353