「你說的云,是哪一種云?」擁有多年云端架構(gòu)師經(jīng)驗的北京全?萍悸(lián)合創(chuàng)始人蔡學(xué)鏞表示,目前大家對云的定義都不大一樣,企業(yè)要用要先厘清是哪一種云,再加上傳統(tǒng)的程式設(shè)計方法不適合云端平臺,他建議,程式設(shè)計師要結(jié)合架構(gòu)師,找出新的程式設(shè)計方法。
「你說的云,是哪一種云?」許多企業(yè)都認為將系統(tǒng)和資料上云端有很多好處,不但可以節(jié)省成本又可以彈性調(diào)用資源,那為什麼不搬上云端呢?曾在大陸擔(dān)任阿里巴巴支付寶、中國銀聯(lián)、創(chuàng)新工場、中國平安保險集團等公司的架構(gòu)師,擁有多年云端架構(gòu)師經(jīng)驗的北京全?萍悸(lián)合創(chuàng)始人蔡學(xué)鏞表示,企業(yè)設(shè)計軟體時,是否考慮到云端平臺的特性是相當(dāng)重要的課題,他也指出,目前大家對云端的定義都不大相同。
他認為,目前比較流行的是FaaS(Function as a Service)和BaaS(Backend as a Service),F(xiàn)aaS就是將程式拆成各自獨立的功能,各個程式之間互相沒有關(guān)聯(lián),BaaS則是用Open API來用開發(fā)服務(wù),像是用戶的身份認證,這兩種云端設(shè)計方式可以讓程式更加自動化,減少程式運作維護的工作量,也讓程式設(shè)計師可以不用考量系統(tǒng)流量瞬間爆量的問題。
而現(xiàn)今有許多企業(yè)會在PaaS層上設(shè)計服務(wù),但他提醒,若不是像用Spring Boot框架開發(fā),很容易還是將程式和資料庫綁在一起,若將兩者綁在一起,則不適合云端的平臺。
蔡學(xué)鏞將云端程式設(shè)計分成Who、What和How,設(shè)計程式時分為兩種工程師,一種是程式設(shè)計師,負責(zé)設(shè)計與業(yè)務(wù)領(lǐng)域相關(guān)的功能,設(shè)計的方式則可用領(lǐng)域?qū)虻姆绞剑―omain Driven Design, DDD)的方式,他表示,DDD的設(shè)計方式一直都不太流行,但是最近因為流行微服務(wù),而DDD又開始興起。
第二種工程師則是架構(gòu)師,他說明,這個詞大約2000年才誕生,與網(wǎng)路的興起密不可分,架構(gòu)師主要從事的不是功能的設(shè)計,而是以系統(tǒng)運作為導(dǎo)向的設(shè)計,包括系統(tǒng)的負載量、安全性等,他建議可用的設(shè)計方式是Patterns of Enterprise Application Architecture(PEAA)。
「我也開始在轉(zhuǎn)型!」蔡學(xué)鏞表示,由於云端平臺的興起,將許多架構(gòu)師的工作都可以方便快速地完成,且許多云端架構(gòu)的問題都有規(guī)則可循,架構(gòu)師的價值也越來越式微,他也在思考自己要如何轉(zhuǎn)型,他認為,程式設(shè)計師要結(jié)合架構(gòu)師的角色,找到新的程式設(shè)計方法。
由於現(xiàn)在系統(tǒng)需求快速且多變,蔡學(xué)鏞認為,過去傳統(tǒng)的程式設(shè)計方法已經(jīng)不管用,主要是因為傳統(tǒng)的物件導(dǎo)向程式設(shè)計的結(jié)構(gòu)有些問題,他指出,以前的程式設(shè)計都將業(yè)務(wù)和資料緊緊地綁在一起,但是綁在一起的作法并不適合云端平臺,物件導(dǎo)向的觀念在敏捷開發(fā)也完全不適合。
他點出傳統(tǒng)物件導(dǎo)向設(shè)計的眾多問題,舉例來說,蔡學(xué)鏞以前在保險公司擔(dān)任架構(gòu)師時,保險的規(guī)則非常繁雜,高達1,000萬條,也有許多幽靈規(guī)則,平時都沒有執(zhí)行,但是沒有人敢調(diào)整,深怕一調(diào)整系統(tǒng)會當(dāng)?shù)簟?/div>
另外,法規(guī)和業(yè)務(wù)調(diào)整的變動也會影響著前端的服務(wù)模組、API,以及後端調(diào)用資料庫和串連外部系統(tǒng)的設(shè)計,還有FaaS的設(shè)計強調(diào)沒有狀態(tài)(State),但是物件導(dǎo)向的物件都是有狀態(tài),他建議,企業(yè)若要使用云端,則要使用函數(shù)式的程式設(shè)計。
蔡學(xué)鏞歸納出五個函數(shù)式程式設(shè)計的原則,首先,設(shè)計業(yè)務(wù)功能的模組要分開,且分的越細越好,第二要采用非同步的調(diào)用方式,讓程式無需等待被調(diào)用函數(shù)的返回值,就讓程式繼續(xù)執(zhí)行,第三是他認為最關(guān)鍵的,就是只要資料最終一致化就好,不需要每筆資料都變成即時交易,第四則是盡量將功能都API化,甚至他建議可以先從外圍的Interface開始設(shè)計,最後物件必須是無狀態(tài),這樣系統(tǒng)面對較高的流量,就能同時開啟多個Instance。
除了上述的五大原則之外,蔡學(xué)鏞也認為,在設(shè)計云端架構(gòu)的系統(tǒng)時,必須對資料非常了解,有些是需要和業(yè)務(wù)人員一同合作來了解,像是資料的重要性、保密性、調(diào)用資料的費用和業(yè)務(wù)一致性,舉例來說,金錢和地址的資料遺失重要程度就不同,且也要依照不同的資料類型,將資料放在適合的資料庫,并用不同的方式存取。
有些資料的厘清,工程師則是可以透過技術(shù)或是統(tǒng)計的方式來理解,像是調(diào)用資料的頻率、資料筆數(shù)、資料老化現(xiàn)象等,他認為,只要是透過技術(shù)可以了解的,就能將規(guī)則用成通用的方式放在云端平臺,他舉例,由於火車時刻表屬於不容易變動的資料,就不需要頻繁地調(diào)用資料,避免浪費調(diào)用的成本。
最後,資料的互相調(diào)用也是重要的議題之一,他表示,調(diào)用資料時除了可以用密碼的方式確保安全性之外,其實還可以用Attribute-Based Access Control的方式,利用調(diào)用和被調(diào)用的資料都有各自專屬屬性的特性,來做精細的比對。
相關(guān)閱讀: