郭理靖,十二年互聯(lián)網、六年云計算行業(yè)開發(fā)經驗,曾是云服務開發(fā)者,現在是各類云服務的深度使用者,曾任北京同仁堂國際 CTO、京東云平臺高級總監(jiān)。曾在金山、淘寶、盛大就職。目前擔任北京簡網 CTO,負責產品與技術部門。
架構模式演進
CGI 模式

圖 1
CGI 出現于 1993 年,圖 1 是 CGI 模式比較簡單的結構圖。
MVC 模式
開源電商軟件等都是采用 MVC 模式,MVC 模式是做軟件開發(fā)必學和必經歷的一個階段。
圖 2
1970 年提出了 MVC 的概念,當時的主機和客戶端早已凸顯了這個概念。如圖 2 所示,這是一個 MVC 模式的標準框架,做一個電商網站時,會把訂單、用戶、物流信息整合起來,做一個單體服務。
90 年代正是 Java 的時代,MVC 模式在這個時期開始變火。開發(fā)者把 MVC 的實踐引入 Java 世界。這個模式大放異彩后,各種語言都在借鑒。
SOA 模式

圖 3
單體服務之后是 SOA 標準化(圖 3 ),在 SOA 里面比較重要的是 Service bus。在企業(yè)架構里它起到很關鍵的作用,主要用來溝通各個服務組件,就像高速公路一樣,用來連接所有的村莊。
經過 MVC 模式后,單體模式開發(fā)速度很快,網民的速度增長也很快,服務器接收的請求越來越多,慢慢需要做拆分才出現了 SOA 概念。雖然 1983 年提出了 SOA 的概念,但國內絕大部分企業(yè)至少是在 2000 年之后才開始 SOA 化。
Microservices 模式

圖 4
圖 4 是 Microservices 的架構圖,每個 Host 里面都有一個服務,它是獨立的。Microservices 于 2005 年出現,到現在仍備受關注和討論。一個概念由提出到落地,有很深層次的原因,具體后文分析。
何時使用微服務?

圖 5
微服務并不能解決所有問題,所以一定要慎重考慮何時采用微服務。這張圖(圖 5 )很常見,單體服務的開發(fā)速度、代價都是比較低的,只有業(yè)務復雜到一定程度的時候才適合采用微服務。微服務其實是一個理念和框架,它對團隊的要求比較高,首先團隊所有成員都要認可這個事情,認可微服務的理念和治理框架,否則執(zhí)行過程中會有很多問題。

圖 6
單體服務是把所有東西都部署在一塊,如圖 6 所示,這是最簡單的單體服務。在一定階段下,簡單代表高效,所有東西部署在一起時,整個過程的溝通效率會提高。
提到微服務時首先會提到康威定律,即當開發(fā)一個新的架構時,組織架構圖跟軟件架構圖是極其相似的。舉例說明,一個最簡單的 APP 開發(fā)架構包括移動端和服務端,如果把后臺服務的人進行角色分層,會有運維、前端、做中間商業(yè)邏輯的后臺開發(fā)者,就會發(fā)現軟件架構跟組織架構很相似。對微服務進行的拆分,其實也是對人員組織架構和角色職能的拆分。這兩者是很相似的。
為什么 API 很重要?
微服務里面最重要的是 API ,API 是服務公開化的方法,它是服務價值的精華體現。API 一定要可靠、可用、可讀,前兩點大部分人都能做到,但是可讀性,很多團隊卻做得很差。許多國內開發(fā)出來的開發(fā)系統(tǒng)文檔可讀性很差,看完之后可能還需要跟對方人員溝通。然而,無論是給內部開發(fā),還是給外部用戶提供服務,都不希望產生更多的溝通。
出現這種情況的原因在于程序員本身的特性,程序員是寫程序的。很多程序員認為寫文檔不如寫程序有快感,這對于很多人來說是一種挑戰(zhàn),也是一件很枯燥的事情??墒?,對于公眾來說,文檔卻很重要,就像要成為一個好的架構師就要有良好的溝通能力,要做好微服務,API 可讀性很重要。