在业务系统中寻求技术含量
從進(jìn)入互聯(lián)網(wǎng)公司開始工作起,每個(gè)人都在問自己,CRUD 到底有什么技術(shù)含量?
別覺得 CRUD 只是業(yè)務(wù)工程師的問題,無論你在寫什么程序,基本上都是在和數(shù)據(jù)打交道,除了讀就是寫。只不過讀寫的時(shí)候還會(huì)附帶一些領(lǐng)域相關(guān)的行為。比如(大俠們饒命,我就隨便寫寫):
編譯器:讀文本,做 parse
網(wǎng)絡(luò)程序:讀連接,decode,encode,寫連接
數(shù)據(jù)庫:從磁盤上讀,從內(nèi)存里讀,向磁盤里寫,向內(nèi)存里寫
工程上,誰也沒有權(quán)力鄙視誰,你覺得領(lǐng)域的技術(shù)含量高,只不過是領(lǐng)域內(nèi)的工作做的人少罷了。不管門檻多么高的工程領(lǐng)域,只要工程師紅利們蜂擁而至,總有一款內(nèi)卷適合你。
自動(dòng)化
我們可能會(huì)以相同的工作在公司內(nèi)做了無數(shù)遍為由,痛斥公司無情,領(lǐng)導(dǎo) sb,但是我們可以換一個(gè)角度。重復(fù)的工作,我們不可以把它自動(dòng)化嗎?
當(dāng)然可以。比如我們需要關(guān)注某個(gè)渠道的新聞,每次都要輸入網(wǎng)址/點(diǎn)擊收藏夾,等待加載。像日常作業(yè)一樣去完成這些工作。我們可以做一個(gè)定時(shí)的爬蟲,把新聞爬到我們自己的服務(wù)器上,通過一個(gè)簡單的 RSS 服務(wù)和訂閱就可以把這個(gè)流程自動(dòng)化了。
公司要支持疫情期間的項(xiàng)目,每天上傳一些志愿者的白名單,需要把這些白名單導(dǎo)入在線數(shù)據(jù)庫。我們肯定不希望每次都去寫惡心的 awk 腳本來做這件事情,只要給運(yùn)營人員一個(gè)上傳的接口,并在后臺(tái)自動(dòng) parse,導(dǎo)入就可以了。
線上的系統(tǒng)爆炸了,我們要找出引起爆炸的爆炸源,并且電話通知負(fù)責(zé)人起床修 bug。這么顯式的流程,只要做好系統(tǒng)員工關(guān)聯(lián)以及自動(dòng)外呼就可以了。
相同的工作,或許每次只需要 5 分鐘就可以完成,但只要重復(fù)過三次,那你就應(yīng)該想辦法把它自動(dòng)化,讓生活更美好。
有了自動(dòng)化的思想,你才是一個(gè)軟件工程師,而不是一個(gè)命令執(zhí)行機(jī)器。
配置化
軟件系統(tǒng)本質(zhì)上是真實(shí)世界的適配,這種適配在軟件的迭代早期是通過代碼來體現(xiàn)的。
最粗暴的是 if else,switch,可是我們希望復(fù)用啊,甚至還希望能不改代碼重啟就能實(shí)現(xiàn)功能切換。
常見的復(fù)雜軟件都有外掛的配置,復(fù)雜的業(yè)務(wù)系統(tǒng)也大多有配置。可能是項(xiàng)目啟動(dòng)時(shí)需要讀取的 config file,也可能是在遠(yuǎn)程配置系統(tǒng)/db 里存儲(chǔ)的配置。
配置化是讓軟件能夠在不改代碼的前提下實(shí)現(xiàn)功能修改的方式,軟件根據(jù)配置的變化情況改變自身的行為模式。
像 nginx 這樣的軟件,我們可以用配置讓它做一個(gè) L4 的反向代理,也可以作為一個(gè) L7 的 http 服務(wù)器。業(yè)務(wù)軟件的配置化,體現(xiàn)在對(duì)業(yè)務(wù)變化模式的預(yù)判上。
如果業(yè)務(wù)流程變化多,配置內(nèi)容就是工作流配置。
如果計(jì)算邏輯變化多,配置內(nèi)容就是各種表達(dá)式配置。
如果上游系統(tǒng)變化多,配置內(nèi)容就是 ACL 的映射配置。
配置內(nèi)容在系統(tǒng)內(nèi)部使用時(shí),文本形式的配置已經(jīng)能夠滿足大部分需求了。
如果嫌 nginx 那樣的配置格式麻煩,用 json 可以表達(dá)任意形式的數(shù)據(jù)結(jié)構(gòu)、邏輯流程、映射方式。這里你可以有些疑惑,我們可以認(rèn)為:
代碼和 AST 之間是可以互相轉(zhuǎn)換的
AST 可以被 Marshal 為 json
所以 json 從原理上可以表達(dá)一切程序邏輯
如果一套系統(tǒng)的配置需求主要來自于外部,那么基于文本的配置是不合適的。我們時(shí)常可以看到一些開源軟件的配置冗長晦澀(k8s:正是在下)。這些配置由人來編寫是極其反人類的。
何況配置本身還存在上下文關(guān)聯(lián),如果軟件文檔寫的不夠詳細(xì),為了正確地配置系統(tǒng),我們甚至還得先去讀軟件的實(shí)現(xiàn)代碼,使用成本極高。
UI 化
上下文有關(guān)聯(lián)的配置,在文本中非常難配置,而在 UI 中則非常容易。我們可以將合法配置的前提知識(shí)都編寫到 UI 的關(guān)聯(lián)彈出邏輯中,或者校驗(yàn)邏輯中。這樣用戶便可以通過簡單的交互,迅速知曉軟件配置的游戲規(guī)則。
如果還是希望用文本來配置,還可以使用所見即所得的方式來縮短配置編輯到生效的反饋時(shí)間,來幫助用戶迅速發(fā)現(xiàn)配置中的錯(cuò)誤,及時(shí)修正,像 swagger editor 那樣:
將軟件配置由文本配置變?yōu)榻缑媾渲?#xff0c;在某些公司被稱為配置“白屏化”。
平臺(tái)化
只要用 UI 化的思路做系統(tǒng),遲早會(huì)形成一堆散落的接入系統(tǒng)。平臺(tái)化是對(duì)這些系統(tǒng)進(jìn)行整合的一個(gè)機(jī)會(huì),以某個(gè)具體的主題,把所有相關(guān)的流程聚合在一起。
例如 paas 平臺(tái),流式計(jì)算平臺(tái),業(yè)務(wù)工作流編排平臺(tái),文檔平臺(tái)。
在互聯(lián)網(wǎng)公司,知識(shí)只有沉淀成為平臺(tái)才能成為公共知識(shí),否則只不過是老員工腦子里的糨糊罷了。
中臺(tái)化
當(dāng)平臺(tái)不只服務(wù)于當(dāng)前的業(yè)務(wù),有更為泛化的基礎(chǔ)能力時(shí),便可以在公司內(nèi)進(jìn)行輸出。例如一套整合了大數(shù)據(jù)基礎(chǔ)設(shè)施和業(yè)務(wù)接入完整流程的數(shù)據(jù)平臺(tái),不見得只在外賣場(chǎng)景可用,也可以用于網(wǎng)約車,可以用于酒旅。
有些公司把跨業(yè)務(wù)領(lǐng)域的能力稱為商業(yè)能力,例如電商的售前,訂單流程,售后,都可以沉淀為跨業(yè)務(wù)的通用功能。
中臺(tái)建設(shè)的最終產(chǎn)出物是 ?結(jié)合了業(yè)務(wù) SDK,多租戶隔離能力,自動(dòng)化擴(kuò)容能力,相應(yīng)業(yè)務(wù)邏輯展現(xiàn)為 UI 能力的多套完整的大平臺(tái)。對(duì)架構(gòu)師的抽象能力,工程師的技術(shù)能力,基礎(chǔ)設(shè)施的運(yùn)維能力都是有巨大考驗(yàn)的。
從業(yè)務(wù)收益上看,這些帶界面的中臺(tái)可以大大降低工程師與 PM,PD,PXX 交流的門檻,非顛覆性的業(yè)務(wù),甚至不需要工程師參與就可以由業(yè)務(wù)人員羅列出所有修改點(diǎn)自己修改完畢了。
被優(yōu)化
業(yè)務(wù)技術(shù)系統(tǒng)主要支持業(yè)務(wù),如果公司的商業(yè)模式不再發(fā)生大的變化,對(duì)于支持系統(tǒng)來說,系統(tǒng)做的好的特點(diǎn)是開發(fā)人員們存在感極低,只要領(lǐng)域?qū)<以谄脚_(tái)上稍微點(diǎn)點(diǎn)鼠標(biāo)就可以完成接入申請(qǐng),找?guī)讉€(gè)新手從平臺(tái)上抄一兩行示例代碼就可以完成升級(jí)工作。
這時(shí)候你就應(yīng)該被公司優(yōu)化了。
總結(jié)
以上是生活随笔為你收集整理的在业务系统中寻求技术含量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何从零开始写一个 web 框架?
- 下一篇: 推荐几位朋友