應(yīng)用

技術(shù)

物聯(lián)網(wǎng)世界 >> 物聯(lián)網(wǎng)新聞 >> 物聯(lián)網(wǎng)熱點(diǎn)新聞
企業(yè)注冊(cè)個(gè)人注冊(cè)登錄

簡(jiǎn)潔之美——構(gòu)建數(shù)字世界的統(tǒng)一方程式

2022-08-29 10:06 CSDN 程序人生

導(dǎo)讀:要理解、感受并學(xué)習(xí)技術(shù)之美,我們應(yīng)該從哪里開(kāi)始呢?我給出的答案是 “簡(jiǎn)潔之美”。

image.png

問(wèn)及什么是“美”,每個(gè)人都會(huì)有屬于自己的答案。大自然的美就宛如天上的彩虹與浩瀚的星空,人們對(duì)于自然規(guī)律的認(rèn)識(shí)最早就源于對(duì)大自然的觀測(cè),基本的規(guī)律體現(xiàn)出的就是自然的美;而那些傳世畫(huà)作以及無(wú)數(shù)優(yōu)美的樂(lè)章則是由人類所創(chuàng)造出的美。

科學(xué)可以很美,技術(shù)的發(fā)展源自科學(xué),也同樣具有美感。搜索一下亞馬遜的計(jì)算機(jī)類圖書(shū),我們會(huì)發(fā)現(xiàn)各類以xx之美命名的書(shū)籍,從開(kāi)發(fā)人員關(guān)注的“編程之美”到“測(cè)試之美”以及“算法之美”,架構(gòu)師推崇的“系統(tǒng)之美”、“集群之美”……

談?wù)摰郊夹g(shù)之美,似乎每個(gè)工程師都有自己的見(jiàn)解,每個(gè)人都能從自己的視角發(fā)掘技術(shù)的美感。楊振寧老先生說(shuō):“科學(xué)?終極的美是客觀的,沒(méi)有?類的時(shí)候就已經(jīng)有這些美了”。盡管技術(shù)中會(huì)表現(xiàn)出與科學(xué)、藝術(shù)相似的美感,可是在技術(shù)之美中,人表現(xiàn)出的創(chuàng)造力才是技術(shù)之美的本源。軟件是由人設(shè)計(jì)出來(lái)的,構(gòu)成軟件的每一行代碼都直接或間接的由工程師創(chuàng)造,人們工作、生活中使用的各類軟件都運(yùn)行在由人類工程師搭建的基礎(chǔ)設(shè)施之上。沒(méi)有?類就沒(méi)有軟件技術(shù),也就沒(méi)有技術(shù)中的美。

開(kāi)發(fā)者都需要親自感受和體驗(yàn)技術(shù)之美

理解并感受技術(shù)之美是工程師成長(zhǎng)歷程中不可或缺的一部分。被譽(yù)為技術(shù)之美的軟件設(shè)計(jì)與代碼實(shí)現(xiàn)通常來(lái)源于前輩們工作中的最佳實(shí)踐;被推崇為技術(shù)之美的項(xiàng)目管理方法與團(tuán)隊(duì)協(xié)作模式則是凝聚了無(wú)數(shù)天才的智慧與經(jīng)驗(yàn)。技術(shù)之美充斥在技術(shù)開(kāi)發(fā)與研發(fā)創(chuàng)新的每一個(gè)角落,和藝術(shù)家一樣,每一個(gè)優(yōu)秀軟件工程師都會(huì)用自己的方式從不同的維度去書(shū)寫(xiě)技術(shù)之美。

要理解、感受并學(xué)習(xí)技術(shù)之美,我們應(yīng)該從哪里開(kāi)始呢?我給出的答案是 “簡(jiǎn)潔之美”。

