圖片來源: 

何維涓_攝影

「你說的雲,是哪一種雲?」許多企業都認為將系統和資料上雲端有很多好處,不但可以節省成本又可以彈性調用資源,那為什麼不搬上雲端呢?曾在大陸擔任阿里巴巴支付寶、中國銀聯、創新工場、中國平安保險集團等公司的架構師,擁有多年雲端架構師經驗的北京全棧科技聯合創始人蔡學鏞表示,企業設計軟體時,是否考慮到雲端平臺的特性是相當重要的課題,他也指出,目前大家對雲端的定義都不大相同。

他認為,目前比較流行的是FaaS(Function as a Service)和BaaS(Backend as a Service),FaaS就是將程式拆成各自獨立的功能,各個程式之間互相沒有關聯,BaaS則是用Open API來用開發服務,像是用戶的身份認證,這兩種雲端設計方式可以讓程式更加自動化,減少程式運作維護的工作量,也讓程式設計師可以不用考量系統流量瞬間爆量的問題。

而現今有許多企業會在PaaS層上設計服務,但他提醒,若不是像用Spring Boot框架開發,很容易還是將程式和資料庫綁在一起,若將兩者綁在一起,則不適合雲端的平臺。

蔡學鏞將雲端程式設計分成Who、What和How,設計程式時分為兩種工程師,一種是程式設計師,負責設計與業務領域相關的功能,設計的方式則可用領域導向的方式(Domain Driven Design, DDD)的方式,他表示,DDD的設計方式一直都不太流行,但是最近因為流行微服務,而DDD又開始興起。

第二種工程師則是架構師,他說明,這個詞大約2000年才誕生,與網路的興起密不可分,架構師主要從事的不是功能的設計,而是以系統運作為導向的設計,包括系統的負載量、安全性等,他建議可用的設計方式是Patterns of Enterprise Application Architecture(PEAA)。

「我也開始在轉型!」蔡學鏞表示,由於雲端平臺的興起,將許多架構師的工作都可以方便快速地完成,且許多雲端架構的問題都有規則可循,架構師的價值也越來越式微,他也在思考自己要如何轉型,他認為,程式設計師要結合架構師的角色,找到新的程式設計方法。

由於現在系統需求快速且多變,蔡學鏞認為,過去傳統的程式設計方法已經不管用,主要是因為傳統的物件導向程式設計的結構有些問題,他指出,以前的程式設計都將業務和資料緊緊地綁在一起,但是綁在一起的作法並不適合雲端平臺,物件導向的觀念在敏捷開發也完全不適合。

他點出傳統物件導向設計的眾多問題,舉例來說,蔡學鏞以前在保險公司擔任架構師時,保險的規則非常繁雜,高達1,000萬條,也有許多幽靈規則,平時都沒有執行,但是沒有人敢調整,深怕一調整系統會當掉。

另外,法規和業務調整的變動也會影響著前端的服務模組、API,以及後端調用資料庫和串連外部系統的設計,還有FaaS的設計強調沒有狀態(State),但是物件導向的物件都是有狀態,他建議,企業若要使用雲端,則要使用函數式的程式設計。

蔡學鏞歸納出五個函數式程式設計的原則,首先,設計業務功能的模組要分開,且分的越細越好,第二要採用非同步的調用方式,讓程式無需等待被調用函數的返回值,就讓程式繼續執行,第三是他認為最關鍵的,就是只要資料最終一致化就好,不需要每筆資料都變成即時交易,第四則是盡量將功能都API化,甚至他建議可以先從外圍的Interface開始設計,最後物件必須是無狀態,這樣系統面對較高的流量,就能同時開啟多個Instance。

除了上述的五大原則之外,蔡學鏞也認為,在設計雲端架構的系統時,必須對資料非常了解,有些是需要和業務人員一同合作來了解,像是資料的重要性、保密性、調用資料的費用和業務一致性,舉例來說,金錢和地址的資料遺失重要程度就不同,且也要依照不同的資料類型,將資料放在適合的資料庫,並用不同的方式存取。

有些資料的釐清,工程師則是可以透過技術或是統計的方式來理解,像是調用資料的頻率、資料筆數、資料老化現象等,他認為,只要是透過技術可以了解的,就能將規則用成通用的方式放在雲端平臺,他舉例,由於火車時刻表屬於不容易變動的資料,就不需要頻繁地調用資料,避免浪費調用的成本。

最後,資料的互相調用也是重要的議題之一,他表示,調用資料時除了可以用密碼的方式確保安全性之外,其實還可以用Attribute-Based Access Control的方式,利用調用和被調用的資料都有各自專屬屬性的特性,來做精細的比對。


Advertisement

更多 iThome相關內容