通常,我們做一個(gè)活動(dòng),我們需要做什么?我們需要UI設(shè)計(jì)、前端排版、接口定義、數(shù)據(jù)庫(kù)創(chuàng)建、測(cè)試流程等等。這樣下來(lái)整個(gè)流程快一點(diǎn)上一個(gè)活動(dòng)大概一周左右,慢一點(diǎn)可能兩周左右。但很多時(shí)候,一個(gè)活動(dòng)的生命周期可能就一周、一個(gè)月左右。我們是否有必要花如此大的開(kāi)發(fā)代價(jià)去做這樣事情?一個(gè)活動(dòng)如此,那十個(gè),一百個(gè)呢。
我們先來(lái)通過(guò)三個(gè)活動(dòng)來(lái)了解一下活動(dòng)的本質(zhì)3個(gè)活動(dòng)活動(dòng)1,為了拉新,針對(duì)老用戶(hù),每拉來(lái)一個(gè)人,獎(jiǎng)勵(lì)20元的額度提升。 活動(dòng)2,為了拉GMV,針對(duì)老用戶(hù),每還款xx元,獎(jiǎng)勵(lì)多少優(yōu)惠券。 活動(dòng)3,為了拉綁卡,針對(duì)全部用戶(hù),完成綁卡,就有機(jī)會(huì)搶100張1000元現(xiàn)金券。 … 我們可以發(fā)現(xiàn)活動(dòng)的四個(gè)要素:人群、目標(biāo)、門(mén)檻、激勵(lì) 我們可以用一句話概括運(yùn)營(yíng)活動(dòng):針對(duì)什么人群,我們想要達(dá)到什么目標(biāo),設(shè)置什么樣的門(mén)檻(規(guī)則),最后給用戶(hù)什么樣的激勵(lì)措施。活動(dòng)生命周期這么短,我們是否可以以比較小的開(kāi)發(fā)代價(jià)來(lái)完成活動(dòng)的開(kāi)發(fā)呢? 是否針對(duì)某個(gè)業(yè)務(wù)的一個(gè)活動(dòng)開(kāi)發(fā)完?我可以快速的復(fù)用到其他業(yè)務(wù)上呢?
在這些活動(dòng)的開(kāi)發(fā)中,我們遇到了挑戰(zhàn)和難題:可維護(hù)性差:活動(dòng)的生命周期短,活動(dòng)下線,接口、數(shù)據(jù)庫(kù)廢棄,但代碼遺留,代碼維護(hù)性差。開(kāi)發(fā)效率低:重復(fù)開(kāi)發(fā)、開(kāi)發(fā)效率低、無(wú)法復(fù)用。每個(gè)活動(dòng)新建接口、新建數(shù)據(jù)庫(kù)表可擴(kuò)展性不高:每個(gè)活動(dòng)只能運(yùn)用到自己的業(yè)務(wù)上,無(wú)法快速?gòu)?fù)用到其他業(yè)務(wù)。性能和監(jiān)控: 無(wú)可靠的數(shù)據(jù)監(jiān)控、性能低下。安全低:沒(méi)有做接口簽名、接口限流等等,容易被刷。運(yùn)營(yíng)要做什么?于是我花了一段時(shí)間來(lái)系統(tǒng)性的來(lái)梳理運(yùn)營(yíng)體系相關(guān)東西,通過(guò)已經(jīng)做了什么,來(lái)思考,我們將來(lái)怎么做?運(yùn)營(yíng)體系結(jié)構(gòu)接入業(yè)務(wù):具體的產(chǎn)品,我們才有運(yùn)營(yíng)他的基礎(chǔ)。運(yùn)營(yíng)活動(dòng):有了具體的業(yè)務(wù),通過(guò)運(yùn)營(yíng)活動(dòng)來(lái)運(yùn)營(yíng)業(yè)務(wù)。用戶(hù)觸達(dá):活動(dòng)出來(lái)后,我們需要告知用戶(hù)才行。數(shù)據(jù)分析:活動(dòng)效果如何,我們需要分析數(shù)據(jù),改進(jìn)我們的方案。監(jiān)控告警:系統(tǒng)本身不是100%可靠,我們需要一些儀表盤(pán)來(lái)監(jiān)控我們的系統(tǒng)。安全/防刷:運(yùn)營(yíng)是有激勵(lì)措施的,有利益,需要防止惡意侵入。基礎(chǔ)能力:通過(guò)抽象化、工具化提高開(kāi)發(fā)效率。組件化系統(tǒng):是否有個(gè)可視化的界面,以便于運(yùn)營(yíng)人員的快速接入呢。根據(jù)已做的活動(dòng)經(jīng)驗(yàn)和遇到的問(wèn)題,讓我不斷的思考,我該如何去優(yōu)化該運(yùn)營(yíng)系統(tǒng),來(lái)提高開(kāi)發(fā)效率、安全、和性能。最后,確定的一個(gè)大方向:平臺(tái)化、標(biāo)準(zhǔn)化、配置化、組件化。系統(tǒng)架構(gòu)設(shè)計(jì)系統(tǒng)的架構(gòu)設(shè)計(jì)從上往下看:前端層:做前后分離,動(dòng)靜分離、接入按鈕觸發(fā)統(tǒng)計(jì)系統(tǒng)、組件化模塊。網(wǎng)關(guān)層:接入?yún)f(xié)議適配、簽名校驗(yàn),接口監(jiān)控統(tǒng)計(jì)、限流等等。保障接口安全。邏輯層:分三個(gè)子層。第一層:接入統(tǒng)一配置中心,接口標(biāo)準(zhǔn)統(tǒng)一化、插件化、組件化常用模塊。消息處理引入觀察者,抽象公用模塊。第二層:根據(jù)運(yùn)營(yíng)四要素,抽象出規(guī)則集(綁卡?還款等等)、獎(jiǎng)勵(lì)集(優(yōu)惠券、實(shí)物?等等)構(gòu)成活動(dòng)主邏輯。第三層:抽象所有活動(dòng)儲(chǔ)存結(jié)構(gòu)(標(biāo)簽服務(wù))、配置、監(jiān)控、分布式鎖計(jì)數(shù)器以服務(wù)形式提供給上層調(diào)用?;A(chǔ)平臺(tái):一些依賴(lài)的基礎(chǔ)能力:比如用戶(hù)信息、訂單信息、平臺(tái)優(yōu)惠券系統(tǒng)、基礎(chǔ)推送能力等等。存儲(chǔ)層:所有活動(dòng)數(shù)據(jù)以統(tǒng)一結(jié)構(gòu)存儲(chǔ)。從左往右看:一個(gè)活動(dòng)可以快速?gòu)?fù)用到其他業(yè)務(wù)。將活動(dòng)通過(guò)廣告系統(tǒng)、消息推送系統(tǒng)等推送出去。通過(guò)數(shù)據(jù)分析系統(tǒng)做數(shù)據(jù)分析和優(yōu)化活動(dòng)流程。說(shuō)明幾個(gè)點(diǎn):1.活動(dòng)路由所有接口統(tǒng)一通過(guò)SaleService.handler接入根據(jù)活動(dòng)ID與方法找到對(duì)應(yīng)執(zhí)行方法。參考MVC的路由方式通過(guò)反射+代理模式實(shí)現(xiàn)活動(dòng)路由規(guī)則這樣做的一些好處:由于活動(dòng)的什么周期短,可以通過(guò)對(duì)配置的更改,調(diào)整接口的有無(wú)。維護(hù)方便。可以很方便的做一些公共校驗(yàn)或埋一些鉤子,(比如是否限制登錄、是否過(guò)期等)可以與配置系統(tǒng)深度整合。做一些接口監(jiān)控和攔截。2. mq消息(消息的解耦)觀察者模式對(duì)修改關(guān)閉,對(duì)擴(kuò)展開(kāi)放image.png3.統(tǒng)一配置中心可以參考之前寫(xiě)的 【180425】統(tǒng)一配置中心:
這里可以?xún)?yōu)化的點(diǎn)是,引入版本號(hào),先更新配置+新的版本號(hào)到redis,然后再更新每個(gè)配置的版本號(hào)id, 客戶(hù)端來(lái)取配置的時(shí)候,先取配置的版本,在根據(jù)版本號(hào)+配置key去redis中取配置內(nèi)容,這樣可以平滑的將緩存配置切換到新的緩存配置。4.關(guān)于組件化一個(gè)活動(dòng)通常可以看成若干個(gè)組件組成。魔方系統(tǒng)-組件化結(jié)構(gòu).jpg每一個(gè)組件又有他自己的特性。
前后端如何通過(guò)組件交互?魔方系統(tǒng)-交互圖.png最好能,在OA編輯就完美了OA可視化編輯最后,通過(guò)一些配置,可以快速的上線一些活動(dòng),無(wú)需開(kāi)發(fā)接入,做到自動(dòng)化運(yùn)營(yíng)。一些個(gè)人觀點(diǎn)程序的開(kāi)發(fā),應(yīng)該是一個(gè)搭積木的過(guò)程,一些小的模塊組合成一個(gè)中等模塊,若干中等模塊組合成一個(gè)系統(tǒng),若干系統(tǒng)組合成一個(gè)業(yè)務(wù)等等。一個(gè)大的問(wèn)題,可以分層分模塊成若干小問(wèn)題,解決若干小問(wèn)題,最后解決大問(wèn)題。了解業(yè)務(wù),才能做出更好的系統(tǒng)設(shè)計(jì)。性能、可用性、可擴(kuò)展性、可伸縮性、安全。