伴隨著各行業(yè)數(shù)字化程度的不斷加深,互聯(lián)網(wǎng)以及各類軟件平臺(tái)承載的業(yè)務(wù)也必然會(huì)越來(lái)越復(fù)雜,當(dāng)復(fù)雜到達(dá)一定程度,軟件產(chǎn)品的開(kāi)發(fā)迭代難度將指數(shù)級(jí)增加,甚至到無(wú)法完成交付。在軟件設(shè)計(jì)與項(xiàng)目管理中運(yùn)用“簡(jiǎn)潔之美”則是對(duì)抗復(fù)雜最有效的辦法。

image.png

軟件的“能力增長(zhǎng)”與技術(shù)的“簡(jiǎn)潔之美”相互成就

作為一名擁有長(zhǎng)達(dá) 24 年碼齡的 IT 工程師,一名擁有多個(gè)用戶超千萬(wàn)的平臺(tái)架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)的架構(gòu)師,幾乎經(jīng)歷了中國(guó)互聯(lián)網(wǎng)與軟件行業(yè)發(fā)展的所有重大節(jié)點(diǎn)與多次技術(shù)革命,就由我來(lái)帶大家看一看軟件開(kāi)發(fā)行業(yè)是怎樣從刀耕火種的蠻荒時(shí)代一步步走到現(xiàn)在的云原生時(shí)代。

最初的美好

早期的程序設(shè)計(jì)其實(shí)并不復(fù)雜,編寫(xiě)代碼是只屬于少數(shù)人的游戲,還記得自己通過(guò)編碼賺取的第一筆收入是幫人寫(xiě)一個(gè)用于數(shù)據(jù)處理的 Pascal 腳本,而報(bào)酬則是客戶公司按代碼的行數(shù)來(lái)支付換取程序的版權(quán)。整個(gè)程序開(kāi)發(fā)一個(gè)人就能完成,只需要能精確的描述問(wèn)題,創(chuàng)造合適的數(shù)據(jù)結(jié)構(gòu),編寫(xiě)對(duì)應(yīng)的算法,問(wèn)題很快就能得到解決。

毫無(wú)疑問(wèn),這樣的工作方式和程序代碼都是極其簡(jiǎn)潔的,也是程序員最初喜愛(ài)的編程方式,每一行代碼你都知道他是如何執(zhí)行的,每一個(gè)函數(shù)你都清楚他做了哪些事情;哪怕只有一個(gè)函數(shù),也可以是一個(gè)完整的程序;每次修改完程序,代碼立刻就可以編譯運(yùn)行得到結(jié)果,即便有 bug 也能立刻發(fā)現(xiàn)并解決。

這樣的程序腳本曾經(jīng)很流行,這是每個(gè)程序員都渴望的工作狀態(tài),這就是簡(jiǎn)潔,是無(wú)數(shù)工程師一直追求的狀態(tài)。

軟件因何變得復(fù)雜

隨著軟件需求越發(fā)復(fù)雜,軟件項(xiàng)目的編碼量,開(kāi)發(fā)周期,迭代次數(shù)都在不斷的增長(zhǎng),成熟的軟件產(chǎn)品很難再由個(gè)人獨(dú)自開(kāi)發(fā)完成。

代碼量的不斷增長(zhǎng),意味著每一次更新代碼后都需要更長(zhǎng)的時(shí)間去編譯和構(gòu)建項(xiàng)目,等待編譯的過(guò)程從一個(gè)哈欠到一根煙、一杯茶、甚至一整天。

多個(gè)人協(xié)作怎么分工?各自編寫(xiě)的代碼如何整合?或許你很難想象,但手工管理代碼的時(shí)代確實(shí)存在過(guò),每個(gè)程序員分一個(gè)模塊,各自編寫(xiě)代碼,最后通過(guò)名叫“QQ”或者“飛鴿傳書(shū)”的軟件發(fā)送給項(xiàng)目的 leader,再由 leader 去把多個(gè)人的代碼放到一個(gè)文件夾下,手動(dòng)去一個(gè)一個(gè) include 其他人開(kāi)發(fā)的模塊,其中還可能遇到各種代碼沖突,調(diào)用失敗,編譯錯(cuò)誤……搞定一切后,還需要再對(duì)項(xiàng)目進(jìn)行打包存檔,然后標(biāo)注好存檔的日期和時(shí)間。如此繁瑣的工作,大量的精力浪費(fèi)在了寫(xiě)代碼以外的事情上。

因?yàn)榛ヂ?lián)網(wǎng)軟件與互聯(lián)網(wǎng)服務(wù)的普及,我們開(kāi)發(fā)的軟件再也不是只運(yùn)行在本地計(jì)算機(jī)里,我們需要配置好遠(yuǎn)程環(huán)境,需要把代碼上傳到遠(yuǎn)程服務(wù)器,在代碼上傳后,還需要去處理本地 Windows 與遠(yuǎn)程 Linux 之間的差異,環(huán)境變量、數(shù)據(jù)庫(kù)配置……。每次發(fā)布一個(gè)新的版本,開(kāi)發(fā)團(tuán)隊(duì)通常都會(huì)選擇深夜,每一次版本上線都是一次戰(zhàn)役。

遇到上規(guī)模的項(xiàng)目,多條業(yè)務(wù)線并行是常態(tài),通過(guò) SOAP、RPC 等協(xié)議構(gòu)建面向服務(wù)的分布式應(yīng)用(SOA 架構(gòu))是實(shí)現(xiàn)服務(wù)重用的常見(jiàn)辦法,但隨著項(xiàng)目運(yùn)營(yíng)的不斷迭代,服務(wù)線的增加,服務(wù)間相互依賴、耦合的加深,必然會(huì)讓服務(wù)間相互調(diào)用變得極其復(fù)雜,如果將服務(wù)間的關(guān)系圖像化,你將看到一堆打結(jié)的繩子擰巴在一起,把你綁住讓你寸步難行,呼吸困難。

這一切的一切都使得軟件開(kāi)發(fā)的過(guò)程變得復(fù)雜,工程師每天大量的時(shí)間花在管理代碼,編譯軟件,更改配置等一系列繁瑣的工作之上,我們很清楚我們想要的只是回到最初的美好。

在軟件和軟件開(kāi)發(fā)本身變得麻煩的時(shí)候,不斷有天才般的工程師站出來(lái)解決問(wèn)題,因?yàn)楣こ處焸兌伎釔?ài)簡(jiǎn)潔,希望精力能專注于代碼編寫(xiě)之上:

工程師希望代碼修改后能立即執(zhí)行,不需要漫長(zhǎng)的等待,因此構(gòu)建工具被開(kāi)發(fā)出來(lái);

工程師希望多人協(xié)作也能足夠的自由,并且不再為版本合并和分支管理發(fā)愁,因此發(fā)明的版本管理工具與代碼倉(cāng)庫(kù);

工程師希望本地開(kāi)發(fā)和遠(yuǎn)程生產(chǎn)環(huán)境能保持一致,希望在本地開(kāi)發(fā)應(yīng)用原生為云設(shè)計(jì),希望應(yīng)用在云端以最佳狀態(tài)運(yùn)行,因此容器技術(shù)、云原生以及DevOps被創(chuàng)造出來(lái);

工程師希望剝離業(yè)務(wù)將服務(wù)中的能力抽象出來(lái),并且將能力變成服務(wù)和組件獨(dú)立維護(hù)和迭代,這樣就能實(shí)現(xiàn)更小顆粒度的代碼復(fù)用與更高級(jí)別的抽象,因此微服務(wù)設(shè)計(jì)迅速崛起,Serverless架構(gòu)也為更多項(xiàng)目提供了更好的選擇。

這些技術(shù)的誕生源于工程師對(duì)簡(jiǎn)潔的執(zhí)戀,而這些技術(shù)的普及和發(fā)展就要?dú)w功于開(kāi)源社區(qū)以及眾多技術(shù)廠商的交流與協(xié)作。

