來(lái)源:北大青鳥(niǎo)總部 2023年07月31日 10:50
內(nèi)卷化involution,在經(jīng)濟(jì)學(xué)中指的是邊際效用持續(xù)遞減,它是出自于「1963年美國(guó)人類學(xué)家克利福德·格爾茨在印度尼西亞做田野調(diào)查時(shí)發(fā)現(xiàn),在殖民地時(shí)代和后殖民地時(shí)代的爪哇島,人口沒(méi)有向資本和技術(shù)密集型產(chǎn)業(yè)集中,而是不斷地投入到有限的水稻生產(chǎn),導(dǎo)致農(nóng)業(yè)生產(chǎn)內(nèi)部精細(xì)化」。換成人話來(lái)說(shuō),以前你只要會(huì)Hadoop、MapReduce,你就可以很容易找到月薪1W的工作,而現(xiàn)在你可能都找不到工作了;以前一周你工作5*8小時(shí)就可以了,現(xiàn)在就要工作6*12小時(shí)。總的來(lái)的,就是個(gè)人的價(jià)值被拉低了,變得不值錢了。今天我們就來(lái)講講程序員如何避免內(nèi)卷化?
作為程序員,只聚焦業(yè)務(wù)邏輯開(kāi)發(fā)、CRUD是遠(yuǎn)遠(yuǎn)不夠的,架構(gòu)、性能優(yōu)化、新技術(shù)這些都是必須要掌握的,只有不斷努力的打磨技術(shù),緊跟技術(shù)發(fā)展趨勢(shì),以當(dāng)下最優(yōu)的方式解決業(yè)務(wù)訴求,保障高可用、高性能、高并發(fā),才能避免內(nèi)卷化,立于不敗之地。
在架構(gòu)知識(shí)學(xué)習(xí)中,我們需要了解架構(gòu)的變遷(從單體服務(wù)→SOA架構(gòu)→微服務(wù)架構(gòu)→無(wú)服務(wù)架構(gòu))、架構(gòu)模式的設(shè)計(jì)(分層架構(gòu)、客戶端服務(wù)器架構(gòu)、事件驅(qū)動(dòng)架構(gòu))。
單體架構(gòu)就是把web服務(wù)器&業(yè)務(wù)程序&數(shù)據(jù)庫(kù)&后臺(tái)服務(wù)器全都放在一起(典型的Linux+Apache+Mysql+PHP),剛?cè)腴T的開(kāi)發(fā)來(lái)說(shuō)可以快速搭建完整的應(yīng)用網(wǎng)站;SOA架構(gòu)就是將單體式服務(wù)進(jìn)行拆分,由不同的團(tuán)隊(duì)開(kāi)發(fā)不同的服務(wù),再通過(guò)ESB企業(yè)服務(wù)總線連接起來(lái),業(yè)務(wù)規(guī)模不復(fù)雜的企業(yè)一般采用此架構(gòu);微服務(wù)架構(gòu)就是把業(yè)務(wù)的每個(gè)服務(wù)模塊原子化,由不同的團(tuán)隊(duì)開(kāi)發(fā)維護(hù)上線不同的服務(wù),服務(wù)與服務(wù)之間通過(guò)MQ消息中間件或RPC遠(yuǎn)程調(diào)用連接起來(lái),業(yè)務(wù)規(guī)模中上的企業(yè)一般采用此架構(gòu);中臺(tái)架構(gòu)就是把多個(gè)業(yè)務(wù)模塊共用的能力抽象出來(lái),由專門的團(tuán)隊(duì)進(jìn)行開(kāi)發(fā)維護(hù),并對(duì)上層提供接口,快速生成應(yīng)用和迭代產(chǎn)品。
分層架構(gòu)設(shè)計(jì)模式主要是把整個(gè)架構(gòu)分為展現(xiàn)層、業(yè)務(wù)層、持久層,“高內(nèi)聚、低耦合”的設(shè)計(jì)思想讓每一層專注干自己的事情,展現(xiàn)層負(fù)責(zé)用戶界面數(shù)據(jù)展示、業(yè)務(wù)層負(fù)責(zé)處理業(yè)務(wù)邏輯、持久層負(fù)責(zé)數(shù)據(jù)持久化。在Java的設(shè)計(jì)開(kāi)發(fā)中經(jīng)常都采用這種模式(Service→Controller→DAO)。事件驅(qū)動(dòng)架構(gòu)主要思想是所有的業(yè)務(wù)動(dòng)作觸發(fā)都由事件進(jìn)行驅(qū)動(dòng)、處理,這種模式能實(shí)現(xiàn)簡(jiǎn)單小型系統(tǒng)到復(fù)雜大型系統(tǒng)的擴(kuò)展。在分布式系統(tǒng)中常見(jiàn)的架構(gòu)模式便是事件驅(qū)動(dòng),所有業(yè)務(wù)層發(fā)生的事項(xiàng)都通過(guò)消息中間件MQ傳遞,后臺(tái)監(jiān)聽(tīng)MQ消息隊(duì)列數(shù)據(jù),進(jìn)行業(yè)務(wù)處理。
在性能優(yōu)化中,我們需要了解接口設(shè)計(jì)、系統(tǒng)監(jiān)控。在接口設(shè)計(jì)層面通過(guò)算法調(diào)優(yōu)、技術(shù)架構(gòu)升級(jí)、技術(shù)組件升級(jí)可以實(shí)現(xiàn),此處我們不展開(kāi)討論,主要看看系統(tǒng)監(jiān)控模塊。監(jiān)控就像我們的眼睛,幫我們監(jiān)控著每筆業(yè)務(wù)操作、每次業(yè)務(wù)調(diào)用,通過(guò)選擇合適的監(jiān)控工具、設(shè)定對(duì)應(yīng)的監(jiān)控指標(biāo),能提前發(fā)現(xiàn)問(wèn)題、遇到問(wèn)題及時(shí)解決。一個(gè)應(yīng)用體系的全棧監(jiān)控包含APP監(jiān)控、瀏覽器監(jiān)控、服務(wù)器監(jiān)控、網(wǎng)絡(luò)監(jiān)控、日志監(jiān)控、基礎(chǔ)設(shè)施監(jiān)控、物理環(huán)境監(jiān)控。作為業(yè)務(wù)研發(fā),我們主要關(guān)注App監(jiān)控、瀏覽器監(jiān)控、服務(wù)端監(jiān)控就好,其余的交給運(yùn)維同學(xué)關(guān)注。
APP監(jiān)控是通過(guò)打包時(shí)將探針安裝在對(duì)應(yīng)的應(yīng)用包里,形成正式包對(duì)外發(fā)布。當(dāng)用戶手機(jī)下載了APP后,在使用APP的各個(gè)功能時(shí),整個(gè)的行為軌跡也被探針記錄下來(lái)了,采集的數(shù)據(jù)包含開(kāi)發(fā)的APP用戶日活、訪問(wèn)區(qū)域、訪問(wèn)版本等運(yùn)營(yíng)數(shù)據(jù);用戶打開(kāi)APP是否白屏、是否卡頓、是否緩慢、是否網(wǎng)絡(luò)被運(yùn)營(yíng)商劫持等運(yùn)維數(shù)據(jù),獲取到這些數(shù)據(jù)后可以幫助產(chǎn)品研發(fā)同學(xué)快速解決問(wèn)題,提高用戶留存率、性能優(yōu)化系統(tǒng)。
Browser瀏覽器監(jiān)控是把瀏覽器探針(一段js代碼)嵌入前端頁(yè)面,通過(guò)瀏覽器的onload事件、navigation事件等獲取頁(yè)面訪問(wèn)的數(shù)據(jù),比如瀏覽器基本信息、采集頁(yè)面性能數(shù)據(jù)、采集ajax性能數(shù)據(jù)和請(qǐng)求響應(yīng)數(shù)據(jù)、JS錯(cuò)誤數(shù)據(jù)、頁(yè)面追蹤數(shù)據(jù)等,再發(fā)送給到后臺(tái)處理加工,形成用戶運(yùn)營(yíng)數(shù)據(jù)(比如頁(yè)面PV、運(yùn)營(yíng)商信息、瀏覽器信息、訪問(wèn)城市省會(huì)信息)、運(yùn)維數(shù)據(jù)(比如ajax錯(cuò)誤信息、js緩慢頁(yè)面信息)獲取到這些數(shù)據(jù)后可以幫助產(chǎn)品研發(fā)同學(xué)快速解決問(wèn)題,提高用戶留存率、性能優(yōu)化系統(tǒng)。Server服務(wù)器監(jiān)控主要是在部署代碼的容器(比如tomcat、jvm、docker)中安裝探針,獲取服務(wù)調(diào)用鏈路、接口調(diào)用次數(shù)、函數(shù)執(zhí)行堆棧、SQL執(zhí)行情況、服務(wù)器CPU內(nèi)存磁盤(pán)網(wǎng)絡(luò)等,幫助后端研發(fā)進(jìn)行知道業(yè)務(wù)運(yùn)行情況、進(jìn)行系統(tǒng)性能優(yōu)化。
在新技術(shù)中,我們需要了解持續(xù)集成交付CICD、云原生、DevOps等。云原生應(yīng)用就是運(yùn)行在云平臺(tái)的應(yīng)用,具備要有云的特點(diǎn),比如彈性伸縮、分布式、快速部署、快速迭代、高效、持續(xù),云原生的四大核心要素是微服務(wù)、DevOps、持續(xù)交付、容器化,可以說(shuō)云原生已經(jīng)容納了CICD、DevOps的設(shè)計(jì)思想,因此我們就以云原生展開(kāi)進(jìn)行講解。要實(shí)現(xiàn)云原生,這可不止是簡(jiǎn)單的把原先在物理服務(wù)器上的應(yīng)用遷移到虛擬機(jī)里,除了基礎(chǔ)設(shè)施和運(yùn)行平臺(tái)在云上,應(yīng)用架構(gòu)、應(yīng)用開(kāi)發(fā)方式、應(yīng)用部署方式、應(yīng)用維護(hù)方式全都要做出改變。微服務(wù)技術(shù)使得應(yīng)用原子化,所有的應(yīng)用都可以獨(dú)立的部署、迭代;DevOps使得應(yīng)用可以快速編譯、自動(dòng)化測(cè)試、部署、發(fā)布、回滾,讓開(kāi)發(fā)和運(yùn)維一體化;持續(xù)交付讓?xiě)?yīng)用可以頻繁發(fā)布、快速交付、快速反饋、降低發(fā)布風(fēng)險(xiǎn);容器使得應(yīng)用整體開(kāi)發(fā)以容器為基礎(chǔ),形成代碼組件復(fù)用、資源隔離。
避免內(nèi)卷化的三大法寶(架構(gòu)、性能優(yōu)化、新技術(shù))我們便介紹完了。當(dāng)然隨著技術(shù)的不斷發(fā)展,還會(huì)有源源不斷的新技術(shù)新理念提出,我們不斷的關(guān)注、學(xué)習(xí)、打磨自己基本功就好。在互聯(lián)網(wǎng)圈內(nèi)還有一個(gè)潛規(guī)則便是程序員年齡不超過(guò)35歲,除了這批人上有老下有小、戰(zhàn)斗力不如年輕人之外,其次是正常的業(yè)務(wù)技能不夠過(guò)關(guān)。事實(shí)上,只要你穩(wěn)扎穩(wěn)打的夯實(shí)技術(shù),不斷的提升自己能力,年齡根本不是任何問(wèn)題,在疫情期間找工作,也完全沒(méi)有問(wèn)題。避免內(nèi)卷化的最核心因素,永遠(yuǎn)都不是外在環(huán)境,而是你自己。