在互聯(lián)網(wǎng)業(yè)務(wù)運(yùn)營過程中,通常主體業(yè)務(wù)流程都是由程序自動(dòng)執(zhí)行完成的。但一些運(yùn)營輔助的工作,尤其是執(zhí)行頻度低馏颂、需要跨平臺操作示血、規(guī)則復(fù)雜的業(yè)務(wù)運(yùn)營任務(wù)(如:天貓商品的上下架,營銷活動(dòng)) 實(shí)際上占據(jù)了運(yùn)營同學(xué)大量的時(shí)間救拉。當(dāng)這類需求用程序來實(shí)現(xiàn)自動(dòng)化操作而又缺乏通盤規(guī)劃時(shí)难审,就會演變成平臺的一場噩夢。
復(fù)雜的規(guī)則很可能與平臺已有的主體業(yè)務(wù)邏輯存在局部沖突亿絮。代碼中不得不增加個(gè)性化的判斷告喊,才能針對特定的場景執(zhí)行特定邏輯。個(gè)性化的邏輯無疑增加了代碼的復(fù)雜度派昧,再經(jīng)過幾個(gè)月黔姜,如果當(dāng)時(shí)開發(fā)同學(xué)離職了(這在互聯(lián)網(wǎng)公司也是常事),可能已經(jīng)沒人知道有這樣一段“個(gè)性化”代碼存在蒂萎。就此平臺上多了一個(gè)飄忽不定秆吵,不知何時(shí)有可能被觸發(fā)的業(yè)務(wù)“幽靈”。
跨平臺操作(這里指合作方的平臺五慈,通常是為人工操作設(shè)計(jì)的)纳寂,可能僅僅是自動(dòng)登錄就搞死開發(fā)同學(xué)了,更不用說里面經(jīng)常變化的操作過程泻拦。搞不好毙芜,費(fèi)洪荒之力開發(fā)的自動(dòng)登錄還會因?yàn)榈卿浄绞秸{(diào)整而不再可用。
低頻任務(wù)争拐,降低了問題被及時(shí)發(fā)現(xiàn)的可能性腋粥。等到運(yùn)營同學(xué)想再用的時(shí)候才發(fā)現(xiàn)怎么都用不起來。只好找運(yùn)維架曹、開發(fā)查日志灯抛,查源代碼一通折騰。這時(shí)音瓷,為了應(yīng)急通常是用人工替代自動(dòng)化操作对嚼。原本自動(dòng)化的操作很可能因?yàn)樾迯?fù)成本過高而就此回退到人工操作的蠻荒時(shí)代。
這類運(yùn)營任務(wù)因其頻度低绳慎、變化快的特征使得自動(dòng)化成為了一柄雙刃劍纵竖。在提高運(yùn)營的效率的同時(shí)增加了平臺邏輯的復(fù)雜度漠烧,把控不好就是一場災(zāi)難。
自動(dòng)化是降低人力成本靡砌,提高運(yùn)營效率的必然路徑已脓。如何能夠即實(shí)現(xiàn)運(yùn)營的自動(dòng)化又不對主業(yè)務(wù)邏輯造成太大影響,同時(shí)還能滿足業(yè)務(wù)邏輯變化頻繁的業(yè)務(wù)目標(biāo)通殃?
為了實(shí)現(xiàn)這個(gè)目標(biāo)度液,我們嘗試了借鑒自動(dòng)化運(yùn)維的思路:基于應(yīng)用平臺開放的數(shù)據(jù)或能力(API),用腳本的方式實(shí)現(xiàn)業(yè)務(wù)邏輯画舌。
先不說平臺的能力開放堕担,這對架構(gòu)設(shè)計(jì)的要求很高。一般業(yè)務(wù)平臺曲聂,尤其是新業(yè)務(wù)的平臺霹购,在還沒有驗(yàn)證業(yè)務(wù)市場空間的情況下是不會更多考慮能力開放的。畢竟生存是第一要?jiǎng)?wù)朋腋。因此先從數(shù)據(jù)開放入手齐疙,這個(gè)實(shí)現(xiàn)簡單,只要有數(shù)據(jù)庫的只讀權(quán)限就可以旭咽。而且贞奋,關(guān)鍵的業(yè)務(wù)用戶、業(yè)務(wù)數(shù)據(jù)穷绵、配置數(shù)據(jù)都可以獲得忆矛。
實(shí)現(xiàn)自動(dòng)化的任務(wù)也要有所篩選,能夠在不直接寫平臺數(shù)據(jù)的情況下也能夠完成的任務(wù)是自動(dòng)化的首選请垛。根據(jù)任務(wù)目標(biāo)特點(diǎn)選用腳本化的編程語言來實(shí)現(xiàn)業(yè)務(wù)邏輯催训。我們的目標(biāo)是要自動(dòng)化完成跨平臺操作,Python成為不二之選宗收。
Python容易理解漫拭,運(yùn)營同學(xué)經(jīng)過學(xué)習(xí)后就可以對業(yè)務(wù)邏輯做一些微調(diào)整,這有利于快速優(yōu)化自動(dòng)化邏輯混稽。
經(jīng)過一段時(shí)間的嘗試采驻,總結(jié)下用腳本代碼實(shí)現(xiàn)自動(dòng)化運(yùn)營的優(yōu)點(diǎn):
1. 不用寫交互UI,省去了不少時(shí)間匈勋,相當(dāng)于開發(fā)提速了礼旅;
2. 不用糾結(jié)于哪些參數(shù)做到配置界面上,全部在源代碼上搞定洽洁。不怕參數(shù)多痘系,用段時(shí)間就知道哪些是需要在業(yè)務(wù)中經(jīng)常調(diào)整的關(guān)鍵參數(shù)了,為產(chǎn)品化提供了依據(jù)饿自;
3. 業(yè)務(wù)邏輯在代碼層面可見汰翠,運(yùn)營同學(xué)一般能看懂個(gè)七七八八龄坪,和開發(fā)同學(xué)就實(shí)現(xiàn)邏輯的溝通效率提高了;
4. 開發(fā)中把屏顯日志做到清晰明了复唤,運(yùn)營同學(xué)看到翻滾的日志健田,有什么問題一目了然;
5. 任務(wù)的執(zhí)行頻度低佛纫,可以放在筆記本上執(zhí)行妓局。順帶規(guī)避了一些網(wǎng)站對IP地址訪問的限制,WiFi連上手機(jī)網(wǎng)絡(luò)呈宇,毫無后顧之憂好爬;
6. 技術(shù)實(shí)現(xiàn)困難的環(huán)節(jié)(比如:登錄),加入手工參與攒盈,避免了“英雄難過美人關(guān)”導(dǎo)致的延期抵拘。
腳本自動(dòng)化運(yùn)營中的問題也是有的
1. 代碼的版本管理不善可能會導(dǎo)致用錯(cuò)了腳本哎榴,會產(chǎn)生什么后果相信大家也能想到了型豁。
2. 對運(yùn)營同學(xué)的要求提高了,能讀懂部分代碼尚蝌,又要能了解些數(shù)據(jù)結(jié)構(gòu)迎变。這運(yùn)營同學(xué)的身價(jià)得見漲啊。
這種自動(dòng)化實(shí)現(xiàn)方式非常靈活飘言,執(zhí)行腳本獨(dú)立衣形,不影響主體業(yè)務(wù)邏輯。
目前的嘗試還僅僅是在數(shù)據(jù)開放的基礎(chǔ)上姿鸿,適合不完善的新平臺以及一些架構(gòu)臃腫無法動(dòng)彈的老平臺谆吴。
試想,如果平臺具備API開放能力苛预,自動(dòng)化運(yùn)營完全可以通過調(diào)用能力API句狼,來實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。自動(dòng)化運(yùn)營的施展空間將更加廣闊热某。