說(shuō)到這里,不得不提當(dāng)下引領(lǐng)技術(shù)發(fā)展方向的重要力量之一:亞馬遜云科技(Amazon Web Services),作為云計(jì)算行業(yè)的先驅(qū),早在20年初就開(kāi)始布局云計(jì)算業(yè)務(wù)的亞馬遜云科技,他們從無(wú)數(shù)的客戶現(xiàn)場(chǎng)獲得反饋,他們很清楚開(kāi)發(fā)者遇到的難題。

盡管讓復(fù)雜的開(kāi)發(fā)過(guò)程變得簡(jiǎn)潔的各個(gè)工具都已經(jīng)被發(fā)明出來(lái),但想要通盤(pán)使用依然有較高的門(mén)檻。

通過(guò)開(kāi)源的Gitlab,開(kāi)發(fā)者能獲得一個(gè)屬于自己的代碼托管平臺(tái),但Gitlab需要至少一臺(tái)主機(jī),而且內(nèi)存不少于8G,哪怕只有一個(gè)項(xiàng)目要托管,哪怕項(xiàng)目只編寫(xiě)了一個(gè)函數(shù),托管主機(jī)的費(fèi)用都省不了,除此之外,還需要開(kāi)發(fā)者安裝配置好ruby環(huán)境,安裝好數(shù)據(jù)庫(kù),下載好軟件源碼……,哦,別忘了,Gitlab有更新時(shí),開(kāi)發(fā)者還需要考慮是否要同步去更新自己的Gitlab。

就像你們看到的,事情又又又變得復(fù)雜了?。?!

除了版本倉(cāng)庫(kù),其他工具也一樣,比如容器的鏡像倉(cāng)庫(kù),CI/CD 等一系列工具,完整的搭建起開(kāi)發(fā)平臺(tái)并規(guī)范團(tuán)隊(duì)的工作流程已經(jīng)成為一件極具挑戰(zhàn)的任務(wù)。

技術(shù)廠商給予的支持

如果開(kāi)發(fā)者只需要托管代碼,那么 Amazon CodeCommit,直接給你一個(gè)安全、高度可擴(kuò)展的托管型源代碼控制服務(wù);

將應(yīng)用容器化,你可以直接將鏡像推到 Amazon ECR,擁有一個(gè) docker hub如此簡(jiǎn)單;

搭建 K8s 集群,從來(lái)都不是一個(gè)輕松的事情,無(wú)論物理主機(jī)還是云主機(jī),作為日后軟件服務(wù)運(yùn)行的基礎(chǔ),我們不得不全勤投入,Amazon EKS,讓我們可以輕松的獲得 k8s 集群,Amazon EKS Anywhere 讓我們可以通過(guò)默認(rèn)組件配置幫助簡(jiǎn)化本地 Kubernetes 集群的創(chuàng)建和運(yùn)維,實(shí)現(xiàn)隨時(shí)隨地 K8s 集群管理自動(dòng)化。Amazon App2Container 能把你多年前部署的傳統(tǒng)應(yīng)用直接打包為容器鏡像,應(yīng)用的部署與集群的管理再次被簡(jiǎn)化。

廠商給予的支持僅此而已嗎?當(dāng)然不是,如果說(shuō)有些復(fù)雜很難被徹底根除,那么就把這些復(fù)雜留給廠商,把簡(jiǎn)潔重新還給開(kāi)發(fā)者。

上面提到的各類應(yīng)用已經(jīng)能解決很多團(tuán)隊(duì)當(dāng)前面臨的眾多棘手問(wèn)題,但廠商做到的比我們預(yù)想的更多。

DevOps工具鏈,現(xiàn)代化應(yīng)用開(kāi)發(fā)“簡(jiǎn)潔之美”的最佳體驗(yàn)

Amazon CodePipeline,可以實(shí)現(xiàn)快速而可靠的應(yīng)用程序和基礎(chǔ)設(shè)施更新,只要代碼發(fā)生變化,CodePipeline 便會(huì)構(gòu)建、測(cè)試和部署代碼;

Amazon CodeBuild 是完全托管的生成服務(wù),可編譯源代碼、運(yùn)行測(cè)試以及生成可供部署的軟件包。反復(fù)配置、管理和擴(kuò)展生成服務(wù)器將成為歷史;

Amazon CodeDeploy 可將代碼自動(dòng)部署至任何實(shí)例,快速發(fā)布新功能,從此告別凌晨三點(diǎn)的版本發(fā)布日?;顒?dòng)。

Amazon CodeStar 提供一個(gè)統(tǒng)一的用戶界面,您可以在此界面輕松管理您的軟件開(kāi)發(fā)活動(dòng),面對(duì)復(fù)雜的項(xiàng)目集群,項(xiàng)目運(yùn)行與開(kāi)發(fā)情況了然于胸。

作為獨(dú)立的服務(wù),上面提到的這些產(chǎn)品已經(jīng)十分出色,但這還不夠,因?yàn)樵陂_(kāi)發(fā)過(guò)程中管理和使用一堆產(chǎn)品本身就會(huì)增加項(xiàng)目的復(fù)雜度。既然我們將發(fā)布作為我們的目標(biāo),那么按設(shè)定的動(dòng)作自動(dòng)的逐個(gè)使用這一系列軟件完成項(xiàng)目的發(fā)布將是一件輕松愉快的事情,而這一系列的軟件就構(gòu)成了 DevOps 工具鏈。

image.png

下載自視覺(jué)中國(guó)

擁抱簡(jiǎn)潔,我們應(yīng)該行動(dòng)起來(lái)

類似亞馬遜云科技這樣的企業(yè),他們服務(wù)了無(wú)數(shù)的技術(shù)團(tuán)隊(duì),無(wú)數(shù)的技術(shù)團(tuán)隊(duì)又反饋給他們最真實(shí)貼切的需求,當(dāng)這些需求演變成相應(yīng)的技術(shù)產(chǎn)品和服務(wù)以后,引領(lǐng)了技術(shù)的發(fā)展再次回饋開(kāi)發(fā)者。

文章中所提到的技術(shù)創(chuàng)新和產(chǎn)品只是眾多大廠產(chǎn)品和服務(wù)中的很小一部分,從大廠的產(chǎn)品和服務(wù)中,我們能看到當(dāng)前技術(shù)的最前沿成果和發(fā)展趨勢(shì),獲得行業(yè)沉淀下來(lái)的成果,汲取最佳實(shí)踐,如果此刻你還沒(méi)有嘗試過(guò)我所說(shuō)的這些產(chǎn)品和服務(wù),還沒(méi)有體驗(yàn)過(guò)現(xiàn)代化的應(yīng)用開(kāi)發(fā),沒(méi)能真正感受過(guò)簡(jiǎn)潔之美,那么你應(yīng)該立刻行動(dòng)起來(lái),親身投入到應(yīng)用現(xiàn)代化的大潮之中。

報(bào)名開(kāi)啟 | 自由構(gòu)建 探索無(wú)限

亞馬遜云科技2022 Dev Day 重磅來(lái)襲,不容錯(cuò)過(guò)!

image.png

多位大咖現(xiàn)身說(shuō)法

如何用充滿“技術(shù)美感”的方式

幫助開(kāi)發(fā)者

實(shí)現(xiàn)更簡(jiǎn)單、自由、高效的開(kāi)發(fā)

此外,還有大量專家觀點(diǎn)碰撞

技術(shù)展、創(chuàng)新賽、動(dòng)手實(shí)操等環(huán)節(jié)

精彩不斷,干貨滿滿

攜手大家一起“自由構(gòu)建,探索無(wú)限”